108 lines
2.7 KiB
Plaintext
108 lines
2.7 KiB
Plaintext
|
|
|
|
const MAX_CONTEXT_VARS: usize = 32;
|
|
const MAX_KEY_LEN: usize = 64;
|
|
const MAX_VALUE_LEN: usize = 256;
|
|
const MAX_PATH_LEN: usize = 256;
|
|
const MAX_HANDLERS: usize = 32;
|
|
const BUFFER_SIZE: usize = 4096;
|
|
const MAX_URL_PARAMS: usize = 16;
|
|
const MAX_COOKIES: usize = 10;
|
|
const MAX_OUTER_ARRAY_ITEMS: usize = 100;
|
|
const MAX_INNER_ARRAY_ITEMS: usize = 200;
|
|
|
|
const TEMPLATES_DIR: &str = "templates/";
|
|
const STATIC_DIR: &str = "static/";
|
|
/*
|
|
enum ContextType {
|
|
CONTEXT_TYPE_STRING,
|
|
CONTEXT_TYPE_STRING_ARRAY,
|
|
CONTEXT_TYPE_STRING_2D_ARRAY,
|
|
};
|
|
*/
|
|
type ContextType = i32;
|
|
struct CV_array_data {
|
|
values: &&char,
|
|
count: i32,
|
|
}
|
|
|
|
struct CV_2d_array_data {
|
|
values: &&&char,
|
|
count: i32,
|
|
}
|
|
|
|
|
|
struct ContextVarStr {
|
|
key: char[MAX_KEY_LEN],
|
|
typ: ContextType,
|
|
value: char[MAX_VALUE_LEN]
|
|
}
|
|
|
|
struct ContextVarArr {
|
|
key: char[MAX_KEY_LEN],
|
|
typ: ContextType,
|
|
value: CV_array_data,
|
|
}
|
|
|
|
struct ContextVar2dArr {
|
|
key: char[MAX_KEY_LEN],
|
|
typ: ContextType,
|
|
value: CV_2d_array_data,
|
|
}
|
|
|
|
struct ContextVar {
|
|
key: char[MAX_KEY_LEN],
|
|
typ: ContextType,
|
|
value: char[MAX_VALUE_LEN]
|
|
}
|
|
|
|
struct TemplateContext {
|
|
vars: ContextVar[MAX_CONTEXT_VARS],
|
|
count: i32,
|
|
}
|
|
|
|
struct UrlParam {
|
|
key: char[MAX_KEY_LEN],
|
|
value: char[MAX_VALUE_LEN],
|
|
}
|
|
|
|
struct UrlParams {
|
|
params: UrlParam[MAX_URL_PARAMS],
|
|
count: i32
|
|
}
|
|
struct Cookie {
|
|
name: char[MAX_KEY_LEN],
|
|
value: char[MAX_VALUE_LEN],
|
|
expires: char[MAX_VALUE_LEN],
|
|
path: char[MAX_KEY_LEN],
|
|
http_only: bool,
|
|
secure: bool
|
|
}
|
|
|
|
type RequestHandler = fn(params: &UrlParams);
|
|
|
|
struct RouteHandler {
|
|
path: char[MAX_PATH_LEN],
|
|
handler: RequestHandler
|
|
}
|
|
|
|
extern fn new_context() -> TemplateContext;
|
|
extern fn context_set(ctx: &mut TemplateContext, key: &cstr, value: &cstr);
|
|
extern fn context_set_string_array(ctx: &mut TemplateContext, key: &cstr, values: &cstr, count: i32);
|
|
extern fn context_set_array_of_arrays(ctx: &mut TemplateContext, key: &cstr, values: &cstr[][], outer_count: i32, inner_count: i32);
|
|
extern fn free_context(ctx: &mut TemplateContext);
|
|
extern fn render_template(template_file: &cstr, ctx: &mut TemplateContext) -> &cstr;
|
|
|
|
extern fn send_response(html: &cstr);
|
|
extern fn send_redirect(location: &cstr);
|
|
extern fn set_cookie(name: &cstr, value: &cstr, expires: &cstr, path: &cstr, http_only: bool, secure: bool);
|
|
extern fn get_cookie(name: &cstr) -> &cstr;
|
|
|
|
extern fn set_handler(path: &cstr, handler: RequestHandler);
|
|
extern fn parse_request_url(request_buffer: &cstr, params: &UrlParams) -> &cstr;
|
|
extern fn get_mime_type(file_path: &cstr) -> &cstr;
|
|
extern fn serve_static_file(request_path_relative_to_static: &cstr) -> bool;
|
|
|
|
extern fn beaker_run(ip: &cstr, port: i32) -> i32;
|
|
|