Return to http_server.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / mpd / src / contrib / libpdel / http |
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_SERVER_H_ 42: #define _PDEL_HTTP_HTTP_SERVER_H_ 43: 44: struct http_connection; 45: struct http_request; 46: struct http_response; 47: struct http_servlet; 48: struct mime_multipart; 49: struct mime_part; 50: struct pevent_ctx; 51: 52: #ifndef __FreeBSD__ 53: #define __printflike(x,y) 54: #endif 55: 56: /* 57: * SSL info supplied by the application 58: */ 59: struct http_server_ssl { 60: const char *cert_path; /* path to certificate file */ 61: const char *pkey_path; /* path to private key file */ 62: const char *pkey_password; /* private key password, if needed */ 63: }; 64: 65: /* 66: * Special "headers" from the first line 67: * of an HTTP request or HTTP response. 68: */ 69: #define HDR_REQUEST_METHOD ((const char *)1) 70: #define HDR_REQUEST_URI ((const char *)2) 71: #define HDR_REQUEST_VERSION ((const char *)3) 72: #define HDR_REPLY_VERSION ((const char *)1) 73: #define HDR_REPLY_STATUS ((const char *)2) 74: #define HDR_REPLY_REASON ((const char *)3) 75: 76: /* 77: * User callback types 78: */ 79: typedef void http_logger_t(int sev, const char *fmt, ...); 80: typedef void http_proxy_t(void *arg, struct http_request *req, 81: struct http_response *resp); 82: 83: /* 84: * Should return 0 to proceed, or -1 and set errno to abort. 85: * The handler should NOT close the stream and should NOT free "part". 86: */ 87: typedef int http_mime_handler_t(void *arg, 88: struct mime_part *part, FILE *fp); 89: 90: __BEGIN_DECLS 91: 92: /* 93: * Server functions 94: */ 95: extern struct http_server *http_server_start(struct pevent_ctx *ctx, 96: struct in_addr ip, u_int16_t port, 97: const struct http_server_ssl *ssl, 98: const char *server_name, http_logger_t *logger); 99: extern void http_server_stop(struct http_server **serverp); 100: extern int http_server_register_servlet(struct http_server *serv, 101: struct http_servlet *servlet, const char *vhost, 102: const char *urlpat, int order); 103: extern void http_server_destroy_servlet(struct http_servlet **servletp); 104: extern void http_server_set_proxy_handler(struct http_server *serv, 105: http_proxy_t *handler, void *arg); 106: 107: /* 108: * Client functions 109: */ 110: extern struct http_client *http_client_create(struct pevent_ctx *ctx, 111: const char *user_agent, u_int max_conn, u_int max_cache, 112: u_int max_cache_idle, http_logger_t *logger); 113: extern int http_client_destroy(struct http_client **clientp); 114: 115: extern struct http_client_connection *http_client_connect( 116: struct http_client *client, struct in_addr ip, 117: u_int16_t port, int https); 118: extern struct in_addr http_client_get_local_ip( 119: struct http_client_connection *cc); 120: extern u_int16_t http_client_get_local_port(struct http_client_connection *cc); 121: extern struct http_request *http_client_get_request( 122: struct http_client_connection *client); 123: extern struct http_response *http_client_get_response( 124: struct http_client_connection *client); 125: extern void http_client_close(struct http_client_connection **cconp); 126: extern const char *http_client_get_reason( 127: struct http_client_connection *ccon); 128: 129: /* 130: * Request functions 131: */ 132: extern const char *http_request_get_query_string(struct http_request *req); 133: extern const char *http_request_get_method(struct http_request *req); 134: extern int http_request_set_method(struct http_request *req, 135: const char *method); 136: extern const char *http_request_get_uri(struct http_request *req); 137: extern const char *http_request_get_version(struct http_request *req); 138: extern const char *http_request_get_path(struct http_request *req); 139: extern int http_request_set_path(struct http_request *req, 140: const char *path); 141: extern SSL_CTX *http_request_get_ssl(struct http_request *req); 142: extern const char *http_request_get_header(struct http_request *req, 143: const char *name); 144: extern int http_request_num_headers(struct http_request *req); 145: extern int http_request_get_header_by_index(struct http_request *req, 146: u_int index, const char **namep, const char **valuep); 147: extern void http_request_set_proxy(struct http_request *req, int whether); 148: extern int http_request_set_header(struct http_request *req, 149: int append, const char *name, const char *valfmt, ...) 150: __printflike(4, 5); 151: extern int http_request_remove_header(struct http_request *req, 152: const char *name); 153: extern int http_request_send_headers(struct http_request *req); 154: extern FILE *http_request_get_input(struct http_request *req); 155: extern FILE *http_request_get_output(struct http_request *req, int buffer); 156: extern const char *http_request_get_username(struct http_request *req); 157: extern const char *http_request_get_password(struct http_request *req); 158: extern const char *http_request_get_host(struct http_request *req); 159: extern struct in_addr http_request_get_remote_ip(struct http_request *req); 160: extern u_int16_t http_request_get_remote_port(struct http_request *req); 161: extern const char *http_request_get_value(struct http_request *req, 162: const char *name, int instance); 163: extern int http_request_set_value(struct http_request *req, 164: const char *name, const char *value); 165: extern int http_request_get_num_values(struct http_request *req); 166: extern int http_request_get_value_by_index(struct http_request *req, 167: int index, const char **name, const char **value); 168: extern int http_request_set_query_from_values(struct http_request *req); 169: extern int http_request_read_url_encoded_values(struct http_request *req); 170: extern int http_request_write_url_encoded_values(struct http_request *req); 171: 172: extern int http_request_get_mime_multiparts(struct http_request *req, 173: http_mime_handler_t *handler, void *arg); 174: extern struct mime_multipart *http_request_read_mime_multipart( 175: struct http_request *req); 176: extern int http_request_file_upload(struct http_request *req, 177: const char *field, FILE *fp, size_t max); 178: 179: extern time_t http_request_parse_time(const char *string); 180: extern void http_request_url_decode(const char *s, char *t); 181: extern char *http_request_url_encode(const char *mtype, const char *string); 182: extern char *http_request_encode_basic_auth(const char *mtype, 183: const char *username, const char *password); 184: extern int http_request_get_raw_socket(struct http_request *req); 185: 186: /* 187: * mime_multipart methods 188: */ 189: extern u_int http_mime_multipart_get_count(struct mime_multipart *mp); 190: extern struct mime_part *http_mime_multipart_get_part( 191: struct mime_multipart *mp, u_int index); 192: extern void http_mime_multipart_free(struct mime_multipart **mpp); 193: 194: /* 195: * mime_part methods 196: */ 197: extern const char *http_mime_part_get_header(struct mime_part *part, 198: const char *name); 199: extern u_int http_mime_part_get_length(struct mime_part *part); 200: extern u_char *http_mime_part_get_data(struct mime_part *part); 201: 202: /* 203: * Response functions 204: */ 205: extern SSL_CTX *http_response_get_ssl(struct http_response *resp); 206: extern const char *http_response_get_header(struct http_response *resp, 207: const char *name); 208: extern int http_response_num_headers(struct http_response *req); 209: extern int http_response_get_header_by_index(struct http_response *resp, 210: u_int index, const char **namep, const char **valuep); 211: extern int http_response_set_header(struct http_response *resp, 212: int append, const char *name, const char *valfmt, ...) 213: __printflike(4, 5); 214: extern int http_response_remove_header(struct http_response *resp, 215: const char *name); 216: extern int http_response_send_headers(struct http_response *resp, 217: int unbuffer); 218: extern int http_response_get_code(struct http_response *resp); 219: extern FILE *http_response_get_input(struct http_response *resp); 220: extern FILE *http_response_get_output(struct http_response *resp, int bufr); 221: extern struct in_addr http_response_get_remote_ip(struct http_response *resp); 222: extern u_int16_t http_response_get_remote_port(struct http_response *resp); 223: extern void http_response_guess_mime(const char *path, const char **ctype, 224: const char **cencs, int maxenc); 225: extern void http_response_send_redirect(struct http_response *resp, 226: const char *url); 227: extern void http_response_send_basic_auth(struct http_response *resp, 228: const char *realm); 229: extern void http_response_send_error(struct http_response *resp, 1.1.1.2 ! misho 230: int code, const char *fmt, ...) ! 231: __printflike(3, 4); 1.1 misho 232: extern void http_response_send_errno_error(struct http_response *resp); 233: 234: extern int http_response_no_body(int code); 235: extern const char *http_response_status_msg(int code); 236: extern int http_response_get_raw_socket(struct http_response *resp); 237: 238: __END_DECLS 239: 240: #endif /* _PDEL_HTTP_HTTP_SERVER_H_ */ 241: