mirror of
https://github.com/lunarmodules/luasocket.git
synced 2025-02-13 15:32:52 +01:00
Changed some variable names.
Added correct scheme test.
This commit is contained in:
parent
ef5322a92a
commit
84e503afe3
46
src/ftp.lua
46
src/ftp.lua
@ -273,11 +273,11 @@ end
|
|||||||
-- server: server socket bound to local address
|
-- server: server socket bound to local address
|
||||||
-- name: file name
|
-- name: file name
|
||||||
-- is_directory: is file a directory name?
|
-- is_directory: is file a directory name?
|
||||||
-- download_cb: callback to receive file contents
|
-- content_cb: callback to receive file contents
|
||||||
-- Returns
|
-- Returns
|
||||||
-- err: error message in case of error, nil otherwise
|
-- err: error message in case of error, nil otherwise
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Private.retrieve(control, server, name, is_directory, download_cb)
|
function Private.retrieve(control, server, name, is_directory, content_cb)
|
||||||
local code, answer
|
local code, answer
|
||||||
local data
|
local data
|
||||||
-- ask server for file or directory listing accordingly
|
-- ask server for file or directory listing accordingly
|
||||||
@ -295,7 +295,7 @@ function Private.retrieve(control, server, name, is_directory, download_cb)
|
|||||||
control:close()
|
control:close()
|
||||||
return answer
|
return answer
|
||||||
end
|
end
|
||||||
answer = %Private.receive_indirect(data, download_cb)
|
answer = %Private.receive_indirect(data, content_cb)
|
||||||
if answer then
|
if answer then
|
||||||
control:close()
|
control:close()
|
||||||
return answer
|
return answer
|
||||||
@ -380,10 +380,9 @@ end
|
|||||||
-- err: error message if any
|
-- err: error message if any
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Private.change_type(control, params)
|
function Private.change_type(control, params)
|
||||||
local type
|
local type, _
|
||||||
if params == "type=i" then type = "i"
|
_, _, type = strfind(params or "", "type=(.)")
|
||||||
elseif params == "type=a" then type = "a" end
|
if type == "a" or type == "i" then
|
||||||
if type then
|
|
||||||
local code, err = %Private.command(control, "type", type, {200})
|
local code, err = %Private.command(control, "type", type, {200})
|
||||||
if not code then return err end
|
if not code then return err end
|
||||||
end
|
end
|
||||||
@ -443,25 +442,25 @@ end
|
|||||||
-- Input
|
-- Input
|
||||||
-- control: control connection with server
|
-- control: control connection with server
|
||||||
-- request: a table with the fields:
|
-- request: a table with the fields:
|
||||||
-- upload_cb: send callback to send file contents
|
-- content_cb: send callback to send file contents
|
||||||
-- segment: parsed URL path segments
|
-- segment: parsed URL path segments
|
||||||
-- Returns
|
-- Returns
|
||||||
-- err: error message if any
|
-- err: error message if any
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Private.upload(control, request, segment)
|
function Private.upload(control, request, segment)
|
||||||
local code, name, upload_cb
|
local code, name, content_cb
|
||||||
-- get remote file name
|
-- get remote file name
|
||||||
name = segment[getn(segment)]
|
name = segment[getn(segment)]
|
||||||
if not name then
|
if not name then
|
||||||
control:close()
|
control:close()
|
||||||
return "Invalid file path"
|
return "Invalid file path"
|
||||||
end
|
end
|
||||||
upload_cb = request.upload_cb
|
content_cb = request.content_cb
|
||||||
-- setup passive connection
|
-- setup passive connection
|
||||||
local server, answer = %Private.port(control)
|
local server, answer = %Private.port(control)
|
||||||
if not server then return answer end
|
if not server then return answer end
|
||||||
-- ask server to receive file
|
-- ask server to receive file
|
||||||
code, answer = %Private.store(control, server, name, upload_cb)
|
code, answer = %Private.store(control, server, name, content_cb)
|
||||||
if not code then return answer end
|
if not code then return answer end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -470,15 +469,15 @@ end
|
|||||||
-- Input
|
-- Input
|
||||||
-- control: control connection with server
|
-- control: control connection with server
|
||||||
-- request: a table with the fields:
|
-- request: a table with the fields:
|
||||||
-- download_cb: receive callback to receive file contents
|
-- content_cb: receive callback to receive file contents
|
||||||
-- segment: parsed URL path segments
|
-- segment: parsed URL path segments
|
||||||
-- Returns
|
-- Returns
|
||||||
-- err: error message if any
|
-- err: error message if any
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Private.download(control, request, segment)
|
function Private.download(control, request, segment)
|
||||||
local code, name, is_directory, download_cb
|
local code, name, is_directory, content_cb
|
||||||
is_directory = segment.is_directory
|
is_directory = segment.is_directory
|
||||||
download_cb = request.download_cb
|
content_cb = request.content_cb
|
||||||
-- get remote file name
|
-- get remote file name
|
||||||
name = segment[getn(segment)]
|
name = segment[getn(segment)]
|
||||||
if not name and not is_directory then
|
if not name and not is_directory then
|
||||||
@ -490,7 +489,7 @@ function Private.download(control, request, segment)
|
|||||||
if not server then return answer end
|
if not server then return answer end
|
||||||
-- ask server to send file or directory listing
|
-- ask server to send file or directory listing
|
||||||
code, answer = %Private.retrieve(control, server, name,
|
code, answer = %Private.retrieve(control, server, name,
|
||||||
is_directory, download_cb)
|
is_directory, content_cb)
|
||||||
if not code then return answer end
|
if not code then return answer end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -511,7 +510,8 @@ function Private.parse_url(request)
|
|||||||
user = "anonymous",
|
user = "anonymous",
|
||||||
port = 21,
|
port = 21,
|
||||||
path = "/",
|
path = "/",
|
||||||
password = %Public.EMAIL
|
password = %Public.EMAIL,
|
||||||
|
scheme = "ftp"
|
||||||
})
|
})
|
||||||
-- explicit login information overrides that given by URL
|
-- explicit login information overrides that given by URL
|
||||||
parsed.user = request.user or parsed.user
|
parsed.user = request.user or parsed.user
|
||||||
@ -560,12 +560,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
|
||||||
-- download_cb: receive callback to receive file contents
|
-- content_cb: receive callback to receive file contents
|
||||||
-- Returns
|
-- Returns
|
||||||
-- err: error message if any
|
-- err: error message if any
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Public.get_cb(request)
|
function Public.get_cb(request)
|
||||||
local parsed = %Private.parse_url(request)
|
local parsed = %Private.parse_url(request)
|
||||||
|
if parsed.scheme ~= "ftp" then
|
||||||
|
return format("unknown scheme '%s'", parsed.scheme)
|
||||||
|
end
|
||||||
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)
|
||||||
@ -583,12 +586,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
|
||||||
-- upload_cb: send callback to send file contents
|
-- content_cb: send callback to send file contents
|
||||||
-- Returns
|
-- Returns
|
||||||
-- err: error message if any
|
-- err: error message if any
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Public.put_cb(request)
|
function Public.put_cb(request)
|
||||||
local parsed = %Private.parse_url(request)
|
local parsed = %Private.parse_url(request)
|
||||||
|
if parsed.scheme ~= "ftp" then
|
||||||
|
return format("unknown scheme '%s'", parsed.scheme)
|
||||||
|
end
|
||||||
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)
|
||||||
@ -612,7 +618,7 @@ end
|
|||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
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.upload_cb = function()
|
request.content_cb = function()
|
||||||
return %content, strlen(%content)
|
return %content, strlen(%content)
|
||||||
end
|
end
|
||||||
return %Public.put_cb(request)
|
return %Public.put_cb(request)
|
||||||
@ -633,7 +639,7 @@ end
|
|||||||
function Public.get(url_or_request)
|
function Public.get(url_or_request)
|
||||||
local cat = Concat.create()
|
local cat = Concat.create()
|
||||||
local request = %Private.build_request(url_or_request)
|
local request = %Private.build_request(url_or_request)
|
||||||
request.download_cb = function(chunk, err)
|
request.content_cb = function(chunk, err)
|
||||||
if chunk then %cat:addstring(chunk) end
|
if chunk then %cat:addstring(chunk) end
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user