AusweisApp
Lade ...
Suche ...
Keine Treffer
SignalHandler.h
gehe zur Dokumentation dieser Datei
1
5/*
6 * \brief Implements signal handler for unix and windows.
7 */
8
9#pragma once
10
11#include "Env.h"
12
13#include <QObject>
14#include <functional>
15
16#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
17 #include <QSocketNotifier>
18 #include <csignal>
19#elif defined(Q_OS_WIN)
20 #include <QReadWriteLock>
21 #include <windows.h>
22#endif
23
24namespace governikus
25{
26
28 : public QObject
29 , private Env::ThreadSafe
30{
31 Q_OBJECT
32
33 Q_DISABLE_COPY(SignalHandler)
34 friend class Env;
35 friend void shutdownApp();
36
37 private:
38 bool mInit;
39 std::function<void()> mController;
40
41#ifdef Q_OS_WIN
42 SERVICE_STATUS_HANDLE mServiceStatusHandle;
43 QReadWriteLock mLock;
44#endif
45
47 ~SignalHandler() override;
48
49#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
50
51 private:
52 QScopedPointer<QSocketNotifier> mSignalSocketNotifier;
53 static int cSignalSocketPair[2];
54
55 void initUnix();
56 static void sigHandler(int pSignal);
57#elif defined(Q_OS_WIN)
58
59 private:
60 static BOOL WINAPI ctrlHandler(DWORD pCtrlType);
61 static VOID WINAPI serviceMain(DWORD pArgc, LPTSTR* pArgv);
62 static VOID WINAPI serviceCtrlHandler(DWORD pCtrlCode);
63 static void registerService();
64 void setServiceStatus(DWORD pCurrentState);
65#endif
66
67 private Q_SLOTS:
68 void onSignalSocketActivated();
69#if defined(Q_OS_WIN)
70 void quit();
71#else
72 void quit() const;
73#endif
74
75 public:
76 void init();
77 void setController(const std::function<void()>& pController);
78};
79
80} // namespace governikus
Definition Env.h:42
Definition SignalHandler.h:30
void setController(const std::function< void()> &pController)
Definition SignalHandler.cpp:66
void init()
Definition SignalHandler.cpp:46
Implementation of GeneralAuthenticate response APDUs.
Definition CommandApdu.h:17
VOID
Definition MsgTypes.h:22
Definition Env.h:47