void ListenerService::startControl(Executor* executor){ runState = rdManager.runState; switch (runState) { case 0: { BitcodeListener* PSOlistener = new PSOListener(executor, &rdManager); pushListener(PSOlistener); executor->executionNum++; gettimeofday(&start, NULL); break; } case 1: { BitcodeListener* Symboliclistener = new SymbolicListener(executor, &rdManager); pushListener(Symboliclistener); rdManager.runState = 2; if (executor->prefix) { executor->prefix->reuse(); } gettimeofday(&start, NULL); break; } case 2: { BitcodeListener* Taintlistener = new TaintListener(executor, &rdManager); pushListener(Taintlistener); rdManager.runState = 0; if (executor->prefix) { executor->prefix->reuse(); } gettimeofday(&start, NULL); break; } case 3: { break; } default: { break; } } }
WSLUA_CONSTRUCTOR Listener_new(lua_State* L) { /* Creates a new Listener listener */ #define WSLUA_OPTARG_Listener_new_TAP 1 /* The name of this tap */ #define WSLUA_OPTARG_Listener_new_FILTER 2 /* A filter that when matches the tap.packet function gets called (use nil to be called for every packet) */ const gchar* tap_type = luaL_optstring(L,WSLUA_OPTARG_Listener_new_TAP,"frame"); const gchar* filter = luaL_optstring(L,WSLUA_OPTARG_Listener_new_FILTER,NULL); Listener tap; GString* error; tap = (Listener)g_malloc(sizeof(struct _wslua_tap)); tap->name = g_strdup(tap_type); tap->filter = filter ? g_strdup(filter) : NULL; tap->extractor = wslua_get_tap_extractor(tap_type); tap->L = L; tap->packet_ref = LUA_NOREF; tap->draw_ref = LUA_NOREF; tap->init_ref = LUA_NOREF; /* * XXX - do all Lua taps require the protocol tree? If not, it might * be useful to have a way to indicate whether any do. * * XXX - do any Lua taps require the columns? If so, we either need * to request them for this tap, or do so if any Lua taps require them. */ error = register_tap_listener(tap_type, tap, tap->filter, TL_REQUIRES_PROTO_TREE, lua_tap_reset, lua_tap_packet, lua_tap_draw); if (error) { g_free(tap->filter); g_free(tap->name); g_free(tap); /* WSLUA_ERROR(new_tap,"tap registration error"); */ luaL_error(L,"Error while registering tap:\n%s",error->str); g_string_free(error,TRUE); /* XXX LEAK? */ } pushListener(L,tap); WSLUA_RETURN(1); /* The newly created Listener listener object */ }