From 7ebe6bb0ea91e60dbc0a81854a8541135071d247 Mon Sep 17 00:00:00 2001 From: Filip Bucek Date: Wed, 6 Nov 2019 16:59:06 +0100 Subject: [PATCH] WIP: adding SoapRequests --- src/serversdk/request.cpp | 10 ++++++ src/serversdk/request.h | 8 ++++- src/serversdk/serversdk.pri | 2 ++ src/serversdk/soaprequest.cpp | 63 +++++++++++++++++++++++++++++++++++ src/serversdk/soaprequest.h | 24 +++++++++++++ 5 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/serversdk/soaprequest.cpp create mode 100644 src/serversdk/soaprequest.h diff --git a/src/serversdk/request.cpp b/src/serversdk/request.cpp index b9a6527..d7aee76 100644 --- a/src/serversdk/request.cpp +++ b/src/serversdk/request.cpp @@ -39,6 +39,16 @@ void Request::appendData(const QByteArray &array) mResponseData += array; } +QString Request::url() const +{ + return mUrl; +} + +void Request::setUrl(const QString &url) +{ + mUrl = url; +} + QByteArray Request::responseData() const { return mResponseData; diff --git a/src/serversdk/request.h b/src/serversdk/request.h index 5e77961..d44b752 100644 --- a/src/serversdk/request.h +++ b/src/serversdk/request.h @@ -13,13 +13,18 @@ public: Request() = default; ~Request() override; Request(QString type, QString url, QByteArray responseData = QByteArray()); - QNetworkRequest networkRequest() const; + virtual QNetworkRequest networkRequest() const; // Data handling data QByteArray requestData() const; void setRequestData(const QByteArray &requestData); QByteArray responseData() const; + // Attributes + QString url() const; + void setUrl(const QString &url); + + // Authorization QString userName() const; @@ -33,6 +38,7 @@ public: QString basicAuthorization() const; QString bearerAuthorization() const; + private: // Data handling void appendData(const QByteArray &array); diff --git a/src/serversdk/serversdk.pri b/src/serversdk/serversdk.pri index 691ecee..214cf89 100644 --- a/src/serversdk/serversdk.pri +++ b/src/serversdk/serversdk.pri @@ -8,6 +8,7 @@ SOURCES += \ $$PWD/loggermessage.cpp \ $$PWD/requestmanager.cpp \ $$PWD/request.cpp \ + $$PWD/soaprequest.cpp HEADERS += \ $$PWD/core.h \ @@ -16,6 +17,7 @@ HEADERS += \ $$PWD/loggermessage.h \ $$PWD/requestmanager.h \ $$PWD/request.h \ + $$PWD/soaprequest.h # TODO: implement zlib compression # include (zlib.pri) diff --git a/src/serversdk/soaprequest.cpp b/src/serversdk/soaprequest.cpp new file mode 100644 index 0000000..77606fd --- /dev/null +++ b/src/serversdk/soaprequest.cpp @@ -0,0 +1,63 @@ +#include "soaprequest.h" + +namespace serversdk { + +SoapRequest::SoapRequest(QString action, QString endpoint, QByteArray data) + : mSoapAction(action) +{ + setUrl(endpoint); + setRequestData(data); +} + +QNetworkRequest SoapRequest::networkRequest() const +{ + Q_ASSERT(!this->url().isEmpty()); + QNetworkRequest request(QUrl(this->url())); + + // Have to set header + QString header; + + if (isSoapVersion12()) { + // qCDebug(soap) << "SOAP version: 1.2"; + header = QString("application/soap+xml;charset=UTF-8;action=%2").arg(soapAction()); + request.setRawHeader("Content-Type", header.toUtf8()); + } else { + // qCDebug(soap) << "SOAP version: 1.1"; + request.setRawHeader("Content-Type", "text/xml"); + request.setRawHeader("SoapAction", soapAction().toUtf8()); + } + + if ( !userName().isEmpty() && !password().isEmpty() ) + request.setRawHeader("Authorization", this->basicAuthorization().toUtf8()); + // Enabled compression + request.setRawHeader("Accept-Encoding", "gzip, deflate"); + + // Enabling HTTP/2 ( not supported on Ubuntu 16.04 ) + // request.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, true); + + return request; +} + +QString SoapRequest::soapAction() const +{ + return mSoapAction; +} + +void SoapRequest::setSoapAction(const QString &soapAction) +{ + mSoapAction = soapAction; +} + +bool SoapRequest::isSoapVersion12() const +{ + return mSoapVersion12; +} + +void SoapRequest::setSoapVersion12(bool soapVersion12) +{ + mSoapVersion12 = soapVersion12; +} + + + +} // namespace serversdk diff --git a/src/serversdk/soaprequest.h b/src/serversdk/soaprequest.h new file mode 100644 index 0000000..2c8617c --- /dev/null +++ b/src/serversdk/soaprequest.h @@ -0,0 +1,24 @@ +#pragma once + +#include "request.h" + +namespace serversdk { + +class SoapRequest : public Request +{ +public: + SoapRequest(QString action, QString endpoint, QByteArray data); + QNetworkRequest networkRequest() const override; + + QString soapAction() const; + void setSoapAction(const QString &soapAction); + bool isSoapVersion12() const; + void setSoapVersion12(bool isSoapVersion12); + +private: + QString mSoapAction; + bool mSoapVersion12 = false; +}; + +} // namespace serversdk +