Update ftp.c and hello.c to use the generic async_operations API.
[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/async.h>
12 #include <gpxe/tcp.h>
13
14 /** FTP default port */
15 #define FTP_PORT 21
16
17 /**
18  * FTP states
19  *
20  * These @b must be sequential, i.e. a successful FTP session must
21  * pass through each of these states in order.
22  */
23 enum ftp_state {
24         FTP_CONNECT = 0,
25         FTP_USER,
26         FTP_PASS,
27         FTP_TYPE,
28         FTP_PASV,
29         FTP_RETR,
30         FTP_QUIT,
31         FTP_DONE,
32 };
33
34 /**
35  * An FTP request
36  *
37  */
38 struct ftp_request {
39         /** TCP connection for this request */
40         struct tcp_connection tcp;
41         /** File to download */
42         const char *filename;
43         /** Callback function
44          *
45          * @v data      Received data
46          * @v len       Length of received data
47          *
48          * This function is called for all data received from the
49          * remote server.
50          */
51         void ( *callback ) ( char *data, size_t len );
52         /** Asynchronous operation for this FTP operation */
53         struct async_operation aop;
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 struct async_operation * ftp_get ( struct ftp_request *ftp );
73
74 #endif /* _GPXE_FTP_H */