2 * Copyright (c) 2009 The NetBSD Foundation, Inc.
5 * This code is derived from software contributed to The NetBSD Foundation
6 * by Alistair Crooks (agc@netbsd.org)
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
29 #include <sys/types.h>
30 #include <sys/param.h>
33 #include <bozohttpd.h>
46 #define __UNCONST(a) ((void *)(unsigned long)(const void *)(a))
47 #endif /* !__UNCONST */
49 int luaopen_bozohttpd(lua_State
*);
52 typedef struct strarg_t
{
53 const char *s
; /* string */
54 const int n
; /* corresponding int value */
57 /* map a string onto an int */
59 findtype(strarg_t
*strs
, const char *s
)
63 for (sp
= strs
; sp
->s
&& strcasecmp(sp
->s
, s
) != 0 ; sp
++) {
75 httpd
= lua_newuserdata(L
, sizeof(*httpd
));
76 (void) memset(httpd
, 0x0, sizeof(*httpd
));
80 /* initialise(httpd) */
82 l_init_httpd(lua_State
*L
)
86 httpd
= lua_touserdata(L
, 1);
87 lua_pushnumber(L
, bozo_init_httpd(httpd
));
91 /* initialise(prefs) */
93 l_init_prefs(lua_State
*L
)
97 prefs
= lua_newuserdata(L
, sizeof(*prefs
));
98 (void) memset(prefs
, 0x0, sizeof(*prefs
));
99 (void) bozo_init_prefs(prefs
);
103 /* bozo_set_pref(prefs, name, value) */
105 l_bozo_set_pref(lua_State
*L
)
111 prefs
= lua_touserdata(L
, 1);
112 name
= luaL_checkstring(L
, 2);
113 value
= luaL_checkstring(L
, 3);
114 lua_pushnumber(L
, bozo_set_pref(prefs
, name
, value
));
118 /* bozo_get_pref(prefs, name) */
120 l_bozo_get_pref(lua_State
*L
)
125 prefs
= lua_touserdata(L
, 1);
126 name
= luaL_checkstring(L
, 2);
127 lua_pushstring(L
, bozo_get_pref(prefs
, name
));
131 /* bozo_setup(httpd, prefs, host, root) */
133 l_bozo_setup(lua_State
*L
)
140 httpd
= lua_touserdata(L
, 1);
141 prefs
= lua_touserdata(L
, 2);
142 vhost
= luaL_checkstring(L
, 3);
143 if (vhost
&& *vhost
== 0x0) {
146 root
= luaL_checkstring(L
, 4);
147 lua_pushnumber(L
, bozo_setup(httpd
, prefs
, vhost
, root
));
151 /* bozo_read_request(httpd) */
153 l_bozo_read_request(lua_State
*L
)
158 httpd
= lua_touserdata(L
, 1);
159 req
= bozo_read_request(httpd
);
160 lua_pushlightuserdata(L
, req
);
164 /* bozo_process_request(httpd, req) */
166 l_bozo_process_request(lua_State
*L
)
171 httpd
= lua_touserdata(L
, 1);
172 req
= lua_touserdata(L
, 2);
173 bozo_process_request(httpd
, req
);
174 lua_pushnumber(L
, 1);
178 /* bozo_clean_request(req) */
180 l_bozo_clean_request(lua_State
*L
)
184 req
= lua_touserdata(L
, 1);
185 bozo_clean_request(req
);
186 lua_pushnumber(L
, 1);
190 /* dynamic_mime(httpd, one, two, three, four) */
192 l_bozo_dynamic_mime(lua_State
*L
)
197 httpd
= lua_touserdata(L
, 1);
198 s
[0] = luaL_checkstring(L
, 2);
199 s
[1] = luaL_checkstring(L
, 3);
200 s
[2] = luaL_checkstring(L
, 4);
201 s
[3] = luaL_checkstring(L
, 5);
202 bozo_add_content_map_mime(httpd
, s
[0], s
[1], s
[2], s
[3]);
203 lua_pushnumber(L
, 1);
207 /* ssl_set_opts(httpd, one, two) */
209 l_bozo_ssl_set_opts(lua_State
*L
)
214 httpd
= lua_touserdata(L
, 1);
215 s
[0] = luaL_checkstring(L
, 2);
216 s
[1] = luaL_checkstring(L
, 3);
217 bozo_ssl_set_opts(httpd
, s
[0], s
[1]);
218 lua_pushnumber(L
, 1);
222 /* cgi_setbin(httpd, bin) */
224 l_bozo_cgi_setbin(lua_State
*L
)
229 httpd
= lua_touserdata(L
, 1);
230 bin
= luaL_checkstring(L
, 2);
231 bozo_cgi_setbin(httpd
, bin
);
232 lua_pushnumber(L
, 1);
236 /* cgi_map(httpd, 1, 2) */
238 l_bozo_cgi_map(lua_State
*L
)
243 httpd
= lua_touserdata(L
, 1);
244 s
[0] = luaL_checkstring(L
, 2);
245 s
[1] = luaL_checkstring(L
, 3);
246 bozo_add_content_map_cgi(httpd
, s
[0], s
[1]);
247 lua_pushnumber(L
, 1);
251 const struct luaL_reg libluabozohttpd
[] = {
253 { "init_httpd", l_init_httpd
},
254 { "init_prefs", l_init_prefs
},
256 { "set_pref", l_bozo_set_pref
},
257 { "get_pref", l_bozo_get_pref
},
258 { "setup", l_bozo_setup
},
259 { "dynamic_mime", l_bozo_dynamic_mime
},
260 { "ssl_set_opts", l_bozo_ssl_set_opts
},
261 { "cgi_setbin", l_bozo_cgi_setbin
},
262 { "cgi_map", l_bozo_cgi_map
},
264 { "read_request", l_bozo_read_request
},
265 { "process_request", l_bozo_process_request
},
266 { "clean_request", l_bozo_clean_request
},
272 luaopen_bozohttpd(lua_State
*L
)
274 luaL_openlib(L
, "bozohttpd", libluabozohttpd
, 0);