summaryrefslogtreecommitdiff
path: root/src/signalController.cpp
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2009-03-10 14:38:34 +0000
committerChristian Pointner <equinox@anytun.org>2009-03-10 14:38:34 +0000
commit591078f9c90100b1f6926bdac55877aa864f2238 (patch)
tree1f75aa9a53896e938a9c0ca8fe1021ab04e19625 /src/signalController.cpp
parentchanged packetSource to use gResolver (diff)
added SIGERROR to signal Controller
Diffstat (limited to 'src/signalController.cpp')
-rw-r--r--src/signalController.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/signalController.cpp b/src/signalController.cpp
index e8d231e..b2017fd 100644
--- a/src/signalController.cpp
+++ b/src/signalController.cpp
@@ -58,6 +58,13 @@ SignalController& SignalController::instance()
return *inst;
}
+int SigErrorHandler::handle(const std::string& msg)
+{
+ AnytunError::throwErr() << msg;
+
+ return 0;
+}
+
#ifndef _MSC_VER
int SigIntHandler::handle()
@@ -204,13 +211,15 @@ void SignalController::init()
handler[CTRL_LOGOFF_EVENT] = new CtrlLogoffHandler;
handler[CTRL_SHUTDOWN_EVENT] = new CtrlShutdownHandler;
#endif
+
+ handler[SIGERROR] = new SigErrorHandler;
}
-void SignalController::inject(int sig)
+void SignalController::inject(int sig, const std::string& msg)
{
{
Lock lock(sigQueueMutex);
- sigQueue.push(sig);
+ sigQueue.push(SigPair(sig, msg));
}
sigQueueSem.up();
}
@@ -219,22 +228,27 @@ int SignalController::run()
{
while(1) {
sigQueueSem.down();
- int sigNum;
+ SigPair sig;
{
Lock lock(sigQueueMutex);
- sigNum = sigQueue.front();
+ sig = sigQueue.front();
sigQueue.pop();
}
- HandlerMap::iterator it = handler.find(sigNum);
+ HandlerMap::iterator it = handler.find(sig.first);
if(it != handler.end())
{
- int ret = it->second->handle();
+ int ret;
+ if(sig.second == "")
+ ret = it->second->handle();
+ else
+ ret = it->second->handle(sig.second);
+
if(ret)
return ret;
}
else
- cLog.msg(Log::PRIO_NOTICE) << "SIG " << sigNum << " caught - ignoring";
+ cLog.msg(Log::PRIO_NOTICE) << "SIG " << sig.first << " caught with message '" << sig.second << "'- ignoring";
}
return 0;
}