-- -- anylike -- -- anylike is an IKEv2 Implementation written in Lua and C. It's main -- design goal is to provide anytun and uanytun or any other SATP -- implementation with a key exchange mechanism but it should also be -- possible to use anylike as key exchange daemon for IPSec security -- associations. The use of Lua guarantees that anylike is easily -- portable to many platforms including very small ones like wireless -- routers. -- -- -- Copyright (C) 2007-2008 Markus Grueneis -- Christian Pointner -- -- This file is part of anylike. -- -- anylike is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- any later version. -- -- anylike is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with anylike. If not, see . -- socket = require("socket") function main_loop(opt) log.printf(log.NOTICE, "main_loop started") local sig = signal.init() if(opt.debug) then local ret = debug_shell.init("localhost", 9000) if(ret == nil) then return -1 end end local return_value = 0 while return_value == 0 do local readable, _, err = socket.select({ sig , unpack(debug_shell.socks) } , nil) if(err) then log.printf(log.ERROR, "select returned with error: %s", err) return_value = -1 else for _, input in ipairs(readable) do if(input == sig) then return_value = signal.handle() if(return_value == 1) then break end elseif(input == debug_shell.socks[1] or input == debug_shell.socks[2]) then return_value = debug_shell.handle(input) if(return_value == 2) then break end else log.printf(log.ERROR, "select returned unknown file descriptor!?") end end end end if(return_value == 2) then return_value = 0 end if(opt.debug) then debug_shell.close(); end signal.stop() return return_value end