-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))).