///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2018- Equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #pragma once #include #include #include //================================================================================================== // // // //================================================================================================== class RicHoloLensRestResponseHandler { public: virtual void handleSuccessfulCreateSession() = 0; virtual void handleFailedCreateSession() = 0; virtual void handleSuccessfulSendMetaData(int metaDataSequenceNumber, const QByteArray& jsonServerResponseString) = 0; virtual void handleError(const QString& errMsg, const QString& url, const QString& serverData) = 0; }; //================================================================================================== // // // //================================================================================================== class RicHoloLensRestClient : public QObject { Q_OBJECT public: RicHoloLensRestClient(QString serverUrl, QString sessionName, RicHoloLensRestResponseHandler* responseHandler); void clearResponseHandler(); void dbgDisableCertificateVerification(); void createSession(const QByteArray& sessionPinCode); void deleteSession(); void sendMetaData(int metaDataSequenceNumber, const QString& jsonMetaDataString); void sendBinaryData(const QByteArray& binaryDataArr); private: void addBearerAuthenticationHeaderToRequest(QNetworkRequest* request) const; bool detectAndHandleErrorReply(QString operationName, QNetworkReply* reply); static QString networkErrorCodeAsString(QNetworkReply::NetworkError nwErr); static qint64 getCurrentTimeStamp_ms(); private slots: void slotCreateSessionFinished(); void slotDeleteSessionFinished(); void slotSendMetaDataFinished(); void slotSendBinaryDataFinished(); void slotDbgUploadProgress(qint64 bytesSent, qint64 bytesTotal); void slotSslErrors(const QList& errors); private: QNetworkAccessManager m_accessManager; QString m_serverUrl; QString m_sessionName; RicHoloLensRestResponseHandler* m_responseHandler; bool m_dbgDisableCertificateVerification; // Debug option to disable certificate verification. Needed in order to work with self-signed certifiactes QByteArray m_bearerToken; };