aboutsummaryrefslogtreecommitdiff
path: root/src/ftp.lua
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2003-05-25 01:54:13 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2003-05-25 01:54:13 +0000
commit0f6c8d50a99997ac7829864b1c93362b50f1bbf3 (patch)
treed0cefe3a05484e65b7b7e79d8cae4a1d2e6d19fb /src/ftp.lua
parentc1ef3e7103cc652d2004ef1ddc9409b946207f33 (diff)
downloadluasocket-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.lua57
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
9local Public, Private = {}, {} 9local Public, Private = {}, {}
10socket.ftp = Public 10local socket = _G[LUASOCKET_LIBNAME] -- get LuaSocket namespace
11socket.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"
23Public.BLOCKSIZE = 8192 24Public.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-----------------------------------------------------------------------------
33function Private.try_sendline(sock, line) 34function 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
37end 38end
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-----------------------------------------------------------------------------
47function Private.try_receive(...) 47function 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 51end
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-----------------------------------------------------------------------------
61function Private.try_sendline(sock, line)
62 return Private.try_send(sock, line .. "\r\n")
52end 63end
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-----------------------------------------------------------------------------
309function Private.send_indirect(data, send_cb, chunk, size) 320function 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