911a748512722a5746dd293b422f0a22186b4618
[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/stream.h>
12 #include <gpxe/async.h>
13 #include <gpxe/linebuf.h>
14 #include <gpxe/uri.h>
15
16 /** HTTP default port */
17 #define HTTP_PORT 80
18
19 /** HTTP receive state */
20 enum http_rx_state {
21         HTTP_RX_RESPONSE = 0,
22         HTTP_RX_HEADER,
23         HTTP_RX_DATA,
24         HTTP_RX_DEAD,
25 };
26
27 /**
28  * An HTTP request
29  *
30  */
31 struct http_request {
32         /** URI being fetched */
33         struct uri *uri;
34         /** Data buffer to fill */
35         struct buffer *buffer;
36         /** Asynchronous operation */
37         struct async async;
38
39         /** HTTP response code */
40         unsigned int response;
41         /** HTTP Content-Length */
42         size_t content_length;
43
44         /** Server address */
45         struct sockaddr server;
46         /** Stream application for this request */
47         struct stream_application stream;
48         /** Number of bytes already sent */
49         size_t tx_offset;
50         /** RX state */
51         enum http_rx_state rx_state;
52         /** Line buffer for received header lines */
53         struct line_buffer linebuf;
54 };
55
56 extern int http_get ( struct uri *uri, struct buffer *buffer,
57                       struct async *parent );
58
59 #endif /* _GPXE_HTTP_H */