masscan-mark-ii/src/scripting-masscan.c

94 lines
2.6 KiB
C

#include "masscan.h"
#include "scripting.h"
#include "stub-lua.h"
#include "unusedparm.h"
#define MASSCAN_CLASS "Masscan Class"
struct MasscanWrapper
{
struct Masscan *masscan;
};
/***************************************************************************
* "setconfig" function in Lua.
*
* Called to set a generic name=value parameter. Any configuration
* option that can be set on the command-line, or from within a config
* file, can be set via this function.
***************************************************************************/
static int mass_setconfig(struct lua_State *L)
{
struct MasscanWrapper *wrapper;
struct Masscan *masscan;
const char *name;
const char *value;
wrapper = luaL_checkudata(L, 1, MASSCAN_CLASS);
masscan = wrapper->masscan;
name = luaL_checkstring(L, 2);
value = luaL_checkstring(L, 3);
masscan_set_parameter(masscan, name, value);
return 0;
}
/***************************************************************************
***************************************************************************/
static int mass_gc(struct lua_State *L)
{
//struct MasscanWrapper *wrapper;
//struct Masscan *masscan;
UNUSEDPARM(L);
//wrapper = luaL_checkudata(L, 1, MASSCAN_CLASS);
//masscan = wrapper->masscan;
/* I'm hot sure what I should do here for shutting down this object,
* but I'm registering a garbage collection function anyway */
return 0;
}
/***************************************************************************
* This function creases the object called "Masscan" in the global
* variable space of a Lua script. The script can then interact
* with this object in order to setup the scan that it wants to
* do.
***************************************************************************/
void scripting_masscan_init(struct Masscan *masscan)
{
struct MasscanWrapper *wrapper;
struct lua_State *L = masscan->scripting.L;
static const luaL_Reg my_methods[] = {
{"setconfig", mass_setconfig},
{"__gc", mass_gc},
{NULL, NULL}
};
/*
* Lua: Create a class to wrap a 'socket'
*/
luaL_newmetatable(L, MASSCAN_CLASS);
lua_pushvalue(L, -1);
lua_setfield(L, -2, "__index");
luaL_setfuncs(L, my_methods, 0);
lua_pop(L, 1);
/* Lua: create a wrapper object and push it onto the stack */
wrapper = lua_newuserdata(L, sizeof(*wrapper));
memset(wrapper, 0, sizeof(*wrapper));
wrapper->masscan = masscan;
/* Lua: set the class/type */
luaL_setmetatable(L, MASSCAN_CLASS);
lua_setglobal(L, "Masscan");
}