Update TFTP and FTP to take the same temporary URI scheme as HTTP
[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 struct buffer;
15
16 /** FTP default port */
17 #define FTP_PORT 21
18
19 /**
20  * FTP states
21  *
22  * These @b must be sequential, i.e. a successful FTP session must
23  * pass through each of these states in order.
24  */
25 enum ftp_state {
26         FTP_CONNECT = 0,
27         FTP_USER,
28         FTP_PASS,
29         FTP_TYPE,
30         FTP_PASV,
31         FTP_RETR,
32         FTP_QUIT,
33         FTP_DONE,
34 };
35
36 /**
37  * An FTP request
38  *
39  */
40 struct ftp_request {
41         /** URI being fetched */
42         struct uri *uri;
43         /** Data buffer to fill */
44         struct buffer *buffer;
45         /** Asynchronous operation */
46         struct async async;
47
48         /** Current state */
49         enum ftp_state state;
50         /** Amount of current message already transmitted */
51         size_t already_sent;
52         /** Buffer to be filled with data received via the control channel */
53         char *recvbuf;
54         /** Remaining size of recvbuf */
55         size_t recvsize;
56         /** FTP status code, as text */
57         char status_text[4];
58         /** Passive-mode parameters, as text */
59         char passive_text[24]; /* "aaa,bbb,ccc,ddd,eee,fff" */
60         /** TCP application for the control channel */
61         struct tcp_application tcp;
62         /** TCP application for the data channel */
63         struct tcp_application tcp_data;
64 };
65
66 extern int ftp_get ( struct uri *uri, struct buffer *buffer,
67                      struct async *parent );
68
69 #endif /* _GPXE_FTP_H */