From aec0e127d2d9aad667612a35dbf8b8ccf8cc001c Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 30 Apr 2006 12:02:07 +0000 Subject: Proof-of-concept FTP implementation --- src/include/gpxe/ftp.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/include/gpxe/ftp.h (limited to 'src/include') diff --git a/src/include/gpxe/ftp.h b/src/include/gpxe/ftp.h new file mode 100644 index 000000000..f2db5a136 --- /dev/null +++ b/src/include/gpxe/ftp.h @@ -0,0 +1,68 @@ +#ifndef _GPXE_FTP_H +#define _GPXE_FTP_H + +/** @file + * + * File transfer protocol + * + */ + +#include +#include + +enum ftp_state { + FTP_CONNECT = 0, + FTP_USER, + FTP_PASS, + FTP_TYPE, + FTP_PASV, + FTP_RETR, + FTP_QUIT, + FTP_DONE, +}; + +/** + * An FTP request + * + */ +struct ftp_request { + /** TCP connection for this request */ + struct tcp_connection tcp; + /** File to download */ + const char *filename; + /** Callback function + * + * @v data Received data + * @v len Length of received data + * + * This function is called for all data received from the + * remote server. + */ + void ( *callback ) ( char *data, size_t len ); + /** Completion indicator + * + * This will be set to a non-zero value when the transfer is + * complete. A negative value indicates an error. + */ + int complete; + + /** Current state */ + enum ftp_state state; + /** Amount of current message already transmitted */ + size_t already_sent; + /** Buffer to be filled with data received via the control channel */ + char *recvbuf; + /** Remaining size of recvbuf */ + size_t recvsize; + /** FTP status code, as text */ + char status_text[4]; + /** Passive-mode parameters, as text */ + char passive_text[24]; /* "aaa,bbb,ccc,ddd,eee,fff" */ + + /** TCP connection for the data channel */ + struct tcp_connection tcp_data; +}; + +extern void ftp_connect ( struct ftp_request *ftp ); + +#endif -- cgit v1.2.3-55-g7522