xref: /minix3/external/bsd/libevent/dist/include/event2/http_struct.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc /*	$NetBSD: http_struct.h,v 1.1.1.2 2015/01/29 06:38:28 spz Exp $	*/
2*0a6a1f1dSLionel Sambuc /*	$NetBSD: http_struct.h,v 1.1.1.2 2015/01/29 06:38:28 spz Exp $	*/
3e985b929SDavid van Moolenbroek /*
4e985b929SDavid van Moolenbroek  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
5e985b929SDavid van Moolenbroek  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
6e985b929SDavid van Moolenbroek  *
7e985b929SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
8e985b929SDavid van Moolenbroek  * modification, are permitted provided that the following conditions
9e985b929SDavid van Moolenbroek  * are met:
10e985b929SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
11e985b929SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer.
12e985b929SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright
13e985b929SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer in the
14e985b929SDavid van Moolenbroek  *    documentation and/or other materials provided with the distribution.
15e985b929SDavid van Moolenbroek  * 3. The name of the author may not be used to endorse or promote products
16e985b929SDavid van Moolenbroek  *    derived from this software without specific prior written permission.
17e985b929SDavid van Moolenbroek  *
18e985b929SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19e985b929SDavid van Moolenbroek  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20e985b929SDavid van Moolenbroek  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21e985b929SDavid van Moolenbroek  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22e985b929SDavid van Moolenbroek  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23e985b929SDavid van Moolenbroek  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24e985b929SDavid van Moolenbroek  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25e985b929SDavid van Moolenbroek  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26e985b929SDavid van Moolenbroek  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27e985b929SDavid van Moolenbroek  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28e985b929SDavid van Moolenbroek  */
29e985b929SDavid van Moolenbroek #ifndef _EVENT2_HTTP_STRUCT_H_
30e985b929SDavid van Moolenbroek #define _EVENT2_HTTP_STRUCT_H_
31e985b929SDavid van Moolenbroek 
32e985b929SDavid van Moolenbroek /** @file event2/http_struct.h
33e985b929SDavid van Moolenbroek 
34e985b929SDavid van Moolenbroek   Data structures for http.  Using these structures may hurt forward
35e985b929SDavid van Moolenbroek   compatibility with later versions of Libevent: be careful!
36e985b929SDavid van Moolenbroek 
37e985b929SDavid van Moolenbroek  */
38e985b929SDavid van Moolenbroek 
39e985b929SDavid van Moolenbroek #ifdef __cplusplus
40e985b929SDavid van Moolenbroek extern "C" {
41e985b929SDavid van Moolenbroek #endif
42e985b929SDavid van Moolenbroek 
43e985b929SDavid van Moolenbroek #include <event2/event-config.h>
44e985b929SDavid van Moolenbroek #ifdef _EVENT_HAVE_SYS_TYPES_H
45e985b929SDavid van Moolenbroek #include <sys/types.h>
46e985b929SDavid van Moolenbroek #endif
47e985b929SDavid van Moolenbroek #ifdef _EVENT_HAVE_SYS_TIME_H
48e985b929SDavid van Moolenbroek #include <sys/time.h>
49e985b929SDavid van Moolenbroek #endif
50e985b929SDavid van Moolenbroek 
51e985b929SDavid van Moolenbroek /* For int types. */
52e985b929SDavid van Moolenbroek #include <event2/util.h>
53e985b929SDavid van Moolenbroek 
54e985b929SDavid van Moolenbroek /**
55e985b929SDavid van Moolenbroek  * the request structure that a server receives.
56e985b929SDavid van Moolenbroek  * WARNING: expect this structure to change.  I will try to provide
57e985b929SDavid van Moolenbroek  * reasonable accessors.
58e985b929SDavid van Moolenbroek  */
59e985b929SDavid van Moolenbroek struct evhttp_request {
60e985b929SDavid van Moolenbroek #if defined(TAILQ_ENTRY)
61e985b929SDavid van Moolenbroek 	TAILQ_ENTRY(evhttp_request) next;
62e985b929SDavid van Moolenbroek #else
63e985b929SDavid van Moolenbroek struct {
64e985b929SDavid van Moolenbroek 	struct evhttp_request *tqe_next;
65e985b929SDavid van Moolenbroek 	struct evhttp_request **tqe_prev;
66e985b929SDavid van Moolenbroek }       next;
67e985b929SDavid van Moolenbroek #endif
68e985b929SDavid van Moolenbroek 
69e985b929SDavid van Moolenbroek 	/* the connection object that this request belongs to */
70e985b929SDavid van Moolenbroek 	struct evhttp_connection *evcon;
71e985b929SDavid van Moolenbroek 	int flags;
72e985b929SDavid van Moolenbroek /** The request obj owns the evhttp connection and needs to free it */
73e985b929SDavid van Moolenbroek #define EVHTTP_REQ_OWN_CONNECTION	0x0001
74e985b929SDavid van Moolenbroek /** Request was made via a proxy */
75e985b929SDavid van Moolenbroek #define EVHTTP_PROXY_REQUEST		0x0002
76e985b929SDavid van Moolenbroek /** The request object is owned by the user; the user must free it */
77e985b929SDavid van Moolenbroek #define EVHTTP_USER_OWNED		0x0004
78e985b929SDavid van Moolenbroek /** The request will be used again upstack; freeing must be deferred */
79e985b929SDavid van Moolenbroek #define EVHTTP_REQ_DEFER_FREE		0x0008
80e985b929SDavid van Moolenbroek /** The request should be freed upstack */
81e985b929SDavid van Moolenbroek #define EVHTTP_REQ_NEEDS_FREE		0x0010
82e985b929SDavid van Moolenbroek 
83e985b929SDavid van Moolenbroek 	struct evkeyvalq *input_headers;
84e985b929SDavid van Moolenbroek 	struct evkeyvalq *output_headers;
85e985b929SDavid van Moolenbroek 
86e985b929SDavid van Moolenbroek 	/* address of the remote host and the port connection came from */
87e985b929SDavid van Moolenbroek 	char *remote_host;
88e985b929SDavid van Moolenbroek 	ev_uint16_t remote_port;
89e985b929SDavid van Moolenbroek 
90e985b929SDavid van Moolenbroek 	/* cache of the hostname for evhttp_request_get_host */
91e985b929SDavid van Moolenbroek 	char *host_cache;
92e985b929SDavid van Moolenbroek 
93e985b929SDavid van Moolenbroek 	enum evhttp_request_kind kind;
94e985b929SDavid van Moolenbroek 	enum evhttp_cmd_type type;
95e985b929SDavid van Moolenbroek 
96e985b929SDavid van Moolenbroek 	size_t headers_size;
97e985b929SDavid van Moolenbroek 	size_t body_size;
98e985b929SDavid van Moolenbroek 
99e985b929SDavid van Moolenbroek 	char *uri;			/* uri after HTTP request was parsed */
100e985b929SDavid van Moolenbroek 	struct evhttp_uri *uri_elems;	/* uri elements */
101e985b929SDavid van Moolenbroek 
102e985b929SDavid van Moolenbroek 	char major;			/* HTTP Major number */
103e985b929SDavid van Moolenbroek 	char minor;			/* HTTP Minor number */
104e985b929SDavid van Moolenbroek 
105e985b929SDavid van Moolenbroek 	int response_code;		/* HTTP Response code */
106e985b929SDavid van Moolenbroek 	char *response_code_line;	/* Readable response */
107e985b929SDavid van Moolenbroek 
108e985b929SDavid van Moolenbroek 	struct evbuffer *input_buffer;	/* read data */
109e985b929SDavid van Moolenbroek 	ev_int64_t ntoread;
110e985b929SDavid van Moolenbroek 	unsigned chunked:1,		/* a chunked request */
111e985b929SDavid van Moolenbroek 	    userdone:1;			/* the user has sent all data */
112e985b929SDavid van Moolenbroek 
113e985b929SDavid van Moolenbroek 	struct evbuffer *output_buffer;	/* outgoing post or data */
114e985b929SDavid van Moolenbroek 
115e985b929SDavid van Moolenbroek 	/* Callback */
116e985b929SDavid van Moolenbroek 	void (*cb)(struct evhttp_request *, void *);
117e985b929SDavid van Moolenbroek 	void *cb_arg;
118e985b929SDavid van Moolenbroek 
119e985b929SDavid van Moolenbroek 	/*
120e985b929SDavid van Moolenbroek 	 * Chunked data callback - call for each completed chunk if
121e985b929SDavid van Moolenbroek 	 * specified.  If not specified, all the data is delivered via
122e985b929SDavid van Moolenbroek 	 * the regular callback.
123e985b929SDavid van Moolenbroek 	 */
124e985b929SDavid van Moolenbroek 	void (*chunk_cb)(struct evhttp_request *, void *);
125e985b929SDavid van Moolenbroek };
126e985b929SDavid van Moolenbroek 
127e985b929SDavid van Moolenbroek #ifdef __cplusplus
128e985b929SDavid van Moolenbroek }
129e985b929SDavid van Moolenbroek #endif
130e985b929SDavid van Moolenbroek 
131e985b929SDavid van Moolenbroek #endif /* _EVENT2_HTTP_STRUCT_H_ */
132e985b929SDavid van Moolenbroek 
133