diff options
author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2003-05-25 01:54:13 +0000 |
---|---|---|
committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2003-05-25 01:54:13 +0000 |
commit | 0f6c8d50a99997ac7829864b1c93362b50f1bbf3 (patch) | |
tree | d0cefe3a05484e65b7b7e79d8cae4a1d2e6d19fb /src/ftp.lua | |
parent | c1ef3e7103cc652d2004ef1ddc9409b946207f33 (diff) | |
download | luasocket-0f6c8d50a99997ac7829864b1c93362b50f1bbf3.tar.gz luasocket-0f6c8d50a99997ac7829864b1c93362b50f1bbf3.tar.bz2 luasocket-0f6c8d50a99997ac7829864b1c93362b50f1bbf3.zip |
Porting to LUA 5.0 final
Diffstat (limited to 'src/ftp.lua')
-rw-r--r-- | src/ftp.lua | 57 |
1 files changed, 34 insertions, 23 deletions
diff --git a/src/ftp.lua b/src/ftp.lua index 4017eb5..c48f2c7 100644 --- a/src/ftp.lua +++ b/src/ftp.lua | |||
@@ -7,7 +7,8 @@ | |||
7 | ----------------------------------------------------------------------------- | 7 | ----------------------------------------------------------------------------- |
8 | 8 | ||
9 | local Public, Private = {}, {} | 9 | local Public, Private = {}, {} |
10 | socket.ftp = Public | 10 | local socket = _G[LUASOCKET_LIBNAME] -- get LuaSocket namespace |
11 | socket.ftp = Public -- create ftp sub namespace | ||
11 | 12 | ||
12 | ----------------------------------------------------------------------------- | 13 | ----------------------------------------------------------------------------- |
13 | -- Program constants | 14 | -- Program constants |
@@ -23,32 +24,42 @@ Public.EMAIL = "anonymous@anonymous.org" | |||
23 | Public.BLOCKSIZE = 8192 | 24 | Public.BLOCKSIZE = 8192 |
24 | 25 | ||
25 | ----------------------------------------------------------------------------- | 26 | ----------------------------------------------------------------------------- |
26 | -- Tries to send DOS mode lines. Closes socket on error. | 27 | -- Tries to get a pattern from the server and closes socket on error |
27 | -- Input | 28 | -- sock: socket connected to the server |
28 | -- sock: server socket | 29 | -- pattern: pattern to receive |
29 | -- line: string to be sent | ||
30 | -- Returns | 30 | -- Returns |
31 | -- err: message in case of error, nil if successfull | 31 | -- received pattern on success |
32 | -- nil followed by error message on error | ||
32 | ----------------------------------------------------------------------------- | 33 | ----------------------------------------------------------------------------- |
33 | function Private.try_sendline(sock, line) | 34 | function Private.try_receive(sock, pattern) |
34 | local err = sock:send(line .. "\r\n") | 35 | local data, err = sock:receive(pattern) |
35 | if err then sock:close() end | 36 | if not data then sock:close() end |
36 | return err | 37 | return data, err |
37 | end | 38 | end |
38 | 39 | ||
39 | ----------------------------------------------------------------------------- | 40 | ----------------------------------------------------------------------------- |
40 | -- Tries to get a pattern from the server and closes socket on error | 41 | -- Tries to send data to the server and closes socket on error |
41 | -- sock: socket connected to the server | 42 | -- sock: socket connected to the server |
42 | -- ...: pattern to receive | 43 | -- data: data to send |
43 | -- Returns | 44 | -- Returns |
44 | -- ...: received pattern | 45 | -- err: error message if any, nil if successfull |
45 | -- err: error message if any | ||
46 | ----------------------------------------------------------------------------- | 46 | ----------------------------------------------------------------------------- |
47 | function Private.try_receive(...) | 47 | function Private.try_send(sock, data) |
48 | local sock = arg[1] | 48 | local sent, err = sock:send(data) |
49 | local data, err = sock.receive(unpack(arg)) | 49 | if not sent then sock:close() end |
50 | if err then sock:close() end | 50 | return err |
51 | return data, err | 51 | end |
52 | |||
53 | ----------------------------------------------------------------------------- | ||
54 | -- Tries to send DOS mode lines. Closes socket on error. | ||
55 | -- Input | ||
56 | -- sock: server socket | ||
57 | -- line: string to be sent | ||
58 | -- Returns | ||
59 | -- err: message in case of error, nil if successfull | ||
60 | ----------------------------------------------------------------------------- | ||
61 | function Private.try_sendline(sock, line) | ||
62 | return Private.try_send(sock, line .. "\r\n") | ||
52 | end | 63 | end |
53 | 64 | ||
54 | ----------------------------------------------------------------------------- | 65 | ----------------------------------------------------------------------------- |
@@ -307,20 +318,20 @@ end | |||
307 | -- nil if successfull, or an error message in case of error | 318 | -- nil if successfull, or an error message in case of error |
308 | ----------------------------------------------------------------------------- | 319 | ----------------------------------------------------------------------------- |
309 | function Private.send_indirect(data, send_cb, chunk, size) | 320 | function Private.send_indirect(data, send_cb, chunk, size) |
310 | local sent, err | 321 | local total, sent, err |
311 | sent = 0 | 322 | total = 0 |
312 | while 1 do | 323 | while 1 do |
313 | if type(chunk) ~= "string" or type(size) ~= "number" then | 324 | if type(chunk) ~= "string" or type(size) ~= "number" then |
314 | data:close() | 325 | data:close() |
315 | if not chunk and type(size) == "string" then return size | 326 | if not chunk and type(size) == "string" then return size |
316 | else return "invalid callback return" end | 327 | else return "invalid callback return" end |
317 | end | 328 | end |
318 | err = data:send(chunk) | 329 | sent, err = data:send(chunk) |
319 | if err then | 330 | if err then |
320 | data:close() | 331 | data:close() |
321 | return err | 332 | return err |
322 | end | 333 | end |
323 | sent = sent + string.len(chunk) | 334 | total = total + sent |
324 | if sent >= size then break end | 335 | if sent >= size then break end |
325 | chunk, size = send_cb() | 336 | chunk, size = send_cb() |
326 | end | 337 | end |