94 lines
2.6 KiB
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");
|
||
|
|
||
|
}
|