New HTTP protocol and test code
[people/xl0/gpxe.git] / src / include / gpxe / http.h
1 #ifndef _GPXE_HTTP_H
2 #define _GPXE_HTTP_H
3
4 /** @file
5  *
6  * Hyper Text Transport Protocol
7  *
8  */
9
10 #include <stdint.h>
11 #include <gpxe/tcp.h>
12 #include <gpxe/async.h>
13
14 /** HTTP default port */
15 #define HTTP_PORT 80
16
17 enum http_state {
18         HTTP_INIT_CONN = 0,
19         HTTP_REQUEST_FILE,
20         HTTP_PARSE_HEADER,
21         HTTP_RECV_FILE,
22         HTTP_DONE,
23 };
24
25 /**
26  * A HTTP request
27  *
28  */
29 struct http_request;
30
31 struct http_request {
32         /** TCP connection for this request */
33         struct tcp_connection tcp;
34         /** Current state */
35         enum http_state state;
36         /** File to download */
37         const char *filename;
38         /** Size of file downloading */
39         size_t file_size;
40         /** Number of bytes recieved so far */
41         size_t file_recv;
42         /** Callback function
43          *
44          * @v http      HTTP request struct
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 ) ( struct http_request *http, char *data, size_t len );
52         /** Asynchronous operation */
53         struct async_operation aop;
54 };
55
56 extern struct async_operation * get_http ( struct http_request *http );
57
58 #endif /* _GPXE_HTTP_H */