AusweisApp2
NetworkManager.h
gehe zur Dokumentation dieser Datei
1 /*
2  * \brief Wrapper around QNetworkAccessManager
3  *
4  * \copyright Copyright (c) 2014-2020 Governikus GmbH & Co. KG, Germany
5  */
6 
7 #pragma once
8 
9 #include "Env.h"
10 #include "GlobalStatus.h"
11 
12 #include <QAtomicInt>
13 #include <QAuthenticator>
14 #include <QDebug>
15 #include <QMessageLogger>
16 #include <QMutex>
17 #include <QNetworkAccessManager>
18 #include <QNetworkProxy>
19 #include <QNetworkReply>
20 #include <QSsl>
21 
22 namespace governikus
23 {
24 
26  : public QObject
27 {
28  Q_OBJECT
29  friend class Env;
30 
31  private:
32  bool mApplicationExitInProgress;
33  QMutex mTrackedConnectionsMutex;
34  QSet<QNetworkReply*> mTrackedConnections;
35  void trackConnection(QNetworkReply* pResponse, const int pTimeoutInMilliSeconds);
36  void addTrackedConnection(QNetworkReply* pResponse);
37  void removeTrackedConnection(QNetworkReply* pResponse);
38 
39  static bool mLockProxy;
40  QScopedPointer<QNetworkAccessManager, QScopedPointerDeleteLater> mNetAccessManager;
41 
42  QString getUserAgentHeader() const;
43 
44  public Q_SLOTS:
45  void onShutdown();
46  void onProxyChanged();
47 
48  protected:
50  virtual ~NetworkManager();
51  static NetworkManager& getInstance();
52 
53  public:
54  enum class NetworkError
55  {
57  TimeOut,
58  ProxyError,
60  OtherError,
61  };
62  Q_ENUM(NetworkError)
63 
64  static void setApplicationProxyFactory();
65  static void lockProxy(bool pLocked)
66  {
67  mLockProxy = pLocked;
68  }
69 
70 
71  static int getLoggedStatusCode(const QNetworkReply* const pReply, const QMessageLogger& pLogger);
72  static NetworkError toNetworkError(const QNetworkReply* const pNetworkReply);
73  static GlobalStatus toTrustedChannelStatus(const QNetworkReply* const pNetworkReply);
74  static GlobalStatus toStatus(const QNetworkReply* const pNetworkReply);
75  static QString getTlsVersionString(QSsl::SslProtocol pProtocol);
76  static QByteArray getStatusMessage(int pStatus);
77 
78  virtual void clearConnections();
79  virtual QNetworkReply* paos(QNetworkRequest& pRequest,
80  const QByteArray& pNamespace,
81  const QByteArray& pData,
82  bool pUsePsk = true,
83  const QByteArray& pSslSession = QByteArray(),
84  int pTimeoutInMilliSeconds = 30000);
85  virtual QNetworkReply* get(QNetworkRequest& pRequest,
86  const QByteArray& pSslSession = QByteArray(),
87  int pTimeoutInMilliSeconds = 30000);
88 
89  virtual QNetworkReply* post(QNetworkRequest& pRequest,
90  const QByteArray& pData,
91  int pTimeoutInMilliSeconds = 30000);
92 
93  virtual bool checkUpdateServerCertificate(const QNetworkReply& pReply);
94 
96 
97  Q_SIGNALS:
98  void fireProxyAuthenticationRequired(const QNetworkProxy& pProxy, QAuthenticator* pAuthenticator);
99  void fireShutdown();
100 };
101 
102 } // namespace governikus
103 
104 QDebug operator <<(QDebug pDbg, QSsl::SslProtocol pProtocol);
governikus::NetworkManager::paos
virtual QNetworkReply * paos(QNetworkRequest &pRequest, const QByteArray &pNamespace, const QByteArray &pData, bool pUsePsk=true, const QByteArray &pSslSession=QByteArray(), int pTimeoutInMilliSeconds=30000)
Definition: NetworkManager.cpp:68
governikus::GeneralSettings::fireProxyChanged
void fireProxyChanged()
Definition: moc_GeneralSettings.cpp:183
governikus::NetworkManager::toNetworkError
static NetworkError toNetworkError(const QNetworkReply *const pNetworkReply)
Definition: NetworkManager.cpp:169
governikus::NetworkManager::toStatus
static GlobalStatus toStatus(const QNetworkReply *const pNetworkReply)
Definition: NetworkManager.cpp:226
VersionInfo.h
governikus::NetworkManager::NetworkManager
NetworkManager()
NetworkReplyTimeout.h
governikus::GlobalStatus::Code::Workflow_TrustedChannel_Other_Network_Error
@ Workflow_TrustedChannel_Other_Network_Error
governikus::NetworkManager::setApplicationProxyFactory
static void setApplicationProxyFactory()
Definition: NetworkManager.cpp:384
governikus::SecureStorage::TlsSuite
TlsSuite
Definition: SecureStorage.h:72
governikus::GlobalStatus::Code::Network_TimeOut
@ Network_TimeOut
AppSettings.h
SecureStorage.h
governikus::NetworkReplyTimeout::setTimeout
static void setTimeout(QNetworkReply *pReply, const int pTimeoutMilliSeconds)
Set the timeout in milli-seconds on the specified QNetworkReply.
Definition: NetworkReplyTimeout.cpp:46
governikus::GlobalStatus::ExternalInformation::LAST_URL
@ LAST_URL
governikus::GlobalStatus::Code::Workflow_TrustedChannel_Establishment_Error
@ Workflow_TrustedChannel_Establishment_Error
governikus::NetworkManager::get
virtual QNetworkReply * get(QNetworkRequest &pRequest, const QByteArray &pSslSession=QByteArray(), int pTimeoutInMilliSeconds=30000)
Definition: NetworkManager.cpp:99
NetworkManager.h
governikus::NetworkManager::NetworkError::SecurityError
@ SecurityError
governikus::Env
Definition: Env.h:39
governikus::NetworkManager::NetworkError::ServiceUnavailable
@ ServiceUnavailable
governikus::GlobalStatus::Code::Unknown_Error
@ Unknown_Error
governikus::VersionInfo::getInstance
static VersionInfo getInstance()
Definition: VersionInfo.cpp:44
governikus::NetworkManager::post
virtual QNetworkReply * post(QNetworkRequest &pRequest, const QByteArray &pData, int pTimeoutInMilliSeconds=30000)
Definition: NetworkManager.cpp:118
governikus::NetworkManager::getOpenConnectionCount
int getOpenConnectionCount()
Definition: NetworkManager.cpp:54
governikus::NetworkManager::checkUpdateServerCertificate
virtual bool checkUpdateServerCertificate(const QNetworkReply &pReply)
Definition: NetworkManager.cpp:139
defineSingleton
#define defineSingleton(className)
Definition: SingletonHelper.h:35
governikus::NetworkManager::NetworkError
NetworkError
Definition: NetworkManager.h:55
governikus::NetworkManager
Definition: NetworkManager.h:27
XX
#define XX(num, name, string)
http_parser.h
GlobalStatus.h
governikus
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:15
governikus::GlobalStatus::Code::Workflow_TrustedChannel_TimeOut
@ Workflow_TrustedChannel_TimeOut
NetworkReplyError.h
governikus::NetworkManager::getStatusMessage
static QByteArray getStatusMessage(int pStatus)
Definition: NetworkManager.cpp:283
governikus::NetworkManager::toTrustedChannelStatus
static GlobalStatus toTrustedChannelStatus(const QNetworkReply *const pNetworkReply)
Definition: NetworkManager.cpp:199
governikus::NetworkManager::onProxyChanged
void onProxyChanged()
Definition: NetworkManager.cpp:163
governikus::SecureStorage::TlsSuite::PSK
@ PSK
Env.h
governikus::NetworkManager::NetworkError::ProxyError
@ ProxyError
governikus::GlobalStatus::Code::Workflow_TrustedChannel_Proxy_Error
@ Workflow_TrustedChannel_Proxy_Error
HTTP_STATUS_MAP
#define HTTP_STATUS_MAP(XX)
Definition: http_parser.h:93
governikus::NetworkManager::~NetworkManager
virtual ~NetworkManager()
Definition: NetworkManager.cpp:43
governikus::NetworkManager::onShutdown
void onShutdown()
Definition: NetworkManager.cpp:156
governikus::GlobalStatus
Definition: GlobalStatus.h:20
governikus::NetworkManager::fireShutdown
void fireShutdown()
Definition: moc_NetworkManager.cpp:195
governikus::GlobalStatus::Code::Network_Ssl_Establishment_Error
@ Network_Ssl_Establishment_Error
governikus::SecureStorage::TlsSuite::DEFAULT
@ DEFAULT
governikus::NetworkManager::fireProxyAuthenticationRequired
void fireProxyAuthenticationRequired(const QNetworkProxy &pProxy, QAuthenticator *pAuthenticator)
Definition: moc_NetworkManager.cpp:188
governikus::GlobalStatus::Code::Workflow_TrustedChannel_ServiceUnavailable
@ Workflow_TrustedChannel_ServiceUnavailable
governikus::GlobalStatus::Code::Network_Proxy_Error
@ Network_Proxy_Error
governikus::NetworkManager::NetworkError::TimeOut
@ TimeOut
governikus::NetworkManager::getLoggedStatusCode
static int getLoggedStatusCode(const QNetworkReply *const pReply, const QMessageLogger &pLogger)
Definition: NetworkManager.cpp:298
governikus::GlobalStatus::Code::Network_ServiceUnavailable
@ Network_ServiceUnavailable
governikus::NetworkManager::getInstance
static NetworkManager & getInstance()
Definition: NetworkManager.cpp:48
governikus::NetworkManager::clearConnections
virtual void clearConnections()
Definition: NetworkManager.cpp:62
governikus::GlobalStatus::Code::Network_Other_Error
@ Network_Other_Error
governikus::NetworkReplyError
Definition: NetworkReplyError.h:14
governikus::NetworkManager::getTlsVersionString
static QString getTlsVersionString(QSsl::SslProtocol pProtocol)
SingletonHelper.h
governikus::NetworkManager::lockProxy
static void lockProxy(bool pLocked)
Definition: NetworkManager.h:65
governikus::NetworkManager::NetworkError::OtherError
@ OtherError
operator<<
QDebug operator<<(QDebug pDbg, QSsl::SslProtocol pProtocol)
governikus::GlobalStatus::ExternalInfoMap
QMap< ExternalInformation, QString > ExternalInfoMap
Definition: GlobalStatus.h:134