1 /* 2 * uhttpd - Tiny single-threaded httpd 3 * 4 * Copyright (C) 2010-2013 Jo-Philipp Wich <xm@subsignal.org> 5 * Copyright (C) 2013 Felix Fietkau <nbd@openwrt.org> 6 * 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. 10 * 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. 18 */ 19 20 #include <dlfcn.h> 21 #include "uhttpd.h" 22 #include "plugin.h" 23 24 static LIST_HEAD(plugins); 25 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, 38 }; 39 40 int uh_plugin_init(const char *name) 41 { 42 struct uhttpd_plugin *p; 43 const char *sym; 44 void *dlh; 45 46 dlh = dlopen(name, RTLD_LAZY | RTLD_GLOBAL); 47 if (!dlh) { 48 fprintf(stderr, "Could not open plugin %s: %s\n", name, dlerror()); 49 return -ENOENT; 50 } 51 52 sym = "uhttpd_plugin"; 53 p = dlsym(dlh, sym); 54 if (!p) { 55 fprintf(stderr, "Could not find symbol '%s' in plugin '%s'\n", sym, name); 56 return -ENOENT; 57 } 58 59 list_add(&p->list, &plugins); 60 return p->init(&ops, &conf); 61 } 62 63 void uh_plugin_post_init(void) 64 { 65 struct uhttpd_plugin *p; 66 67 list_for_each_entry(p, &plugins, list) 68 if (p->post_init) 69 p->post_init(); 70 } 71
This page was automatically generated by LXR 0.3.1. • OpenWrt