summaryrefslogtreecommitdiffstats
path: root/src/input/pvsPrivInputHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/pvsPrivInputHandler.cpp')
-rw-r--r--src/input/pvsPrivInputHandler.cpp30
1 files changed, 23 insertions, 7 deletions
diff --git a/src/input/pvsPrivInputHandler.cpp b/src/input/pvsPrivInputHandler.cpp
index 70ed1bc..d33697a 100644
--- a/src/input/pvsPrivInputHandler.cpp
+++ b/src/input/pvsPrivInputHandler.cpp
@@ -21,7 +21,7 @@
#include <QtDebug>
#include <QSocketNotifier>
#include "inputEvent.h"
-#include "inputEventHandler.h"
+#include "inputHandlerChains.h"
#include "pvsPrivInputSocket.h"
#include "pvsPrivInputHandler.h"
@@ -35,17 +35,17 @@ public:
{
}
- pid_t getSenderPid() const
+ pid_t senderPid() const
{
return _pid;
}
- uid_t getSenderUid() const
+ uid_t senderUid() const
{
return _uid;
}
- gid_t getSenderGid() const
+ gid_t senderGid() const
{
return _gid;
}
@@ -63,6 +63,7 @@ PVSPrivInputHandler::PVSPrivInputHandler(int fd, QObject* parent) :
_notifier = new QSocketNotifier(fd, QSocketNotifier::Read, this);
_notifier->setEnabled(true);
connect(_notifier, SIGNAL(activated(int)), this, SLOT(canRead()));
+ _handlerChain = makePrivilegedInputEventHandlerChain();
}
PVSPrivInputHandler::~PVSPrivInputHandler()
@@ -85,9 +86,24 @@ void PVSPrivInputHandler::canRead()
if(!pvsPrivInputRecvMessage(_fd, _messageAssembly.data(), siz, pid, uid, gid, &err))
{
- close(_fd);
- deleteLater();
- return;
+ switch(err)
+ {
+ case EAGAIN:
+#if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN)
+ case EWOULDBLOCK:
+#endif
+ // That's okay. Nothing to do.
+ break;
+ case 0:
+ // We'll survive. There was no actual error, just the library routine
+ // that decided it did not really want to receive that packet.
+ break;
+ default:
+ qWarning("Something bad just happened, and cannot handle it. Panicking.");
+ close(_fd);
+ deleteLater();
+ return;
+ }
}
else
{