Annotation of embedaddon/libpdel/http/http_internal.h, revision 1.1
1.1 ! misho 1:
! 2: /*
! 3: * Copyright (c) 2001-2002 Packet Design, LLC.
! 4: * All rights reserved.
! 5: *
! 6: * Subject to the following obligations and disclaimer of warranty,
! 7: * use and redistribution of this software, in source or object code
! 8: * forms, with or without modifications are expressly permitted by
! 9: * Packet Design; provided, however, that:
! 10: *
! 11: * (i) Any and all reproductions of the source or object code
! 12: * must include the copyright notice above and the following
! 13: * disclaimer of warranties; and
! 14: * (ii) No rights are granted, in any manner or form, to use
! 15: * Packet Design trademarks, including the mark "PACKET DESIGN"
! 16: * on advertising, endorsements, or otherwise except as such
! 17: * appears in the above copyright notice or in the software.
! 18: *
! 19: * THIS SOFTWARE IS BEING PROVIDED BY PACKET DESIGN "AS IS", AND
! 20: * TO THE MAXIMUM EXTENT PERMITTED BY LAW, PACKET DESIGN MAKES NO
! 21: * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING
! 22: * THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED
! 23: * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
! 24: * OR NON-INFRINGEMENT. PACKET DESIGN DOES NOT WARRANT, GUARANTEE,
! 25: * OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS
! 26: * OF THE USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY,
! 27: * RELIABILITY OR OTHERWISE. IN NO EVENT SHALL PACKET DESIGN BE
! 28: * LIABLE FOR ANY DAMAGES RESULTING FROM OR ARISING OUT OF ANY USE
! 29: * OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY DIRECT,
! 30: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL
! 31: * DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF
! 32: * USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY THEORY OF
! 33: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
! 34: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
! 35: * THE USE OF THIS SOFTWARE, EVEN IF PACKET DESIGN IS ADVISED OF
! 36: * THE POSSIBILITY OF SUCH DAMAGE.
! 37: *
! 38: * Author: Archie Cobbs <archie@freebsd.org>
! 39: */
! 40:
! 41: #ifndef _PDEL_HTTP_HTTP_INTERNAL_H_
! 42: #define _PDEL_HTTP_HTTP_INTERNAL_H_
! 43:
! 44: #include "debug/debug.h"
! 45:
! 46: #ifndef __FreeBSD__
! 47: #define __printflike(x,y)
! 48: #endif
! 49:
! 50: /* HTTP connection */
! 51: struct http_connection {
! 52: void *owner; /* owner (server or client) */
! 53: struct http_request *req; /* request structure */
! 54: struct http_response *resp; /* response structure */
! 55: struct in_addr local_ip; /* local host ip */
! 56: u_int16_t local_port; /* local host port */
! 57: struct in_addr remote_ip; /* remote host ip */
! 58: u_int16_t remote_port; /* remote host port */
! 59: FILE *fp; /* connection to peer */
! 60: pthread_t tid; /* connection thread id */
! 61: u_char keep_alive; /* connection keep-alive */
! 62: u_char server; /* we are server (not client) */
! 63: u_char proxy; /* proxy request/response */
! 64: u_char started; /* conn. thread has started */
! 65: LIST_ENTRY(http_connection) next; /* next in connection list */
! 66: http_logger_t *logger; /* error logging routine */
! 67: SSL_CTX *ssl; /* ssl context, if doing ssl */
! 68: int sock; /* socket cached */
! 69: };
! 70:
! 71: /* HTTP request name, value pair */
! 72: struct http_nvp {
! 73: char *name;
! 74: char *value;
! 75: };
! 76:
! 77: /* HTTP request/response common info */
! 78: struct http_message {
! 79: struct http_connection *conn; /* associated connection */
! 80: struct http_head *head; /* headers */
! 81: char *host; /* decoded url host */
! 82: char *path; /* decoded url pathname */
! 83: char *query; /* encoded query string */
! 84: FILE *input; /* entity input stream */
! 85: u_int input_len; /* input length, or UINT_MAX */
! 86: u_int input_read; /* input length read so far */
! 87: FILE *output; /* entity output stream */
! 88: u_char *output_buf; /* buffered output, if any */
! 89: int output_len; /* buffered output length */
! 90: u_char buffered; /* output is buffered */
! 91: u_char no_headers; /* don't send any headers */
! 92: u_char hdrs_sent; /* header was sent */
! 93: u_char no_body; /* no entity data is allowed */
! 94: u_char skip_body; /* no entity data to be sent */
! 95: };
! 96:
! 97: /* HTTP request */
! 98: struct http_request {
! 99: struct http_message *msg; /* common req/reply info */
! 100: int num_nvp; /* number of n-v pairs */
! 101: struct http_nvp *nvp; /* name, value pairs */
! 102: char *username; /* authorization username */
! 103: char *password; /* authorization password */
! 104: };
! 105:
! 106: /* HTTP response */
! 107: struct http_response {
! 108: struct http_message *msg; /* common req/reply info */
! 109: u_int code; /* http response code */
! 110: };
! 111:
! 112: __BEGIN_DECLS
! 113:
! 114: /*
! 115: * http_head methods
! 116: */
! 117: extern struct http_head *_http_head_new(void);
! 118: extern int _http_head_read(struct http_head *head, FILE *fp, int req);
! 119: extern int _http_head_read_headers(struct http_head *head, FILE *fp);
! 120: extern int _http_head_write(struct http_head *head, FILE *fp);
! 121: extern struct http_head *_http_head_copy(struct http_head *head);
! 122: extern void _http_head_reset(struct http_head *head);
! 123: extern void _http_head_free(struct http_head **headp);
! 124: extern const char *_http_head_get(struct http_head *head, const char *name);
! 125: extern int _http_head_get_headers(struct http_head *head,
! 126: const char **names, size_t max_names);
! 127: extern int _http_head_set(struct http_head *head, int append,
! 128: const char *name, const char *valfmt, ...)
! 129: __printflike(4, 5);
! 130: extern int _http_head_vset(struct http_head *head, int append,
! 131: const char *name, const char *valfmt, va_list args);
! 132: extern int _http_head_num_headers(struct http_head *head);
! 133: extern int _http_head_get_by_index(struct http_head *head, u_int index,
! 134: const char **namep, const char **valuep);
! 135: extern int _http_head_remove(struct http_head *head, const char *name);
! 136: extern int _http_head_err_response(struct http_head **headp, int code);
! 137: extern int _http_head_has_anything(struct http_head *head);
! 138: extern int _http_head_want_keepalive(struct http_head *head);
! 139:
! 140: /*
! 141: * http_request methods
! 142: */
! 143: extern int _http_request_new(struct http_connection *conn);
! 144: extern int _http_request_read(struct http_connection *conn);
! 145: extern void _http_request_free(struct http_request **reqp);
! 146:
! 147: /*
! 148: * http_response methods
! 149: */
! 150: extern int _http_response_new(struct http_connection *conn);
! 151: extern int _http_response_read(struct http_connection *conn,
! 152: char *errbuf, int size);
! 153: extern void _http_response_free(struct http_response **respp);
! 154:
! 155: /*
! 156: * http_message methods
! 157: */
! 158: extern struct http_message *_http_message_new(void);
! 159: extern void _http_message_free(struct http_message **msgp);
! 160: extern int _http_message_read(struct http_message *msg, int req);
! 161: extern FILE *_http_message_get_output(struct http_message *msg, int buffer);
! 162: extern struct in_addr _http_message_get_remote_ip(struct http_message *msg);
! 163: extern u_int16_t _http_message_get_remote_port(struct http_message *msg);
! 164: extern int _http_message_has_anything(struct http_message *msg);
! 165: extern void _http_message_send_headers(struct http_message *msg,
! 166: int unbuffer);
! 167: extern void _http_message_send_body(struct http_message *msg);
! 168: extern int _http_message_vset_header(struct http_message *msg, int append,
! 169: const char *name, const char *valfmt, va_list args);
! 170: extern int _http_message_remove_header(struct http_message *msg,
! 171: const char *name);
! 172: extern const char *_http_message_connection_header(struct http_message *msg);
! 173: extern int _http_message_get_raw_socket(struct http_message *msg);
! 174:
! 175: /*
! 176: * http_connection methods
! 177: */
! 178: extern struct http_connection *_http_connection_create(FILE *fp, int sock,
! 179: int server, struct in_addr ip, u_int16_t port,
! 180: SSL_CTX *ssl, http_logger_t *logger, u_int timeout);
! 181: extern void _http_connection_free(struct http_connection **connp);
! 182:
! 183: /*
! 184: * Client connection caching functions
! 185: */
! 186: extern struct http_connection_cache *_http_connection_cache_create(
! 187: struct pevent_ctx *ctx, u_int max_num, u_int max_idle);
! 188: extern void _http_connection_cache_destroy(
! 189: struct http_connection_cache **cachep);
! 190: extern int _http_connection_cache_get(struct http_connection_cache *cache,
! 191: const struct sockaddr_in *peer, const SSL_CTX *ssl,
! 192: FILE **fpp, int *sockp);
! 193: extern int _http_connection_cache_put(struct http_connection_cache *cache,
! 194: const struct sockaddr_in *peer, const SSL_CTX *ssl,
! 195: FILE *fp, int sock);
! 196:
! 197: /*
! 198: * Misc
! 199: */
! 200: extern void _http_ssl_init(void);
! 201:
! 202: __END_DECLS
! 203:
! 204: #endif /* _PDEL_HTTP_HTTP_INTERNAL_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>