Merge TCP aborted(), timedout() and closed() methods into a single
[people/xl0/gpxe.git] / src / include / gpxe / ftp.h
1 #ifndef _GPXE_FTP_H
2 #define _GPXE_FTP_H
3
4 /** @file
5  *
6  * File transfer protocol
7  *
8  */
9
10 #include <stdint.h>
11 #include <gpxe/tcp.h>
12
13 /**
14  * FTP states
15  *
16  * These @b must be sequential, i.e. a successful FTP session must
17  * pass through each of these states in order.
18  */
19 enum ftp_state {
20         FTP_CONNECT = 0,
21         FTP_USER,
22         FTP_PASS,
23         FTP_TYPE,
24         FTP_PASV,
25         FTP_RETR,
26         FTP_QUIT,
27         FTP_DONE,
28 };
29
30 /**
31  * An FTP request
32  *
33  */
34 struct ftp_request {
35         /** TCP connection for this request */
36         struct tcp_connection tcp;
37         /** File to download */
38         const char *filename;
39         /** Callback function
40          *
41          * @v data      Received data
42          * @v len       Length of received data
43          *
44          * This function is called for all data received from the
45          * remote server.
46          */
47         void ( *callback ) ( char *data, size_t len );
48         /** Completion indicator
49          *
50          * This will be set to a non-zero value when the transfer is
51          * complete.  A negative value indicates an error.
52          */
53         int complete;
54
55         /** Current state */
56         enum ftp_state state;
57         /** Amount of current message already transmitted */
58         size_t already_sent;
59         /** Buffer to be filled with data received via the control channel */
60         char *recvbuf;
61         /** Remaining size of recvbuf */
62         size_t recvsize;
63         /** FTP status code, as text */
64         char status_text[4];
65         /** Passive-mode parameters, as text */
66         char passive_text[24]; /* "aaa,bbb,ccc,ddd,eee,fff" */
67
68         /** TCP connection for the data channel */
69         struct tcp_connection tcp_data;
70 };
71
72 extern void ftp_connect ( struct ftp_request *ftp );
73
74 #endif