SAFT has been implemented as a typical client/server protocol. The SAFT client sends data files to the SAFT server on the Internet. The server receives all files and delivers them either to the local recipient or saves them into a spool area, from where they can be fetched by the recipient using a receive client. The basic principle is the same as for Internet mail. The spooling procedure and the receive client are not described by the SAFT standard and must be implemented separately. SAFT is the description of the transfer protocol only.
The client/server communication is split into the communication protocol and the transfered file itself as a binary "data bit stream".
SAFT has the following command set and supports the file attributes described here:
Command line arguments are UTF-7 coded strings, for supporting all flavours of operating systems and their character sets by using a clean ASCII protocol. UTF-7 provides a reversible and loss-free encoding of Unicode according to NVT-ASCII. UTF-7 translates characters, which are not included in the NVT-ASCII chracter set, using Unicode and encodes them back into NVT-ASCII using the mbase64 algorithm. Doing so has the advantage that a text consisting of large parts of readable ASCII characters can be read plain, only the non-ASCII parts will be encoded.
SAFT uses TCP as its transportation layer and is bound to port 487, which has been assigned by the IANA for SAFT. The SAFT client connects to this port on the SAFT server.
For demonstration purposes and as a reference implementation the sendfile software has been coded.
F*EX (File EXchange) is the successor of SAFT/sendfile
A SAFT server acts as any other Internet server, you can connect to it using a telnet client speaking directly to port 487 (for debugging purposes):
$ telnet linux.rus.uni-stuttgart.de 487 Trying 184.108.40.206... Connected to linux.rus.uni-stuttgart.de. 220 linux.rus.uni-stuttgart.de SAFT server (sendfiled 1.5 on Linux) ready. help 214-The following commands are recognized: 214- FROM <sender> [<real name>] 214- TO <recipient> 214- FILE <name> 214- SIZE <size to transfer> <size uncompressed> 214- TYPE BINARY|SOURCE|TEXT=<RFC-1345 character set name> [COMPRESSED|CRYPTED] 214- DATE <ISO-8601 date & time string> 214- SIGN [<pgp signature> (armor)] 214- ATTR TAR|EXE|NONE 214- MSG <message> 214- DEL 214- RESEND 214- DATA 214- QUIT 214-All argument strings have to be UTF-7 encoded. 214 You must specify at least FROM, TO, FILE, SIZE and DATA to send a file. quit 221 Goodbye. Connection closed by foreign host.