Annotation of embedaddon/libevent/http-internal.h, revision 1.1.1.1

1.1       misho       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_connection *, 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 */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>