Annotation of embedaddon/libpdel/http/http_server.h, revision 1.1.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_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,
230: int code, const char *fmt, ...);
231: extern void http_response_send_errno_error(struct http_response *resp);
232:
233: extern int http_response_no_body(int code);
234: extern const char *http_response_status_msg(int code);
235: extern int http_response_get_raw_socket(struct http_response *resp);
236:
237: __END_DECLS
238:
239: #endif /* _PDEL_HTTP_HTTP_SERVER_H_ */
240:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>