Current section

Files

Jump to
ftpasta src ftpasta_ffi.erl
Raw

src/ftpasta_ffi.erl

-module(ftpasta_ffi).
-import(ftpasta_ffi_helpers, [str_to_charlist/1, charlist_to_str/1, normalise/1, normalise_charlist/1]).
-export([
append/3, append_bin/3, cd/2, close/1, delete/2, formaterror/1,
lcd/2, lpwd/1, ls/2, mkdir/2, nlist/2, open/4, pwd/1,
recv/3, recv_bin/2, rename/3, rmdir/2, send/3, send_bin/3, user/3
]).
append(Pid, LocalFileName, RemoteFileName) -> normalise(ftp:append(Pid, str_to_charlist(LocalFileName), str_to_charlist(RemoteFileName))).
append_bin(Pid, Bin, RemoteFileName) -> normalise(ftp:append_bin(Pid, Bin, str_to_charlist(RemoteFileName))).
cd(Pid, Dir) -> normalise(ftp:cd(Pid, str_to_charlist(Dir))).
close(Pid) -> ftp:close(Pid), nil.
delete(Pid, File) -> normalise(ftp:delete(Pid, str_to_charlist(File))).
formaterror(Reason) -> charlist_to_str(ftp:formaterror({error, Reason})).
lcd(Pid, Dir) -> normalise(ftp:lcd(Pid, str_to_charlist(Dir))).
lpwd(Pid) -> {_, Dir} = ftp:lpwd(Pid), charlist_to_str(Dir).
ls(Pid, Dir) -> normalise_charlist(ftp:ls(Pid, str_to_charlist(Dir))).
mkdir(Pid, Dir) -> normalise(ftp:mkdir(Pid, str_to_charlist(Dir))).
nlist(Pid, Dir) -> normalise_charlist(ftp:nlist(Pid, str_to_charlist(Dir))).
tls_config(true) -> [
{cacerts, public_key:cacerts_get()},
{log_level, none},
{server_name_indication, disable}, % FIXME: SNI always fails?
{session_tickets, auto},
{verify, verify_peer}
];
tls_config(false) -> [
{log_level, none},
{server_name_indication, disable}, % FIXME: SNI always fails?
{session_tickets, auto},
{verify, verify_none}
].
ftp_config(Port, explicit, Verify) -> [
{port, Port},
{tls_ctrl_session_reuse, true},
{tls_sec_method, ftpes},
{tls, tls_config(Verify)}
];
ftp_config(Port, implicit, Verify) -> [
{port, Port},
{tls_ctrl_session_reuse, true},
{tls_sec_method, ftps},
{tls, tls_config(Verify)}
];
ftp_config(Port, plaintext, _) -> [{port, Port}].
open(Host, Port, TLS, Cert) -> ftp:open(str_to_charlist(Host), ftp_config(Port, TLS, Cert)).
pwd(Pid) -> normalise_charlist(ftp:pwd(Pid)).
recv(Pid, RemoteFileName, LocalFileName) -> normalise(ftp:recv(Pid, str_to_charlist(RemoteFileName), str_to_charlist(LocalFileName))).
recv_bin(Pid, RemoteFileName) -> ftp:recv_bin(Pid, str_to_charlist(RemoteFileName)).
rename(Pid, Old, New) -> normalise(ftp:rename(Pid, str_to_charlist(Old), str_to_charlist(New))).
rmdir(Pid, Dir) -> normalise(ftp:rmdir(Pid, str_to_charlist(Dir))).
send(Pid, LocalFileName, RemoteFileName) -> normalise(ftp:send(Pid, str_to_charlist(LocalFileName), str_to_charlist(RemoteFileName))).
send_bin(Pid, Bin, RemoteFileName) -> normalise(ftp:send_bin(Pid, Bin, str_to_charlist(RemoteFileName))).
user(Pid, User, Pass) -> normalise(ftp:user(Pid, str_to_charlist(User), str_to_charlist(Pass))).