source: trunk/third-party/shttpd/shttpd.h @ 6644

Last change on this file since 6644 was 6644, checked in by charles, 13 years ago

upgrade to shttpd 1.42

File size: 4.5 KB
Line 
1/*
2 * Copyright (c) 2004-2008 Sergey Lyubka <valenok@gmail.com>
3 * All rights reserved
4 *
5 * "THE BEER-WARE LICENSE" (Revision 42):
6 * Sergey Lyubka wrote this file.  As long as you retain this notice you
7 * can do whatever you want with this stuff. If we meet some day, and you think
8 * this stuff is worth it, you can buy me a beer in return.
9 *
10 * $Id: shttpd.h,v 1.18 2008/08/23 08:34:50 drozd Exp $
11 */
12
13#ifndef SHTTPD_HEADER_INCLUDED
14#define SHTTPD_HEADER_INCLUDED
15
16#ifdef __cplusplus
17extern "C" {
18#endif /* __cplusplus */
19
20struct ubuf {
21        char            *buf;           /* Buffer pointer               */
22        int             len;            /* Size of a buffer             */
23        int             num_bytes;      /* Bytes processed by callback  */
24};
25
26/*
27 * This structure is passed to the user callback function
28 */
29struct shttpd_arg {
30        void            *priv;          /* Private! Do not touch!       */
31        void            *state;         /* User state                   */
32        void            *user_data;     /* Data from register_uri()     */
33        struct ubuf     in;             /* Input is here, POST data     */
34        struct ubuf     out;            /* Output goes here             */
35
36        unsigned int    flags;
37#define SHTTPD_END_OF_OUTPUT    1       /* No more data do send         */
38#define SHTTPD_CONNECTION_ERROR 2       /* Server closed the connection */
39#define SHTTPD_MORE_POST_DATA   4       /* arg->in has incomplete data  */
40#define SHTTPD_POST_BUFFER_FULL 8       /* arg->in has max data         */
41#define SHTTPD_SSI_EVAL_TRUE    16      /* SSI eval callback must set it*/
42#define SHTTPD_SUSPEND          32      /* User wants to suspend output */
43};
44
45/*
46 * User callback function. Called when certain registered URLs have been
47 * requested. These are the requirements to the callback function:
48 *
49 * 1. It must copy data into 'out.buf' buffer, not more than 'out.len' bytes,
50 *      and record how many bytes are copied, into 'out.num_bytes'
51 * 2. It must not call any blocking functions
52 * 3. It must set SHTTPD_END_OF_OUTPUT flag when there is no more data to send
53 * 4. For POST requests, it must process the incoming data (in.buf) of length
54 *      'in.len', and set 'in.num_bytes', which is how many bytes of POST
55 *      data was processed and can be discarded by SHTTPD.
56 * 5. If callback allocates arg->state, to keep state, it must deallocate it
57 *    at the end of coonection SHTTPD_CONNECTION_ERROR or SHTTPD_END_OF_OUTPUT
58 * 6. If callback function wants to suspend until some event, it must store
59 *      arg->priv pointer elsewhere, set SHTTPD_SUSPEND flag and return. When
60 *      the event happens, user code should call shttpd_wakeup(priv).
61 *      It is safe to call shttpd_wakeup() from any thread. User code must
62 *      not call shttpd_wakeup once the connection is closed.
63 */
64typedef void (*shttpd_callback_t)(struct shttpd_arg *);
65
66/*
67 * shttpd_init          Initialize shttpd context
68 * shttpd_fini          Dealocate the context, close all connections
69 * shttpd_set_option    Set new value for option
70 * shttpd_register_uri  Setup the callback function for specified URL
71 * shttpd_poll          Do connections processing
72 * shttpd_version       return string with SHTTPD version
73 * shttpd_get_var       Fetch POST/GET variable value by name. Return value len
74 * shttpd_get_header    return value of the specified HTTP header
75 * shttpd_get_env       return values for the following pseudo-variables:
76                        "REQUEST_METHOD", "REQUEST_URI",
77 *                      "REMOTE_USER" and "REMOTE_ADDR"
78 * shttpd_printf        helper function to output data
79 * shttpd_handle_error  register custom HTTP error handler
80 * shttpd_wakeup        clear SHTTPD_SUSPEND state for the connection
81 */
82
83struct shttpd_ctx;
84
85struct shttpd_ctx *shttpd_init(int argc, char *argv[]);
86int shttpd_set_option(struct shttpd_ctx *, const char *opt, const char *val);
87void shttpd_fini(struct shttpd_ctx *);
88void shttpd_register_uri(struct shttpd_ctx *ctx, const char *uri,
89                shttpd_callback_t callback, void *const user_data);
90void shttpd_poll(struct shttpd_ctx *, int milliseconds);
91const char *shttpd_version(void);
92int shttpd_get_var(const char *var, const char *buf, int buf_len,
93                char *value, int value_len);
94const char *shttpd_get_header(struct shttpd_arg *, const char *header_name);
95const char *shttpd_get_env(struct shttpd_arg *, const char *name);
96void shttpd_get_http_version(struct shttpd_arg *,
97                unsigned long *major, unsigned long *minor);
98size_t shttpd_printf(struct shttpd_arg *, const char *fmt, ...);
99void shttpd_handle_error(struct shttpd_ctx *ctx, int status,
100                shttpd_callback_t func, void *const data);
101void shttpd_register_ssi_func(struct shttpd_ctx *ctx, const char *name,
102                shttpd_callback_t func, void *const user_data);
103void shttpd_wakeup(const void *priv);
104int shttpd_join(struct shttpd_ctx *, fd_set *, fd_set *, int *max_fd);
105int  shttpd_socketpair(int sp[2]);
106
107#ifdef __cplusplus
108}
109#endif /* __cplusplus */
110
111#endif /* SHTTPD_HEADER_INCLUDED */
Note: See TracBrowser for help on using the repository browser.