You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
2.4 KiB
126 lines
2.4 KiB
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
|
|
#include <lua5.1/lua.h>
|
|
#include <lua5.1/lauxlib.h>
|
|
#include <lua5.1/lualib.h>
|
|
|
|
#include "config.h"
|
|
|
|
|
|
// Checks if a file exists
|
|
static int LF_fileexists(char *path)
|
|
{
|
|
if(access(path, F_OK) == 0){ return 1; }
|
|
else { return 0; }
|
|
}
|
|
|
|
|
|
// Create configuration with default settings
|
|
LF_config *LF_createconfig()
|
|
{
|
|
LF_config *c = malloc(sizeof(LF_config));
|
|
if(c == NULL){ return NULL; }
|
|
|
|
// Default settings
|
|
c->listen = "127.0.0.1:9222";
|
|
c->backlog = 100;
|
|
c->threads = 1;
|
|
c->sandbox = 1;
|
|
c->mem_max = 65536;
|
|
c->output_max = 65536;
|
|
c->cpu_usec = 500000;
|
|
c->cpu_sec = 0;
|
|
|
|
return c;
|
|
}
|
|
|
|
|
|
// Load configuration
|
|
int LF_loadconfig(LF_config *cfg, char *path)
|
|
{
|
|
if(!LF_fileexists(path)){ return 1; }
|
|
|
|
lua_State *l = luaL_newstate();
|
|
if(luaL_loadfile(l, path) || lua_pcall(l,0,1,0)){
|
|
printf("%s\n", lua_tostring(l, -1));
|
|
lua_close(l);
|
|
return 1;
|
|
}
|
|
|
|
lua_settop(l, 1);
|
|
|
|
if(lua_istable(l, 1)){
|
|
lua_pushstring(l, "listen");
|
|
lua_rawget(l, 1);
|
|
if(lua_isstring(l, 2)){
|
|
size_t len = 0;
|
|
const char *str = lua_tolstring(l, 2, &len);
|
|
|
|
if(len > 0){
|
|
cfg->listen = malloc(len+1);
|
|
memcpy(cfg->listen, str, len+1);
|
|
}
|
|
}
|
|
|
|
lua_settop(l, 1);
|
|
|
|
lua_pushstring(l, "backlog");
|
|
lua_rawget(l, 1);
|
|
if(lua_isnumber(l, 2)){ cfg->backlog = lua_tonumber(l, 2); }
|
|
|
|
lua_settop(l, 1);
|
|
|
|
lua_pushstring(l, "threads");
|
|
lua_rawget(l, 1);
|
|
if(lua_isnumber(l, 2)){ cfg->threads = lua_tonumber(l, 2); }
|
|
|
|
lua_settop(l, 1);
|
|
|
|
lua_pushstring(l, "sandbox");
|
|
lua_rawget(l, 1);
|
|
if(lua_isboolean(l, 2)){ cfg->sandbox = lua_toboolean(l, 2); }
|
|
|
|
lua_settop(l, 1);
|
|
|
|
lua_pushstring(l, "mem_max");
|
|
lua_rawget(l, 1);
|
|
if(lua_isnumber(l, 2)){ cfg->mem_max = lua_tonumber(l, 2); }
|
|
|
|
lua_settop(l, 1);
|
|
|
|
lua_pushstring(l, "cpu_usec");
|
|
lua_rawget(l, 1);
|
|
if(lua_isnumber(l, 2)){ cfg->cpu_usec = lua_tonumber(l, 2); }
|
|
|
|
lua_settop(l, 1);
|
|
|
|
lua_pushstring(l, "cpu_sec");
|
|
lua_rawget(l, 1);
|
|
if(lua_isnumber(l, 2)){ cfg->cpu_sec = lua_tonumber(l, 2); }
|
|
|
|
lua_settop(l, 1);
|
|
|
|
lua_pushstring(l, "output_max");
|
|
lua_rawget(l, 1);
|
|
if(lua_isnumber(l, 2)){ cfg->output_max = lua_tonumber(l, 2); }
|
|
|
|
lua_settop(l, 1);
|
|
|
|
lua_pushstring(l, "content_type");
|
|
lua_rawget(l, 1);
|
|
if(lua_isstring(l, 2)){
|
|
size_t len = 0;
|
|
const char *str = lua_tolstring(l, 2, &len);
|
|
|
|
if(len > 0){
|
|
cfg->content_type = malloc(len+1);
|
|
memcpy(cfg->content_type, str, len+1);
|
|
}
|
|
}
|
|
}
|
|
|
|
lua_close(l);
|
|
return 0;
|
|
}
|