AusweisApp2/src/network/NetworkManager.h

104 lines
2.7 KiB
C
Raw Normal View History

2017-07-03 09:30:10 +02:00
/*
* \brief Wrapper around QNetworkAccessManager
*
2019-05-22 10:08:38 +02:00
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
2017-07-03 09:30:10 +02:00
*/
#pragma once
2019-01-03 15:06:22 +01:00
#include "Env.h"
2017-07-03 09:33:28 +02:00
#include "GlobalStatus.h"
2017-07-03 09:30:10 +02:00
#include <QAtomicInt>
#include <QAuthenticator>
#include <QDebug>
2019-01-03 15:06:22 +01:00
#include <QMessageLogger>
#include <QMutex>
2017-07-03 09:30:10 +02:00
#include <QNetworkAccessManager>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QSsl>
namespace governikus
{
class NetworkManager
: public QObject
{
Q_OBJECT
2019-01-03 15:06:22 +01:00
friend class Env;
2017-07-03 09:30:10 +02:00
private:
bool mApplicationExitInProgress;
2019-01-03 15:06:22 +01:00
QMutex mTrackedConnectionsMutex;
QSet<QNetworkReply*> mTrackedConnections;
2017-07-03 09:30:10 +02:00
void trackConnection(QNetworkReply* pResponse, const int pTimeoutInMilliSeconds);
2019-01-03 15:06:22 +01:00
void addTrackedConnection(QNetworkReply* pResponse);
void removeTrackedConnection(QNetworkReply* pResponse);
2017-07-03 09:30:10 +02:00
static bool mLockProxy;
QScopedPointer<QNetworkAccessManager, QScopedPointerDeleteLater> mNetAccessManager;
QString getUserAgentHeader() const;
public Q_SLOTS:
void onShutdown();
2017-12-20 14:54:05 +01:00
protected:
NetworkManager();
virtual ~NetworkManager();
2019-01-03 15:06:22 +01:00
static NetworkManager& getInstance();
2017-12-20 14:54:05 +01:00
2017-07-03 09:30:10 +02:00
public:
2017-07-03 09:33:28 +02:00
enum class NetworkError
{
2017-12-20 14:54:05 +01:00
ServiceUnavailable,
2017-07-03 09:33:28 +02:00
TimeOut,
ProxyError,
2019-09-30 17:22:19 +02:00
SecurityError,
2017-07-03 09:33:28 +02:00
OtherError,
};
Q_ENUM(NetworkError)
static void setApplicationProxyFactory();
2017-07-03 09:30:10 +02:00
static void lockProxy(bool pLocked)
{
mLockProxy = pLocked;
}
2019-01-03 15:06:22 +01:00
static int getLoggedStatusCode(const QNetworkReply* const pReply, const QMessageLogger& pLogger);
2017-07-03 09:33:28 +02:00
static NetworkError toNetworkError(const QNetworkReply* const pNetworkReply);
static GlobalStatus toTrustedChannelStatus(const QNetworkReply* const pNetworkReply);
static GlobalStatus toStatus(const QNetworkReply* const pNetworkReply);
2017-07-03 09:30:10 +02:00
static QString getTlsVersionString(QSsl::SslProtocol pProtocol);
2019-01-03 15:06:22 +01:00
static QByteArray getStatusMessage(int pStatus);
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
virtual void clearConnections();
2018-03-28 15:10:51 +02:00
virtual QNetworkReply* paos(QNetworkRequest& pRequest,
const QByteArray& pNamespace,
const QByteArray& pData,
bool pUsePsk = true,
const QByteArray& pSslSession = QByteArray(),
int pTimeoutInMilliSeconds = 30000);
virtual QNetworkReply* get(QNetworkRequest& pRequest,
const QByteArray& pSslSession = QByteArray(),
int pTimeoutInMilliSeconds = 30000);
2017-07-03 09:30:10 +02:00
2019-09-30 17:22:19 +02:00
virtual QNetworkReply* post(QNetworkRequest& pRequest,
2019-01-03 15:06:22 +01:00
const QByteArray& pData,
int pTimeoutInMilliSeconds = 30000);
2017-12-20 14:54:05 +01:00
virtual bool checkUpdateServerCertificate(const QNetworkReply& pReply);
int getOpenConnectionCount();
2017-07-03 09:30:10 +02:00
Q_SIGNALS:
void fireProxyAuthenticationRequired(const QNetworkProxy& pProxy, QAuthenticator* pAuthenticator);
void fireShutdown();
};
2019-01-03 15:06:22 +01:00
} // namespace governikus
2017-07-03 09:30:10 +02:00
QDebug operator <<(QDebug pDbg, QSsl::SslProtocol pProtocol);