libevent
http.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
3  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. The name of the author may not be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 #ifndef EVENT2_HTTP_H_INCLUDED_
28 #define EVENT2_HTTP_H_INCLUDED_
29 
30 /* For int types. */
31 #include <event2/util.h>
32 #include <event2/visibility.h>
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 /* In case we haven't included the right headers yet. */
39 struct evbuffer;
40 struct event_base;
41 struct bufferevent;
42 struct evhttp_connection;
43 
55 /* Response codes */
56 #define HTTP_OK 200
57 #define HTTP_NOCONTENT 204
58 #define HTTP_MOVEPERM 301
59 #define HTTP_MOVETEMP 302
60 #define HTTP_NOTMODIFIED 304
61 #define HTTP_BADREQUEST 400
62 #define HTTP_NOTFOUND 404
63 #define HTTP_BADMETHOD 405
64 #define HTTP_ENTITYTOOLARGE 413
65 #define HTTP_EXPECTATIONFAILED 417
66 #define HTTP_INTERNAL 500
67 #define HTTP_NOTIMPLEMENTED 501
68 #define HTTP_SERVUNAVAIL 503
70 struct evhttp;
71 struct evhttp_request;
72 struct evkeyvalq;
73 struct evhttp_bound_socket;
74 struct evconnlistener;
75 struct evdns_base;
76 
84 EVENT2_EXPORT_SYMBOL
85 struct evhttp *evhttp_new(struct event_base *base);
86 
99 EVENT2_EXPORT_SYMBOL
100 int evhttp_bind_socket(struct evhttp *http, const char *address, ev_uint16_t port);
101 
113 EVENT2_EXPORT_SYMBOL
114 struct evhttp_bound_socket *evhttp_bind_socket_with_handle(struct evhttp *http, const char *address, ev_uint16_t port);
115 
132 EVENT2_EXPORT_SYMBOL
133 int evhttp_accept_socket(struct evhttp *http, evutil_socket_t fd);
134 
145 EVENT2_EXPORT_SYMBOL
146 struct evhttp_bound_socket *evhttp_accept_socket_with_handle(struct evhttp *http, evutil_socket_t fd);
147 
153 EVENT2_EXPORT_SYMBOL
154 struct evhttp_bound_socket *evhttp_bind_listener(struct evhttp *http, struct evconnlistener *listener);
155 
159 EVENT2_EXPORT_SYMBOL
160 struct evconnlistener *evhttp_bound_socket_get_listener(struct evhttp_bound_socket *bound);
161 
162 typedef void evhttp_bound_socket_foreach_fn(struct evhttp_bound_socket *, void *);
173 EVENT2_EXPORT_SYMBOL
174 void evhttp_foreach_bound_socket(struct evhttp *http, evhttp_bound_socket_foreach_fn *function, void *argument);
175 
193 EVENT2_EXPORT_SYMBOL
194 void evhttp_del_accept_socket(struct evhttp *http, struct evhttp_bound_socket *bound_socket);
195 
203 EVENT2_EXPORT_SYMBOL
204 evutil_socket_t evhttp_bound_socket_get_fd(struct evhttp_bound_socket *bound_socket);
205 
214 EVENT2_EXPORT_SYMBOL
215 void evhttp_free(struct evhttp* http);
216 
218 EVENT2_EXPORT_SYMBOL
219 void evhttp_set_max_headers_size(struct evhttp* http, ev_ssize_t max_headers_size);
221 EVENT2_EXPORT_SYMBOL
222 void evhttp_set_max_body_size(struct evhttp* http, ev_ssize_t max_body_size);
223 
232 EVENT2_EXPORT_SYMBOL
233 void evhttp_set_default_content_type(struct evhttp *http,
234  const char *content_type);
235 
247 EVENT2_EXPORT_SYMBOL
248 void evhttp_set_allowed_methods(struct evhttp* http, ev_uint16_t methods);
249 
259 EVENT2_EXPORT_SYMBOL
260 int evhttp_set_cb(struct evhttp *http, const char *path,
261  void (*cb)(struct evhttp_request *, void *), void *cb_arg);
262 
264 EVENT2_EXPORT_SYMBOL
265 int evhttp_del_cb(struct evhttp *, const char *);
266 
278 EVENT2_EXPORT_SYMBOL
279 void evhttp_set_gencb(struct evhttp *http,
280  void (*cb)(struct evhttp_request *, void *), void *arg);
281 
296 EVENT2_EXPORT_SYMBOL
297 void evhttp_set_bevcb(struct evhttp *http,
298  struct bufferevent *(*cb)(struct event_base *, void *), void *arg);
299 
322 EVENT2_EXPORT_SYMBOL
323 int evhttp_add_virtual_host(struct evhttp* http, const char *pattern,
324  struct evhttp* vhost);
325 
334 EVENT2_EXPORT_SYMBOL
335 int evhttp_remove_virtual_host(struct evhttp* http, struct evhttp* vhost);
336 
345 EVENT2_EXPORT_SYMBOL
346 int evhttp_add_server_alias(struct evhttp *http, const char *alias);
347 
355 EVENT2_EXPORT_SYMBOL
356 int evhttp_remove_server_alias(struct evhttp *http, const char *alias);
357 
364 EVENT2_EXPORT_SYMBOL
365 void evhttp_set_timeout(struct evhttp *http, int timeout_in_secs);
366 
373 EVENT2_EXPORT_SYMBOL
374 void evhttp_set_timeout_tv(struct evhttp *http, const struct timeval* tv);
375 
376 /* Read all the clients body, and only after this respond with an error if the
377  * clients body exceed max_body_size */
378 #define EVHTTP_SERVER_LINGERING_CLOSE 0x0001
379 
386 EVENT2_EXPORT_SYMBOL
387 int evhttp_set_flags(struct evhttp *http, int flags);
388 
389 /* Request/Response functionality */
390 
399 EVENT2_EXPORT_SYMBOL
400 void evhttp_send_error(struct evhttp_request *req, int error,
401  const char *reason);
402 
416 EVENT2_EXPORT_SYMBOL
417 void evhttp_send_reply(struct evhttp_request *req, int code,
418  const char *reason, struct evbuffer *databuf);
419 
420 /* Low-level response interface, for streaming/chunked replies */
421 
436 EVENT2_EXPORT_SYMBOL
437 void evhttp_send_reply_start(struct evhttp_request *req, int code,
438  const char *reason);
439 
451 EVENT2_EXPORT_SYMBOL
452 void evhttp_send_reply_chunk(struct evhttp_request *req,
453  struct evbuffer *databuf);
454 
468 EVENT2_EXPORT_SYMBOL
469 void evhttp_send_reply_chunk_with_cb(struct evhttp_request *, struct evbuffer *,
470  void (*cb)(struct evhttp_connection *, void *), void *arg);
471 
477 EVENT2_EXPORT_SYMBOL
478 void evhttp_send_reply_end(struct evhttp_request *req);
479 
480 /*
481  * Interfaces for making requests
482  */
483 
492  EVHTTP_REQ_GET = 1 << 0,
493  EVHTTP_REQ_POST = 1 << 1,
494  EVHTTP_REQ_HEAD = 1 << 2,
495  EVHTTP_REQ_PUT = 1 << 3,
496  EVHTTP_REQ_DELETE = 1 << 4,
497  EVHTTP_REQ_OPTIONS = 1 << 5,
498  EVHTTP_REQ_TRACE = 1 << 6,
499  EVHTTP_REQ_CONNECT = 1 << 7,
500  EVHTTP_REQ_PATCH = 1 << 8
501 };
502 
504 enum evhttp_request_kind { EVHTTP_REQUEST, EVHTTP_RESPONSE };
505 
521 EVENT2_EXPORT_SYMBOL
522 struct evhttp_connection *evhttp_connection_base_bufferevent_new(
523  struct event_base *base, struct evdns_base *dnsbase, struct bufferevent* bev, const char *address, ev_uint16_t port);
524 
528 EVENT2_EXPORT_SYMBOL
529 struct bufferevent* evhttp_connection_get_bufferevent(struct evhttp_connection *evcon);
530 
534 EVENT2_EXPORT_SYMBOL
535 struct evhttp *evhttp_connection_get_server(struct evhttp_connection *evcon);
536 
542 EVENT2_EXPORT_SYMBOL
543 struct evhttp_request *evhttp_request_new(
544  void (*cb)(struct evhttp_request *, void *), void *arg);
545 
553 EVENT2_EXPORT_SYMBOL
554 void evhttp_request_set_chunked_cb(struct evhttp_request *,
555  void (*cb)(struct evhttp_request *, void *));
556 
563 EVENT2_EXPORT_SYMBOL
564 void evhttp_request_set_header_cb(struct evhttp_request *,
565  int (*cb)(struct evhttp_request *, void *));
566 
597 };
605 EVENT2_EXPORT_SYMBOL
606 void evhttp_request_set_error_cb(struct evhttp_request *,
607  void (*)(enum evhttp_request_error, void *));
608 
621 EVENT2_EXPORT_SYMBOL
622 void evhttp_request_set_on_complete_cb(struct evhttp_request *req,
623  void (*cb)(struct evhttp_request *, void *), void *cb_arg);
624 
626 EVENT2_EXPORT_SYMBOL
627 void evhttp_request_free(struct evhttp_request *req);
628 
641 EVENT2_EXPORT_SYMBOL
642 struct evhttp_connection *evhttp_connection_base_new(
643  struct event_base *base, struct evdns_base *dnsbase,
644  const char *address, ev_uint16_t port);
645 
649 EVENT2_EXPORT_SYMBOL
650 void evhttp_connection_set_family(struct evhttp_connection *evcon,
651  int family);
652 
653 /* reuse connection address on retry */
654 #define EVHTTP_CON_REUSE_CONNECTED_ADDR 0x0008
655 /* Try to read error, since server may already send and close
656  * connection, but if at that time we have some data to send then we
657  * can send get EPIPE and fail, while we can read that HTTP error. */
658 #define EVHTTP_CON_READ_ON_WRITE_ERROR 0x0010
659 /* @see EVHTTP_SERVER_LINGERING_CLOSE */
660 #define EVHTTP_CON_LINGERING_CLOSE 0x0020
661 /* Padding for public flags, @see EVHTTP_CON_* in http-internal.h */
662 #define EVHTTP_CON_PUBLIC_FLAGS_END 0x100000
663 
670 EVENT2_EXPORT_SYMBOL
671 int evhttp_connection_set_flags(struct evhttp_connection *evcon,
672  int flags);
673 
679 EVENT2_EXPORT_SYMBOL
680 void evhttp_request_own(struct evhttp_request *req);
681 
683 EVENT2_EXPORT_SYMBOL
684 int evhttp_request_is_owned(struct evhttp_request *req);
685 
692 EVENT2_EXPORT_SYMBOL
693 struct evhttp_connection *evhttp_request_get_connection(struct evhttp_request *req);
694 
698 EVENT2_EXPORT_SYMBOL
699 struct event_base *evhttp_connection_get_base(struct evhttp_connection *req);
700 
701 EVENT2_EXPORT_SYMBOL
702 void evhttp_connection_set_max_headers_size(struct evhttp_connection *evcon,
703  ev_ssize_t new_max_headers_size);
704 
705 EVENT2_EXPORT_SYMBOL
706 void evhttp_connection_set_max_body_size(struct evhttp_connection* evcon,
707  ev_ssize_t new_max_body_size);
708 
710 EVENT2_EXPORT_SYMBOL
711 void evhttp_connection_free(struct evhttp_connection *evcon);
712 
718 EVENT2_EXPORT_SYMBOL
719 void evhttp_connection_free_on_completion(struct evhttp_connection *evcon);
720 
722 EVENT2_EXPORT_SYMBOL
723 void evhttp_connection_set_local_address(struct evhttp_connection *evcon,
724  const char *address);
725 
727 EVENT2_EXPORT_SYMBOL
728 void evhttp_connection_set_local_port(struct evhttp_connection *evcon,
729  ev_uint16_t port);
730 
732 EVENT2_EXPORT_SYMBOL
733 void evhttp_connection_set_timeout(struct evhttp_connection *evcon,
734  int timeout_in_secs);
735 
738 EVENT2_EXPORT_SYMBOL
739 void evhttp_connection_set_timeout_tv(struct evhttp_connection *evcon,
740  const struct timeval *tv);
741 
746 EVENT2_EXPORT_SYMBOL
747 void evhttp_connection_set_initial_retry_tv(struct evhttp_connection *evcon,
748  const struct timeval *tv);
749 
751 EVENT2_EXPORT_SYMBOL
752 void evhttp_connection_set_retries(struct evhttp_connection *evcon,
753  int retry_max);
754 
756 EVENT2_EXPORT_SYMBOL
757 void evhttp_connection_set_closecb(struct evhttp_connection *evcon,
758  void (*)(struct evhttp_connection *, void *), void *);
759 
761 EVENT2_EXPORT_SYMBOL
762 void evhttp_connection_get_peer(struct evhttp_connection *evcon,
763  char **address, ev_uint16_t *port);
764 
771 EVENT2_EXPORT_SYMBOL
772 const struct sockaddr*
773 evhttp_connection_get_addr(struct evhttp_connection *evcon);
774 
788 EVENT2_EXPORT_SYMBOL
789 int evhttp_make_request(struct evhttp_connection *evcon,
790  struct evhttp_request *req,
791  enum evhttp_cmd_type type, const char *uri);
792 
806 EVENT2_EXPORT_SYMBOL
807 void evhttp_cancel_request(struct evhttp_request *req);
808 
812 struct evhttp_uri;
813 
815 EVENT2_EXPORT_SYMBOL
816 const char *evhttp_request_get_uri(const struct evhttp_request *req);
818 EVENT2_EXPORT_SYMBOL
819 const struct evhttp_uri *evhttp_request_get_evhttp_uri(const struct evhttp_request *req);
821 EVENT2_EXPORT_SYMBOL
822 enum evhttp_cmd_type evhttp_request_get_command(const struct evhttp_request *req);
823 
824 EVENT2_EXPORT_SYMBOL
825 int evhttp_request_get_response_code(const struct evhttp_request *req);
826 EVENT2_EXPORT_SYMBOL
827 const char * evhttp_request_get_response_code_line(const struct evhttp_request *req);
828 
830 EVENT2_EXPORT_SYMBOL
831 struct evkeyvalq *evhttp_request_get_input_headers(struct evhttp_request *req);
833 EVENT2_EXPORT_SYMBOL
834 struct evkeyvalq *evhttp_request_get_output_headers(struct evhttp_request *req);
836 EVENT2_EXPORT_SYMBOL
837 struct evbuffer *evhttp_request_get_input_buffer(struct evhttp_request *req);
839 EVENT2_EXPORT_SYMBOL
840 struct evbuffer *evhttp_request_get_output_buffer(struct evhttp_request *req);
845 EVENT2_EXPORT_SYMBOL
846 const char *evhttp_request_get_host(struct evhttp_request *req);
847 
848 /* Interfaces for dealing with HTTP headers */
849 
859 EVENT2_EXPORT_SYMBOL
860 const char *evhttp_find_header(const struct evkeyvalq *headers,
861  const char *key);
862 
871 EVENT2_EXPORT_SYMBOL
872 int evhttp_remove_header(struct evkeyvalq *headers, const char *key);
873 
883 EVENT2_EXPORT_SYMBOL
884 int evhttp_add_header(struct evkeyvalq *headers, const char *key, const char *value);
885 
891 EVENT2_EXPORT_SYMBOL
892 void evhttp_clear_headers(struct evkeyvalq *headers);
893 
894 /* Miscellaneous utility functions */
895 
896 
908 EVENT2_EXPORT_SYMBOL
909 char *evhttp_encode_uri(const char *str);
910 
925 EVENT2_EXPORT_SYMBOL
926 char *evhttp_uriencode(const char *str, ev_ssize_t size, int space_to_plus);
927 
942 EVENT2_EXPORT_SYMBOL
943 char *evhttp_decode_uri(const char *uri);
944 
960 EVENT2_EXPORT_SYMBOL
961 char *evhttp_uridecode(const char *uri, int decode_plus,
962  size_t *size_out);
963 
983 EVENT2_EXPORT_SYMBOL
984 int evhttp_parse_query(const char *uri, struct evkeyvalq *headers);
985 
1003 EVENT2_EXPORT_SYMBOL
1004 int evhttp_parse_query_str(const char *uri, struct evkeyvalq *headers);
1005 
1017 EVENT2_EXPORT_SYMBOL
1018 char *evhttp_htmlescape(const char *html);
1019 
1023 EVENT2_EXPORT_SYMBOL
1024 struct evhttp_uri *evhttp_uri_new(void);
1025 
1030 EVENT2_EXPORT_SYMBOL
1031 void evhttp_uri_set_flags(struct evhttp_uri *uri, unsigned flags);
1032 
1035 EVENT2_EXPORT_SYMBOL
1036 const char *evhttp_uri_get_scheme(const struct evhttp_uri *uri);
1041 EVENT2_EXPORT_SYMBOL
1042 const char *evhttp_uri_get_userinfo(const struct evhttp_uri *uri);
1055 EVENT2_EXPORT_SYMBOL
1056 const char *evhttp_uri_get_host(const struct evhttp_uri *uri);
1058 EVENT2_EXPORT_SYMBOL
1059 int evhttp_uri_get_port(const struct evhttp_uri *uri);
1061 EVENT2_EXPORT_SYMBOL
1062 const char *evhttp_uri_get_path(const struct evhttp_uri *uri);
1065 EVENT2_EXPORT_SYMBOL
1066 const char *evhttp_uri_get_query(const struct evhttp_uri *uri);
1069 EVENT2_EXPORT_SYMBOL
1070 const char *evhttp_uri_get_fragment(const struct evhttp_uri *uri);
1071 
1074 EVENT2_EXPORT_SYMBOL
1075 int evhttp_uri_set_scheme(struct evhttp_uri *uri, const char *scheme);
1078 EVENT2_EXPORT_SYMBOL
1079 int evhttp_uri_set_userinfo(struct evhttp_uri *uri, const char *userinfo);
1082 EVENT2_EXPORT_SYMBOL
1083 int evhttp_uri_set_host(struct evhttp_uri *uri, const char *host);
1086 EVENT2_EXPORT_SYMBOL
1087 int evhttp_uri_set_port(struct evhttp_uri *uri, int port);
1090 EVENT2_EXPORT_SYMBOL
1091 int evhttp_uri_set_path(struct evhttp_uri *uri, const char *path);
1095 EVENT2_EXPORT_SYMBOL
1096 int evhttp_uri_set_query(struct evhttp_uri *uri, const char *query);
1100 EVENT2_EXPORT_SYMBOL
1101 int evhttp_uri_set_fragment(struct evhttp_uri *uri, const char *fragment);
1102 
1137 EVENT2_EXPORT_SYMBOL
1138 struct evhttp_uri *evhttp_uri_parse_with_flags(const char *source_uri,
1139  unsigned flags);
1140 
1153 #define EVHTTP_URI_NONCONFORMANT 0x01
1154 
1156 EVENT2_EXPORT_SYMBOL
1157 struct evhttp_uri *evhttp_uri_parse(const char *source_uri);
1158 
1166 EVENT2_EXPORT_SYMBOL
1167 void evhttp_uri_free(struct evhttp_uri *uri);
1168 
1182 EVENT2_EXPORT_SYMBOL
1183 char *evhttp_uri_join(struct evhttp_uri *uri, char *buf, size_t limit);
1184 
1185 #ifdef __cplusplus
1186 }
1187 #endif
1188 
1189 #endif /* EVENT2_HTTP_H_INCLUDED_ */
EVENT2_EXPORT_SYMBOL void evhttp_set_allowed_methods(struct evhttp *http, ev_uint16_t methods)
Sets the what HTTP methods are supported in requests accepted by this server, and passed to user call...
EVENT2_EXPORT_SYMBOL void evhttp_request_set_error_cb(struct evhttp_request *, void(*)(enum evhttp_request_error, void *))
Set a callback for errors.
EVENT2_EXPORT_SYMBOL void evhttp_request_own(struct evhttp_request *req)
Takes ownership of the request object.
EVENT2_EXPORT_SYMBOL const char * evhttp_find_header(const struct evkeyvalq *headers, const char *key)
Finds the value belonging to a header.
EVENT2_EXPORT_SYMBOL struct evhttp_request * evhttp_request_new(void(*cb)(struct evhttp_request *, void *), void *arg)
Creates a new request object that needs to be filled in with the request parameters.
EVENT2_EXPORT_SYMBOL const char * evhttp_uri_get_scheme(const struct evhttp_uri *uri)
Return the scheme of an evhttp_uri, or NULL if there is no scheme has been set and the evhttp_uri con...
EVENT2_EXPORT_SYMBOL int evhttp_uri_set_host(struct evhttp_uri *uri, const char *host)
Set the host of an evhttp_uri, or clear the host if host==NULL.
EVENT2_EXPORT_SYMBOL struct bufferevent * evhttp_connection_get_bufferevent(struct evhttp_connection *evcon)
Return the bufferevent that an evhttp_connection is using.
EVENT2_EXPORT_SYMBOL const char * evhttp_uri_get_userinfo(const struct evhttp_uri *uri)
Return the userinfo part of an evhttp_uri, or NULL if it has no userinfo set.
The evhttp_cancel_request() called on this request.
Definition: http.h:592
EVENT2_EXPORT_SYMBOL const char * evhttp_uri_get_query(const struct evhttp_uri *uri)
Return the query part of an evhttp_uri (excluding the leading "?"), or NULL if it has no query set...
EVENT2_EXPORT_SYMBOL void evhttp_send_reply(struct evhttp_request *req, int code, const char *reason, struct evbuffer *databuf)
Send an HTML reply to the client.
EVENT2_EXPORT_SYMBOL struct event_base * evhttp_connection_get_base(struct evhttp_connection *req)
Returns the underlying event_base for this connection.
EVENT2_EXPORT_SYMBOL void evhttp_send_reply_chunk_with_cb(struct evhttp_request *, struct evbuffer *, void(*cb)(struct evhttp_connection *, void *), void *arg)
Send another data chunk as part of an ongoing chunked reply.
EVENT2_EXPORT_SYMBOL int evhttp_remove_virtual_host(struct evhttp *http, struct evhttp *vhost)
Removes a virtual host from the http server.
EVENT2_EXPORT_SYMBOL struct evhttp_uri * evhttp_uri_new(void)
Return a new empty evhttp_uri with no fields set.
EVENT2_EXPORT_SYMBOL struct evhttp * evhttp_new(struct event_base *base)
Create a new HTTP server.
EVENT2_EXPORT_SYMBOL int evhttp_parse_query_str(const char *uri, struct evkeyvalq *headers)
Helper function to parse out arguments from the query portion of an HTTP URI.
EVENT2_EXPORT_SYMBOL void evhttp_set_gencb(struct evhttp *http, void(*cb)(struct evhttp_request *, void *), void *arg)
Set a callback for all requests that are not caught by specific callbacks.
EVENT2_EXPORT_SYMBOL struct evbuffer * evhttp_request_get_input_buffer(struct evhttp_request *req)
Returns the input buffer.
EVENT2_EXPORT_SYMBOL struct evhttp_uri * evhttp_uri_parse_with_flags(const char *source_uri, unsigned flags)
Helper function to parse a URI-Reference as specified by RFC3986.
EVENT2_EXPORT_SYMBOL int evhttp_uri_set_scheme(struct evhttp_uri *uri, const char *scheme)
Set the scheme of an evhttp_uri, or clear the scheme if scheme==NULL.
EVENT2_EXPORT_SYMBOL struct evhttp_uri * evhttp_uri_parse(const char *source_uri)
Alias for evhttp_uri_parse_with_flags(source_uri, 0)
EVENT2_EXPORT_SYMBOL void evhttp_connection_set_retries(struct evhttp_connection *evcon, int retry_max)
Sets the retry limit for this connection - -1 repeats indefinitely.
EVENT2_EXPORT_SYMBOL int evhttp_request_is_owned(struct evhttp_request *req)
Returns 1 if the request is owned by the user.
EVENT2_EXPORT_SYMBOL char * evhttp_encode_uri(const char *str)
Helper function to encode a string for inclusion in a URI.
EVENT2_EXPORT_SYMBOL const char * evhttp_uri_get_host(const struct evhttp_uri *uri)
Return the host part of an evhttp_uri, or NULL if it has no host set.
EVENT2_EXPORT_SYMBOL const char * evhttp_uri_get_path(const struct evhttp_uri *uri)
Return the path part of an evhttp_uri, or NULL if it has no path set.
EVENT2_EXPORT_SYMBOL int evhttp_bind_socket(struct evhttp *http, const char *address, ev_uint16_t port)
Binds an HTTP server on the specified address and port.
EVENT2_EXPORT_SYMBOL void evhttp_connection_set_local_address(struct evhttp_connection *evcon, const char *address)
sets the ip address from which http connections are made
EVENT2_EXPORT_SYMBOL char * evhttp_htmlescape(const char *html)
Escape HTML character entities in a string.
EVENT2_EXPORT_SYMBOL char * evhttp_decode_uri(const char *uri)
Helper function to sort of decode a URI-encoded string.
EVENT2_EXPORT_SYMBOL void evhttp_connection_set_family(struct evhttp_connection *evcon, int family)
Set family hint for DNS requests.
EVENT2_EXPORT_SYMBOL int evhttp_uri_set_query(struct evhttp_uri *uri, const char *query)
Set the query of an evhttp_uri, or clear the query if query==NULL.
EVENT2_EXPORT_SYMBOL int evhttp_add_header(struct evkeyvalq *headers, const char *key, const char *value)
Adds a header to a list of existing headers.
EVENT2_EXPORT_SYMBOL char * evhttp_uriencode(const char *str, ev_ssize_t size, int space_to_plus)
As evhttp_encode_uri, but if &#39;size&#39; is nonnegative, treat the string as being &#39;size&#39; bytes long...
EVENT2_EXPORT_SYMBOL struct evkeyvalq * evhttp_request_get_input_headers(struct evhttp_request *req)
Returns the input headers.
EVENT2_EXPORT_SYMBOL void evhttp_set_timeout(struct evhttp *http, int timeout_in_secs)
Set the timeout for an HTTP request.
EVENT2_EXPORT_SYMBOL void evhttp_request_set_chunked_cb(struct evhttp_request *, void(*cb)(struct evhttp_request *, void *))
Enable delivery of chunks to requestor.
EVENT2_EXPORT_SYMBOL void evhttp_send_reply_end(struct evhttp_request *req)
Complete a chunked reply, freeing the request as appropriate.
EVENT2_EXPORT_SYMBOL int evhttp_remove_server_alias(struct evhttp *http, const char *alias)
Remove a server alias from an http object.
EVENT2_EXPORT_SYMBOL void evhttp_cancel_request(struct evhttp_request *req)
Cancels a pending HTTP request.
EVENT2_EXPORT_SYMBOL int evhttp_connection_set_flags(struct evhttp_connection *evcon, int flags)
Set connection flags.
EVENT2_EXPORT_SYMBOL void evhttp_request_set_header_cb(struct evhttp_request *, int(*cb)(struct evhttp_request *, void *))
Register callback for additional parsing of request headers.
evhttp_request_kind
a request object can represent either a request or a reply
Definition: http.h:504
EVENT2_EXPORT_SYMBOL struct evhttp_connection * evhttp_connection_base_new(struct event_base *base, struct evdns_base *dnsbase, const char *address, ev_uint16_t port)
Create and return a connection object that can be used to for making HTTP requests.
EVENT2_EXPORT_SYMBOL void evhttp_request_free(struct evhttp_request *req)
Frees the request object and removes associated events.
#define evutil_socket_t
A type wide enough to hold the output of "socket()" or "accept()".
Definition: util.h:312
EVENT2_EXPORT_SYMBOL void evhttp_uri_set_flags(struct evhttp_uri *uri, unsigned flags)
Changes the flags set on a given URI.
EVENT2_EXPORT_SYMBOL void evhttp_set_bevcb(struct evhttp *http, struct bufferevent *(*cb)(struct event_base *, void *), void *arg)
Set a callback used to create new bufferevents for connections to a given evhttp object.
EVENT2_EXPORT_SYMBOL void evhttp_uri_free(struct evhttp_uri *uri)
Free all memory allocated for a parsed uri.
EVENT2_EXPORT_SYMBOL struct evhttp_bound_socket * evhttp_bind_listener(struct evhttp *http, struct evconnlistener *listener)
The most low-level evhttp_bind/accept method: takes an evconnlistener, and returns an evhttp_bound_so...
EVENT2_EXPORT_SYMBOL const char * evhttp_uri_get_fragment(const struct evhttp_uri *uri)
Return the fragment part of an evhttp_uri (excluding the leading "#"), or NULL if it has no fragment ...
EVENT2_EXPORT_SYMBOL const struct evhttp_uri * evhttp_request_get_evhttp_uri(const struct evhttp_request *req)
Returns the request URI (parsed)
EVENT2_EXPORT_SYMBOL int evhttp_uri_set_path(struct evhttp_uri *uri, const char *path)
Set the path of an evhttp_uri, or clear the path if path==NULL.
EVENT2_EXPORT_SYMBOL int evhttp_make_request(struct evhttp_connection *evcon, struct evhttp_request *req, enum evhttp_cmd_type type, const char *uri)
Make an HTTP request over the specified connection.
EVENT2_EXPORT_SYMBOL void evhttp_request_set_on_complete_cb(struct evhttp_request *req, void(*cb)(struct evhttp_request *, void *), void *cb_arg)
Set a callback to be called on request completion of evhttp_send_* function.
An evbuffer is an opaque data type for efficiently buffering data to be sent or received on the netwo...
Definition: buffer.h:97
EVENT2_EXPORT_SYMBOL int evhttp_add_virtual_host(struct evhttp *http, const char *pattern, struct evhttp *vhost)
Adds a virtual host to the http server.
EVENT2_EXPORT_SYMBOL int evhttp_uri_set_fragment(struct evhttp_uri *uri, const char *fragment)
Set the fragment of an evhttp_uri, or clear the fragment if fragment==NULL.
EVENT2_EXPORT_SYMBOL struct evconnlistener * evhttp_bound_socket_get_listener(struct evhttp_bound_socket *bound)
Return the listener used to implement a bound socket.
EVENT2_EXPORT_SYMBOL void evhttp_clear_headers(struct evkeyvalq *headers)
Removes all headers from the header list.
evhttp_request_error
The different error types supported by evhttp.
Definition: http.h:572
EVENT2_EXPORT_SYMBOL const char * evhttp_request_get_uri(const struct evhttp_request *req)
Returns the request URI.
Common convenience functions for cross-platform portability and related socket manipulations.
EVENT2_EXPORT_SYMBOL void evhttp_connection_set_closecb(struct evhttp_connection *evcon, void(*)(struct evhttp_connection *, void *), void *)
Set a callback for connection close.
EVENT2_EXPORT_SYMBOL int evhttp_set_cb(struct evhttp *http, const char *path, void(*cb)(struct evhttp_request *, void *), void *cb_arg)
Set a callback for a specified URI.
EVENT2_EXPORT_SYMBOL void evhttp_free(struct evhttp *http)
Free the previously created HTTP server.
EVENT2_EXPORT_SYMBOL int evhttp_remove_header(struct evkeyvalq *headers, const char *key)
Removes a header from a list of existing headers.
EVENT2_EXPORT_SYMBOL void evhttp_set_default_content_type(struct evhttp *http, const char *content_type)
Set the value to use for the Content-Type header when none was provided.
Error while reading header, or invalid header.
Definition: http.h:584
EVENT2_EXPORT_SYMBOL struct evkeyvalq * evhttp_request_get_output_headers(struct evhttp_request *req)
Returns the output headers.
EVENT2_EXPORT_SYMBOL void evhttp_connection_set_initial_retry_tv(struct evhttp_connection *evcon, const struct timeval *tv)
Sets the delay before retrying requests on this connection.
EVENT2_EXPORT_SYMBOL void evhttp_send_reply_start(struct evhttp_request *req, int code, const char *reason)
Initiate a reply that uses Transfer-Encoding chunked.
EVENT2_EXPORT_SYMBOL struct evbuffer * evhttp_request_get_output_buffer(struct evhttp_request *req)
Returns the output buffer.
EVENT2_EXPORT_SYMBOL struct evhttp_bound_socket * evhttp_accept_socket_with_handle(struct evhttp *http, evutil_socket_t fd)
Like evhttp_accept_socket(), but returns a handle for referencing the socket.
EVENT2_EXPORT_SYMBOL void evhttp_connection_set_timeout(struct evhttp_connection *evcon, int timeout_in_secs)
Sets the timeout in seconds for events related to this connection.
EVENT2_EXPORT_SYMBOL const char * evhttp_request_get_host(struct evhttp_request *req)
Returns the host associated with the request.
EVENT2_EXPORT_SYMBOL struct evhttp_connection * evhttp_connection_base_bufferevent_new(struct event_base *base, struct evdns_base *dnsbase, struct bufferevent *bev, const char *address, ev_uint16_t port)
Create and return a connection object that can be used to for making HTTP requests.
EVENT2_EXPORT_SYMBOL int evhttp_uri_get_port(const struct evhttp_uri *uri)
Return the port part of an evhttp_uri, or -1 if there is no port set.
EVENT2_EXPORT_SYMBOL void evhttp_foreach_bound_socket(struct evhttp *http, evhttp_bound_socket_foreach_fn *function, void *argument)
Applies the function specified in the first argument to all evhttp_bound_sockets associated with "htt...
EVENT2_EXPORT_SYMBOL struct evhttp_bound_socket * evhttp_bind_socket_with_handle(struct evhttp *http, const char *address, ev_uint16_t port)
Like evhttp_bind_socket(), but returns a handle for referencing the socket.
EVENT2_EXPORT_SYMBOL evutil_socket_t evhttp_bound_socket_get_fd(struct evhttp_bound_socket *bound_socket)
Get the raw file descriptor referenced by an evhttp_bound_socket.
EVENT2_EXPORT_SYMBOL int evhttp_set_flags(struct evhttp *http, int flags)
Set connection flags for HTTP server.
EVENT2_EXPORT_SYMBOL const struct sockaddr * evhttp_connection_get_addr(struct evhttp_connection *evcon)
Get the remote address associated with this connection.
EVENT2_EXPORT_SYMBOL enum evhttp_cmd_type evhttp_request_get_command(const struct evhttp_request *req)
Returns the request command.
EVENT2_EXPORT_SYMBOL void evhttp_set_max_headers_size(struct evhttp *http, ev_ssize_t max_headers_size)
XXX Document.
EVENT2_EXPORT_SYMBOL void evhttp_del_accept_socket(struct evhttp *http, struct evhttp_bound_socket *bound_socket)
Makes an HTTP server stop accepting connections on the specified socket.
An opaque type for handling buffered IO.
Definition: bufferevent.h:113
EVENT2_EXPORT_SYMBOL char * evhttp_uri_join(struct evhttp_uri *uri, char *buf, size_t limit)
Join together the uri parts from parsed data to form a URI-Reference.
EVENT2_EXPORT_SYMBOL struct evhttp_connection * evhttp_request_get_connection(struct evhttp_request *req)
Returns the connection object associated with the request or NULL.
EVENT2_EXPORT_SYMBOL int evhttp_uri_set_userinfo(struct evhttp_uri *uri, const char *userinfo)
Set the userinfo of an evhttp_uri, or clear the userinfo if userinfo==NULL.
EVENT2_EXPORT_SYMBOL void evhttp_connection_set_local_port(struct evhttp_connection *evcon, ev_uint16_t port)
sets the local port from which http connections are made
EVENT2_EXPORT_SYMBOL void evhttp_connection_free_on_completion(struct evhttp_connection *evcon)
Disowns a given connection object.
EVENT2_EXPORT_SYMBOL void evhttp_connection_get_peer(struct evhttp_connection *evcon, char **address, ev_uint16_t *port)
Get the remote address and port associated with this connection.
EOF reached.
Definition: http.h:580
EVENT2_EXPORT_SYMBOL void evhttp_connection_set_timeout_tv(struct evhttp_connection *evcon, const struct timeval *tv)
Sets the timeout for events related to this connection.
EVENT2_EXPORT_SYMBOL char * evhttp_uridecode(const char *uri, int decode_plus, size_t *size_out)
Helper function to decode a URI-escaped string or HTTP parameter.
EVENT2_EXPORT_SYMBOL struct evhttp * evhttp_connection_get_server(struct evhttp_connection *evcon)
Return the HTTP server associated with this connection, or NULL.
Body is greater then evhttp_connection_set_max_body_size()
Definition: http.h:596
EVENT2_EXPORT_SYMBOL int evhttp_accept_socket(struct evhttp *http, evutil_socket_t fd)
Makes an HTTP server accept connections on the specified socket.
Structure to hold information and state for a Libevent dispatch loop.
Definition: event.h:217
EVENT2_EXPORT_SYMBOL int evhttp_add_server_alias(struct evhttp *http, const char *alias)
Add a server alias to an http object.
EVENT2_EXPORT_SYMBOL int evhttp_parse_query(const char *uri, struct evkeyvalq *headers)
Helper function to parse out arguments in a query.
EVENT2_EXPORT_SYMBOL int evhttp_uri_set_port(struct evhttp_uri *uri, int port)
Set the port of an evhttp_uri, or clear the port if port==-1.
EVENT2_EXPORT_SYMBOL int evhttp_del_cb(struct evhttp *, const char *)
Removes the callback for a specified URI.
EVENT2_EXPORT_SYMBOL void evhttp_send_reply_chunk(struct evhttp_request *req, struct evbuffer *databuf)
Send another data chunk as part of an ongoing chunked reply.
evhttp_cmd_type
The different request types supported by evhttp.
Definition: http.h:491
EVENT2_EXPORT_SYMBOL void evhttp_connection_free(struct evhttp_connection *evcon)
Frees an http connection.
Error encountered while reading or writing.
Definition: http.h:588
EVENT2_EXPORT_SYMBOL void evhttp_set_max_body_size(struct evhttp *http, ev_ssize_t max_body_size)
XXX Document.
EVENT2_EXPORT_SYMBOL void evhttp_set_timeout_tv(struct evhttp *http, const struct timeval *tv)
Set the timeout for an HTTP request.
EVENT2_EXPORT_SYMBOL void evhttp_send_error(struct evhttp_request *req, int error, const char *reason)
Send an HTML error message to the client.
Timeout reached, also.
Definition: http.h:576