OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2001 Niels Provos <provos@citi.umich.edu> | |
3 * All rights reserved. | |
4 * | |
5 * This header file contains definitions for dealing with HTTP requests | |
6 * that are internal to libevent. As user of the library, you should not | |
7 * need to know about these. | |
8 */ | |
9 | |
10 #ifndef _HTTP_H_ | |
11 #define _HTTP_H_ | |
12 | |
13 #define HTTP_CONNECT_TIMEOUT 45 | |
14 #define HTTP_WRITE_TIMEOUT 50 | |
15 #define HTTP_READ_TIMEOUT 50 | |
16 | |
17 #define HTTP_PREFIX "http://" | |
18 #define HTTP_DEFAULTPORT 80 | |
19 | |
20 enum message_read_status { | |
21 ALL_DATA_READ = 1, | |
22 MORE_DATA_EXPECTED = 0, | |
23 DATA_CORRUPTED = -1, | |
24 REQUEST_CANCELED = -2 | |
25 }; | |
26 | |
27 enum evhttp_connection_error { | |
28 EVCON_HTTP_TIMEOUT, | |
29 EVCON_HTTP_EOF, | |
30 EVCON_HTTP_INVALID_HEADER | |
31 }; | |
32 | |
33 struct evbuffer; | |
34 struct addrinfo; | |
35 struct evhttp_request; | |
36 | |
37 /* A stupid connection object - maybe make this a bufferevent later */ | |
38 | |
39 enum evhttp_connection_state { | |
40 EVCON_DISCONNECTED, /**< not currently connected not trying either*/ | |
41 EVCON_CONNECTING, /**< tries to currently connect */ | |
42 EVCON_IDLE, /**< connection is established */ | |
43 EVCON_READING_FIRSTLINE,/**< reading Request-Line (incoming conn) or | |
44 **< Status-Line (outgoing conn) */ | |
45 EVCON_READING_HEADERS, /**< reading request/response headers */ | |
46 EVCON_READING_BODY, /**< reading request/response body */ | |
47 EVCON_READING_TRAILER, /**< reading request/response chunked trailer */ | |
48 EVCON_WRITING /**< writing request/response headers/body */ | |
49 }; | |
50 | |
51 struct event_base; | |
52 | |
53 struct evhttp_connection { | |
54 /* we use tailq only if they were created for an http server */ | |
55 TAILQ_ENTRY(evhttp_connection) (next); | |
56 | |
57 int fd; | |
58 struct event ev; | |
59 struct event close_ev; | |
60 struct evbuffer *input_buffer; | |
61 struct evbuffer *output_buffer; | |
62 | |
63 char *bind_address; /* address to use for binding the src */ | |
64 u_short bind_port; /* local port for binding the src */ | |
65 | |
66 char *address; /* address to connect to */ | |
67 u_short port; | |
68 | |
69 int flags; | |
70 #define EVHTTP_CON_INCOMING 0x0001 /* only one request on it ever */ | |
71 #define EVHTTP_CON_OUTGOING 0x0002 /* multiple requests possible */ | |
72 #define EVHTTP_CON_CLOSEDETECT 0x0004 /* detecting if persistent close */ | |
73 | |
74 int timeout; /* timeout in seconds for events */ | |
75 int retry_cnt; /* retry count */ | |
76 int retry_max; /* maximum number of retries */ | |
77 | |
78 enum evhttp_connection_state state; | |
79 | |
80 /* for server connections, the http server they are connected with */ | |
81 struct evhttp *http_server; | |
82 | |
83 TAILQ_HEAD(evcon_requestq, evhttp_request) requests; | |
84 | |
85 void (*cb)(struct evhttp_conn
ection *, void *); | |
86 void *cb_arg; | |
87 | |
88 void (*closecb)(struct evhttp_connection *, void *); | |
89 void *closecb_arg; | |
90 | |
91 struct event_base *base; | |
92 }; | |
93 | |
94 struct evhttp_cb { | |
95 TAILQ_ENTRY(evhttp_cb) next; | |
96 | |
97 char *what; | |
98 | |
99 void (*cb)(struct evhttp_request *req, void *); | |
100 void *cbarg; | |
101 }; | |
102 | |
103 /* both the http server as well as the rpc system need to queue connections */ | |
104 TAILQ_HEAD(evconq, evhttp_connection); | |
105 | |
106 /* each bound socket is stored in one of these */ | |
107 struct evhttp_bound_socket { | |
108 TAILQ_ENTRY(evhttp_bound_socket) (next); | |
109 | |
110 struct event bind_ev; | |
111 }; | |
112 | |
113 struct evhttp { | |
114 TAILQ_HEAD(boundq, evhttp_bound_socket) sockets; | |
115 | |
116 TAILQ_HEAD(httpcbq, evhttp_cb) callbacks; | |
117 struct evconq connections; | |
118 | |
119 int timeout; | |
120 | |
121 void (*gencb)(struct evhttp_request *req, void *); | |
122 void *gencbarg; | |
123 | |
124 struct event_base *base; | |
125 }; | |
126 | |
127 /* resets the connection; can be reused for more requests */ | |
128 void evhttp_connection_reset(struct evhttp_connection *); | |
129 | |
130 /* connects if necessary */ | |
131 int evhttp_connection_connect(struct evhttp_connection *); | |
132 | |
133 /* notifies the current request that it failed; resets connection */ | |
134 void evhttp_connection_fail(struct evhttp_connection *, | |
135 enum evhttp_connection_error error); | |
136 | |
137 void evhttp_get_request(struct evhttp *, int, struct sockaddr *, socklen_t); | |
138 | |
139 int evhttp_hostportfile(char *, char **, u_short *, char **); | |
140 | |
141 int evhttp_parse_firstline(struct evhttp_request *, struct evbuffer*); | |
142 int evhttp_parse_headers(struct evhttp_request *, struct evbuffer*); | |
143 | |
144 void evhttp_start_read(struct evhttp_connection *); | |
145 void evhttp_make_header(struct evhttp_connection *, struct evhttp_request *); | |
146 | |
147 void evhttp_write_buffer(struct evhttp_connection *, | |
148 void (*)(struct evhttp_connection *, void *), void *); | |
149 | |
150 /* response sending HTML the data in the buffer */ | |
151 void evhttp_response_code(struct evhttp_request *, int, const char *); | |
152 void evhttp_send_page(struct evhttp_request *, struct evbuffer *); | |
153 | |
154 #endif /* _HTTP_H */ | |
OLD | NEW |