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