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