2 * uhttpd - Tiny single-threaded httpd
4 * Copyright (C) 2010-2013 Jo-Philipp Wich <xm@subsignal.org>
5 * Copyright (C) 2013 Felix Fietkau <nbd@openwrt.org>
7 * Permission to use, copy, modify, and/or distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24 static LIST_HEAD(plugins
);
26 static const struct uhttpd_ops ops
= {
27 .dispatch_add
= uh_dispatch_add
,
28 .path_match
= uh_path_match
,
29 .create_process
= uh_create_process
,
30 .get_process_vars
= uh_get_process_vars
,
31 .http_header
= uh_http_header
,
32 .client_error
= uh_client_error
,
33 .request_done
= uh_request_done
,
34 .chunk_write
= uh_chunk_write
,
35 .chunk_printf
= uh_chunk_printf
,
36 .urlencode
= uh_urlencode
,
37 .urldecode
= uh_urldecode
,
40 int uh_plugin_init(const char *name
)
42 struct uhttpd_plugin
*p
;
46 dlh
= dlopen(name
, RTLD_LAZY
| RTLD_LOCAL
);
48 fprintf(stderr
, "Could not open plugin %s: %s\n", name
, dlerror());
52 sym
= "uhttpd_plugin";
55 fprintf(stderr
, "Could not find symbol '%s' in plugin '%s'\n", sym
, name
);
59 list_add(&p
->list
, &plugins
);
60 return p
->init(&ops
, &conf
);
63 void uh_plugin_post_init(void)
65 struct uhttpd_plugin
*p
;
67 list_for_each_entry(p
, &plugins
, list
)