mirror of
https://gitee.com/drabel/LibQQt.git
synced 2025-01-04 10:18:44 +08:00
add QtSoap
This commit is contained in:
parent
fb822037d7
commit
16fb0b6412
4
QQt.pro
4
QQt.pro
@ -2,7 +2,8 @@ TEMPLATE = subdirs
|
||||
CONFIG += ordered
|
||||
|
||||
SUBDIRS = src/qqt.pro \
|
||||
examples/qqtframe3
|
||||
examples/qqtframe3 \
|
||||
examples/soapQQtOnline
|
||||
SUBDIRS += examples/framelesshelperwidget
|
||||
SUBDIRS += examples/qqtframe
|
||||
SUBDIRS += examples/qqtframe2
|
||||
@ -13,6 +14,7 @@ SUBDIRS += examples/exquisite
|
||||
SUBDIRS += examples/QtBuildTool
|
||||
SUBDIRS += examples/QtSdkManager
|
||||
SUBDIRS += examples/QQtInstaller
|
||||
SUBDIRS += examples/easter
|
||||
|
||||
#need bluetooth library
|
||||
#SUBDIRS += examples/qqtbluetoothfiletransferserver
|
||||
|
78
examples/easter/easter.cpp
Normal file
78
examples/easter/easter.cpp
Normal file
@ -0,0 +1,78 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the Qt Solutions component.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** You may use this file under the terms of the BSD license as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||
** of its contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QLocale>
|
||||
#include "easter.h"
|
||||
|
||||
Easter::Easter(short year, QObject *parent)
|
||||
: QObject(parent), http(this)
|
||||
{
|
||||
connect(&http, SIGNAL(responseReady(const QtSoapMessage &)),
|
||||
this, SLOT(getResponse(const QtSoapMessage &)));
|
||||
|
||||
QtSoapMessage request;
|
||||
request.setMethod("GetEaster",
|
||||
"http://www.27seconds.com/Holidays/US/Dates/");
|
||||
request.addMethodArgument("year", "", year);
|
||||
|
||||
http.setHost("www.27seconds.com");
|
||||
http.setAction("http://www.27seconds.com/Holidays/US/Dates/GetEaster");
|
||||
http.submitRequest(request, "/Holidays/US/Dates/USHolidayDates.asmx");
|
||||
|
||||
qDebug("Looking up the date of easter in %i...", year);
|
||||
this->year = year;
|
||||
}
|
||||
|
||||
void Easter::getResponse(const QtSoapMessage &message)
|
||||
{
|
||||
if (message.isFault()) {
|
||||
qDebug("Error: %s", qPrintable(message.faultString().toString()));
|
||||
}
|
||||
else {
|
||||
QString res = message.returnValue().toString();
|
||||
QDateTime dt = QDateTime::fromString(res, Qt::ISODate);
|
||||
if (dt.isValid())
|
||||
res = QLocale::c().toString(dt.date());
|
||||
|
||||
qDebug("Easter is: %s", res.toLatin1().constData());
|
||||
}
|
||||
QCoreApplication::quit();
|
||||
}
|
59
examples/easter/easter.h
Normal file
59
examples/easter/easter.h
Normal file
@ -0,0 +1,59 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the Qt Solutions component.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** You may use this file under the terms of the BSD license as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||
** of its contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef EASTER_H
|
||||
#define EASTER_H
|
||||
#include <qtsoap.h>
|
||||
|
||||
class Easter : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Easter(short year, QObject *parent = 0);
|
||||
|
||||
private slots:
|
||||
void getResponse(const QtSoapMessage &);
|
||||
|
||||
private:
|
||||
QtSoapHttpTransport http;
|
||||
int year;
|
||||
};
|
||||
|
||||
#endif
|
19
examples/easter/easter.pro
Normal file
19
examples/easter/easter.pro
Normal file
@ -0,0 +1,19 @@
|
||||
#include QQt's header (add QQt header to includepath)
|
||||
include(../../src/qqt_header.pri)
|
||||
|
||||
#CONFIG += BUILD_SRC
|
||||
contains (CONFIG, BUILD_SRC) {
|
||||
#if you want to build src but not link QQt in this project
|
||||
#include(../../src/qqt.pri)
|
||||
} else {
|
||||
#if you want to link QQt library
|
||||
include(../qqt_library.pri)
|
||||
}
|
||||
|
||||
TEMPLATE = app
|
||||
INCLUDEPATH += .
|
||||
CONFIG += console
|
||||
|
||||
# Input
|
||||
HEADERS += easter.h
|
||||
SOURCES += main.cpp easter.cpp
|
67
examples/easter/main.cpp
Normal file
67
examples/easter/main.cpp
Normal file
@ -0,0 +1,67 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the Qt Solutions component.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** You may use this file under the terms of the BSD license as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||
** of its contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
This example shows QtSoap with a SOAP::Lite web service.
|
||||
|
||||
Returns the date of easter in a given year.
|
||||
*/
|
||||
#include <QCoreApplication>
|
||||
#include <QFile>
|
||||
#include <stdlib.h>
|
||||
#include "easter.h"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (argc < 2) {
|
||||
qDebug("XMethods' interface to Easter Dates with a SOAP::Lite service.");
|
||||
qDebug("usage: %s <year>", argv[0]);
|
||||
qDebug(" ");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
QCoreApplication app(argc, argv);
|
||||
|
||||
Easter easter(atoi(argv[1]), 0);
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
|
11
examples/soapQQtOnline/main.cpp
Normal file
11
examples/soapQQtOnline/main.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "mainwindow.h"
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
MainWindow w;
|
||||
w.show();
|
||||
|
||||
return a.exec();
|
||||
}
|
97
examples/soapQQtOnline/mainwindow.cpp
Normal file
97
examples/soapQQtOnline/mainwindow.cpp
Normal file
@ -0,0 +1,97 @@
|
||||
#include "mainwindow.h"
|
||||
|
||||
MainWindow::MainWindow(QWidget* parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
// 构建控件
|
||||
m_pQQLabel = new QLabel(this);
|
||||
m_pStateLabel = new QLabel(this);
|
||||
m_pQQLineEdit = new QLineEdit(this);
|
||||
m_pStateLineEdit = new QLineEdit(this);
|
||||
m_pSubmitButton = new QPushButton(this);
|
||||
|
||||
m_pStateLineEdit->setReadOnly(true);
|
||||
m_pQQLabel->setText(QString::fromLocal8Bit("QQ号码:"));
|
||||
m_pStateLabel->setText(QString::fromLocal8Bit("QQ状态:"));
|
||||
m_pSubmitButton->setText(QString::fromLocal8Bit("提交"));
|
||||
|
||||
QGridLayout* pLayout = new QGridLayout();
|
||||
pLayout->addWidget(m_pQQLabel, 0, 0);
|
||||
pLayout->addWidget(m_pQQLineEdit, 0, 1);
|
||||
pLayout->addWidget(m_pStateLabel, 1, 0);
|
||||
pLayout->addWidget(m_pStateLineEdit, 1, 1);
|
||||
pLayout->addWidget(m_pSubmitButton, 2, 1, 1, 1, Qt::AlignRight);
|
||||
pLayout->setSpacing(10);
|
||||
pLayout->setContentsMargins(10, 10, 10, 10);
|
||||
setLayout(pLayout);
|
||||
|
||||
// 连接信号槽
|
||||
m_pHttp = new QtSoapHttpTransport(this);
|
||||
connect(m_pSubmitButton, SIGNAL(clicked()), this, SLOT(onSubmit()));
|
||||
connect(m_pHttp, SIGNAL(responseReady(const QtSoapMessage&)), this, SLOT(onResponse(const QtSoapMessage&)));
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// 提交请求
|
||||
void MainWindow::onSubmit()
|
||||
{
|
||||
QtSoapMessage message;
|
||||
|
||||
// 设置方法
|
||||
message.setMethod("qqCheckOnline", "http://WebXml.com.cn/");
|
||||
|
||||
// 设置动作
|
||||
m_pHttp->setAction("http://WebXml.com.cn/qqCheckOnline");
|
||||
|
||||
// 设置主机
|
||||
m_pHttp->setHost("www.webxml.com.cn");
|
||||
|
||||
// 添加方法参数
|
||||
QString strQQ = m_pQQLineEdit->text();
|
||||
message.addMethodArgument("qqCode", "", strQQ);
|
||||
QString strXML = message.toXmlString();
|
||||
|
||||
// 提交请求
|
||||
m_pHttp->submitRequest(message, "/webservices/qqOnlineWebService.asmx");
|
||||
}
|
||||
|
||||
void MainWindow::onResponse(const QtSoapMessage& response)
|
||||
{
|
||||
QString strXML = response.toXmlString();
|
||||
QDomDocument doc;
|
||||
doc.setContent(strXML);
|
||||
|
||||
// 接在在线状态
|
||||
QDomNodeList nodeList = doc.elementsByTagName("qqCheckOnlineResult");
|
||||
if (!nodeList.isEmpty())
|
||||
{
|
||||
QDomNode node = nodeList.at(0);
|
||||
QString strResult = node.toElement().text();
|
||||
QString strState("N/A");
|
||||
if (QString::compare(strResult, "Y") == 0)
|
||||
{
|
||||
strState = QString::fromLocal8Bit("在线");
|
||||
}
|
||||
else if (QString::compare(strResult, "N") == 0)
|
||||
{
|
||||
strState = QString::fromLocal8Bit("离线");
|
||||
}
|
||||
else if (QString::compare(strResult, "E") == 0)
|
||||
{
|
||||
strState = QString::fromLocal8Bit("QQ号码错误");
|
||||
}
|
||||
else if (QString::compare(strResult, "A") == 0)
|
||||
{
|
||||
strState = QString::fromLocal8Bit("商业用户验证失败");
|
||||
}
|
||||
else if (QString::compare(strResult, "V") == 0)
|
||||
{
|
||||
strState = QString::fromLocal8Bit("免费用户超过数量");
|
||||
}
|
||||
m_pStateLineEdit->setText(strState);
|
||||
}
|
||||
}
|
29
examples/soapQQtOnline/mainwindow.h
Normal file
29
examples/soapQQtOnline/mainwindow.h
Normal file
@ -0,0 +1,29 @@
|
||||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <qtsoap.h>
|
||||
#include <qqt-qt.h>
|
||||
|
||||
class MainWindow : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MainWindow(QWidget* parent = 0);
|
||||
~MainWindow();
|
||||
|
||||
private slots:
|
||||
void onResponse(const QtSoapMessage&);
|
||||
void onSubmit();
|
||||
|
||||
private:
|
||||
QtSoapHttpTransport* m_pHttp;
|
||||
QLabel* m_pQQLabel;
|
||||
QLabel* m_pStateLabel ;
|
||||
QLineEdit* m_pQQLineEdit ;
|
||||
QLineEdit* m_pStateLineEdit;
|
||||
QPushButton* m_pSubmitButton ;
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
46
examples/soapQQtOnline/soapQQtOnline.pro
Normal file
46
examples/soapQQtOnline/soapQQtOnline.pro
Normal file
@ -0,0 +1,46 @@
|
||||
#-------------------------------------------------
|
||||
#
|
||||
# Project created by QtCreator 2017-10-27T20:06:56
|
||||
#
|
||||
#-------------------------------------------------
|
||||
#include QQt's header (add QQt header to includepath)
|
||||
include(../../src/qqt_header.pri)
|
||||
|
||||
#CONFIG += BUILD_SRC
|
||||
contains (CONFIG, BUILD_SRC) {
|
||||
#if you want to build src but not link QQt in this project
|
||||
#include(../../src/qqt.pri)
|
||||
} else {
|
||||
#if you want to link QQt library
|
||||
include(../qqt_library.pri)
|
||||
}
|
||||
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
TARGET = soapQQtOnline
|
||||
TEMPLATE = app
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any feature of Qt which has been marked as deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
# You can also make your code fail to compile if you use deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
|
||||
SOURCES += \
|
||||
main.cpp \
|
||||
mainwindow.cpp
|
||||
|
||||
HEADERS += \
|
||||
mainwindow.h
|
||||
|
||||
CONFIG += mobility
|
||||
MOBILITY =
|
||||
|
@ -249,6 +249,8 @@ equals(QKIT_, macOS):DEFINES += __WEBSOCKETSUPPORT__
|
||||
contains (DEFINES, __WEBSOCKETSUPPORT__) {
|
||||
#QSslError not found, you need recompiler Qt4
|
||||
#TODO: QT += webkit
|
||||
#if you use QtSoap, open this annotation
|
||||
DEFINES += __QTSOAP__
|
||||
}
|
||||
|
||||
##################################################################
|
||||
@ -295,3 +297,4 @@ INCLUDEPATH += $$PWD/widgets
|
||||
INCLUDEPATH += $$PWD/exquisite
|
||||
# c support
|
||||
INCLUDEPATH += $$PWD/qrencode
|
||||
INCLUDEPATH += $$PWD/soap
|
||||
|
@ -348,4 +348,13 @@ contains (DEFINES, __WEBSOCKETSUPPORT__) {
|
||||
$$PWD/network/qqtftpprotocol.h \
|
||||
$$PWD/network/qqthttpprotocol.h \
|
||||
$$PWD/network/qqtwebprotocol.h
|
||||
contains(DEFINES, __QTSOAP__) {
|
||||
contains (DEFINES, QQT_LIBRARY) {
|
||||
DEFINES += QT_QTSOAP_LIBRARY
|
||||
}
|
||||
SOURCES += \
|
||||
$$PWD/soap/qtsoap.cpp
|
||||
HEADERS += \
|
||||
$$PWD/soap/qtsoap.h
|
||||
}
|
||||
}
|
||||
|
1
src/soap/QtSoapArray
Normal file
1
src/soap/QtSoapArray
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapArrayIterator
Normal file
1
src/soap/QtSoapArrayIterator
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapHttpTransport
Normal file
1
src/soap/QtSoapHttpTransport
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapMessage
Normal file
1
src/soap/QtSoapMessage
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapNamespaces
Normal file
1
src/soap/QtSoapNamespaces
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapQName
Normal file
1
src/soap/QtSoapQName
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapSimpleType
Normal file
1
src/soap/QtSoapSimpleType
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapStruct
Normal file
1
src/soap/QtSoapStruct
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapStructIterator
Normal file
1
src/soap/QtSoapStructIterator
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapType
Normal file
1
src/soap/QtSoapType
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapTypeConstructor
Normal file
1
src/soap/QtSoapTypeConstructor
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapTypeConstructorBase
Normal file
1
src/soap/QtSoapTypeConstructorBase
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
1
src/soap/QtSoapTypeFactory
Normal file
1
src/soap/QtSoapTypeFactory
Normal file
@ -0,0 +1 @@
|
||||
#include "qtsoap.h"
|
3389
src/soap/qtsoap.cpp
Normal file
3389
src/soap/qtsoap.cpp
Normal file
File diff suppressed because it is too large
Load Diff
606
src/soap/qtsoap.h
Normal file
606
src/soap/qtsoap.h
Normal file
@ -0,0 +1,606 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the Qt Solutions component.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** You may use this file under the terms of the BSD license as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
||||
** of its contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QTSOAP_H
|
||||
#define QTSOAP_H
|
||||
#include <QString>
|
||||
#include <QVariant>
|
||||
#include <QtXml>
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QUrl>
|
||||
#include <QHash>
|
||||
#include <QLinkedList>
|
||||
#include <QPointer>
|
||||
|
||||
|
||||
#if defined(QT_QTSOAP_LIBRARY)
|
||||
# define QT_QTSOAP_EXPORT Q_DECL_EXPORT
|
||||
#else
|
||||
# define QT_QTSOAP_EXPORT Q_DECL_IMPORT
|
||||
#endif
|
||||
|
||||
#define SOAPv11_ENVELOPE "http://schemas.xmlsoap.org/soap/envelope/"
|
||||
#define SOAPv11_ENCODING "http://schemas.xmlsoap.org/soap/encoding/"
|
||||
#define SOAPv11_ACTORNEXT "http://schemas.xmlsoap.org/soap/actor/next"
|
||||
|
||||
#define XML_SCHEMA "http://www.w3.org/1999/XMLSchema"
|
||||
#define XML_SCHEMA_INSTANCE "http://www.w3.org/1999/XMLSchema-instance"
|
||||
#define XML_NAMESPACE "http://www.w3.org/XML/1998/namespace"
|
||||
|
||||
template <class T>
|
||||
class QtSmartPtr
|
||||
{
|
||||
public:
|
||||
inline QtSmartPtr(T* data = 0)
|
||||
{
|
||||
d = data;
|
||||
r = new int;
|
||||
*r = 1;
|
||||
}
|
||||
|
||||
inline QtSmartPtr(const QtSmartPtr& copy)
|
||||
{
|
||||
if (*copy.r != 0)
|
||||
++(*copy.r);
|
||||
|
||||
r = copy.r;
|
||||
d = copy.d;
|
||||
}
|
||||
|
||||
inline ~QtSmartPtr()
|
||||
{
|
||||
if ((*r) == 0)
|
||||
delete r;
|
||||
else if ((*r) != 0 && --(*r) == 0)
|
||||
{
|
||||
delete r;
|
||||
if (d)
|
||||
delete d;
|
||||
}
|
||||
}
|
||||
|
||||
inline QtSmartPtr& operator =(const QtSmartPtr& copy)
|
||||
{
|
||||
if (*copy.r != 0)
|
||||
++(*copy.r);
|
||||
|
||||
if ((*r) == 0)
|
||||
delete r;
|
||||
else if ((*r) != 0 && --(*r) == 0)
|
||||
{
|
||||
delete r;
|
||||
if (d)
|
||||
delete d;
|
||||
}
|
||||
|
||||
r = copy.r;
|
||||
d = copy.d;
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline T& operator *() const
|
||||
{
|
||||
return *d;
|
||||
}
|
||||
|
||||
inline T* operator ->() const
|
||||
{
|
||||
return d;
|
||||
}
|
||||
|
||||
inline T* ptr() const
|
||||
{
|
||||
return d;
|
||||
}
|
||||
|
||||
inline T& ref() const
|
||||
{
|
||||
return *d;
|
||||
}
|
||||
|
||||
inline T* releasedPtr() const
|
||||
{
|
||||
(*r) = 0;
|
||||
return d;
|
||||
}
|
||||
|
||||
inline bool isNull() const
|
||||
{
|
||||
return d == 0;
|
||||
}
|
||||
|
||||
private:
|
||||
int* r;
|
||||
T* d;
|
||||
};
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapQName
|
||||
{
|
||||
public:
|
||||
QtSoapQName(const QString& name = QString::null, const QString& uri = QString::null);
|
||||
~QtSoapQName();
|
||||
|
||||
QtSoapQName& operator =(const QString& s);
|
||||
|
||||
QString name() const;
|
||||
QString uri() const;
|
||||
|
||||
private:
|
||||
QString n;
|
||||
QString nuri;
|
||||
};
|
||||
|
||||
bool operator ==(const QtSoapQName& n1, const QtSoapQName& n2);
|
||||
bool operator <(const QtSoapQName& n1, const QtSoapQName& n2);
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapType
|
||||
{
|
||||
public:
|
||||
enum Type
|
||||
{
|
||||
Duration, DateTime, Time, Date, GYearMonth, GYear, GMonthDay,
|
||||
GDay, GMonth, Boolean, Base64Binary, HexBinary, Float, Double,
|
||||
AnyURI, QName, NOTATION, String, NormalizedString, Token, Language,
|
||||
Name, NMTOKEN, NCName, ID, IDREF, ENTITY, Decimal, Integer,
|
||||
NonPositiveInteger, NegativeInteger, Long, Int, Short,
|
||||
Byte, NonNegativeInteger, UnsignedLong, PositiveInteger,
|
||||
UnsignedInt, UnsignedShort, UnsignedByte,
|
||||
Array, Struct, Other
|
||||
};
|
||||
|
||||
QtSoapType();
|
||||
QtSoapType(const QtSoapQName& name, Type t = Other);
|
||||
QtSoapType(const QtSoapType& copy);
|
||||
QtSoapType& operator =(const QtSoapType& copy);
|
||||
virtual ~QtSoapType();
|
||||
|
||||
virtual void clear();
|
||||
|
||||
virtual bool parse(QDomNode);
|
||||
virtual bool isValid() const;
|
||||
|
||||
virtual int count() const;
|
||||
virtual QVariant value() const;
|
||||
|
||||
virtual QtSoapType& operator [](int);
|
||||
virtual QtSoapType& operator [](const QtSoapQName& s);
|
||||
virtual QtSoapType& operator [](const QString& name);
|
||||
|
||||
virtual const QtSoapType& operator [](int) const;
|
||||
virtual const QtSoapType& operator [](const QtSoapQName& s) const;
|
||||
virtual const QtSoapType& operator [](const QString& name) const;
|
||||
|
||||
virtual QDomElement toDomElement(QDomDocument) const;
|
||||
|
||||
virtual Type type() const;
|
||||
virtual QString id() const;
|
||||
virtual QString href() const;
|
||||
virtual QString typeName() const;
|
||||
virtual QtSoapQName name() const;
|
||||
|
||||
virtual QString toString() const;
|
||||
virtual int toInt() const;
|
||||
virtual bool toBool() const;
|
||||
|
||||
void setName(const QtSoapQName&);
|
||||
void setId(const QString&);
|
||||
void setHref(const QString&);
|
||||
|
||||
QString errorString() const;
|
||||
|
||||
static QString typeToName(QtSoapType::Type t);
|
||||
static Type nameToType(const QString&);
|
||||
|
||||
protected:
|
||||
Type t;
|
||||
QString errorStr;
|
||||
QString i;
|
||||
QtSoapQName n;
|
||||
QString u;
|
||||
QString h;
|
||||
};
|
||||
|
||||
class QtSoapArrayIterator;
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapArray : public QtSoapType
|
||||
{
|
||||
public:
|
||||
QtSoapArray();
|
||||
QtSoapArray(const QtSoapQName& name, QtSoapType::Type type = Other,
|
||||
int size0 = -1, int size1 = -1, int size2 = -1, int size3 = -1, int size4 = -1);
|
||||
QtSoapArray(const QtSoapArray& copy);
|
||||
QtSoapArray& operator = (const QtSoapArray& copy);
|
||||
~QtSoapArray();
|
||||
|
||||
void clear();
|
||||
|
||||
bool parse(QDomNode node);
|
||||
bool isValid() const;
|
||||
|
||||
int count() const;
|
||||
|
||||
QtSoapType& at(int pos0);
|
||||
QtSoapType& at(int pos0, int pos1);
|
||||
QtSoapType& at(int pos0, int pos1, int pos2);
|
||||
QtSoapType& at(int pos0, int pos1, int pos2, int pos3);
|
||||
QtSoapType& at(int pos0, int pos1, int pos2, int pos3, int pos4);
|
||||
QtSoapType& operator [](int i);
|
||||
QtSoapType& operator [](const QString&);
|
||||
QtSoapType& operator [](const QtSoapQName&);
|
||||
|
||||
const QtSoapType& at(int pos) const;
|
||||
const QtSoapType& at(int pos0, int pos1) const;
|
||||
const QtSoapType& at(int pos0, int pos1, int pos2) const;
|
||||
const QtSoapType& at(int pos0, int pos1, int pos2, int pos3) const;
|
||||
const QtSoapType& at(int pos0, int pos1, int pos2, int pos3, int pos4) const;
|
||||
const QtSoapType& operator [](int i) const;
|
||||
const QtSoapType& operator [](const QString&) const;
|
||||
const QtSoapType& operator [](const QtSoapQName&) const;
|
||||
|
||||
void append(QtSoapType* item);
|
||||
void insert(int pos0, QtSoapType* item);
|
||||
void insert(int pos0, int pos1, QtSoapType* item);
|
||||
void insert(int pos0, int pos1, int pos2, QtSoapType* item);
|
||||
void insert(int pos0, int pos1, int pos2, int pos3, QtSoapType* item);
|
||||
void insert(int pos0, int pos1, int pos2, int pos3, int pos4, QtSoapType* item);
|
||||
|
||||
QDomElement toDomElement(QDomDocument doc) const;
|
||||
|
||||
friend class QtSoapArrayIterator;
|
||||
|
||||
protected:
|
||||
QString arraySizeString() const;
|
||||
QString arrayTypeString() const;
|
||||
|
||||
QHash<int, QtSmartPtr<QtSoapType> > array;
|
||||
int lastIndex;
|
||||
|
||||
private:
|
||||
Type arrayType;
|
||||
int order;
|
||||
int siz0, siz1, siz2, siz3, siz4;
|
||||
};
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapArrayIterator
|
||||
{
|
||||
public:
|
||||
QtSoapArrayIterator(QtSoapArray&);
|
||||
QtSoapArrayIterator(const QtSoapArrayIterator& copy);
|
||||
QtSoapArrayIterator& operator =(const QtSoapArrayIterator& j);
|
||||
~QtSoapArrayIterator();
|
||||
|
||||
int pos() const;
|
||||
void pos(int* pos0, int* pos1 = 0, int* pos2 = 0, int* pos3 = 0, int* pos4 = 0) const;
|
||||
|
||||
QtSoapType* data();
|
||||
const QtSoapType* current() const;
|
||||
|
||||
void operator ++();
|
||||
bool operator !=(const QtSoapArrayIterator& j) const;
|
||||
bool operator ==(const QtSoapArrayIterator& j) const;
|
||||
|
||||
bool atEnd() const;
|
||||
|
||||
private:
|
||||
QHash<int, QtSmartPtr<QtSoapType> >::Iterator it;
|
||||
QtSoapArray* arr;
|
||||
};
|
||||
|
||||
class QtSoapStructIterator;
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapStruct : public QtSoapType
|
||||
{
|
||||
public:
|
||||
QtSoapStruct();
|
||||
QtSoapStruct(const QtSoapQName& name);
|
||||
QtSoapStruct(const QtSoapStruct& copy);
|
||||
QtSoapStruct& operator =(const QtSoapStruct& copy);
|
||||
~QtSoapStruct();
|
||||
|
||||
void clear();
|
||||
|
||||
bool parse(QDomNode node);
|
||||
bool isValid() const;
|
||||
|
||||
int count() const;
|
||||
|
||||
QtSoapType& at(const QtSoapQName& key);
|
||||
const QtSoapType& at(const QtSoapQName& key) const;
|
||||
|
||||
QtSoapType& operator [](int);
|
||||
QtSoapType& operator [](const QtSoapQName& key);
|
||||
QtSoapType& operator [](const QString& key);
|
||||
|
||||
const QtSoapType& operator [](int) const;
|
||||
const QtSoapType& operator [](const QtSoapQName& key) const;
|
||||
const QtSoapType& operator [](const QString& key) const;
|
||||
|
||||
void insert(QtSoapType* item);
|
||||
|
||||
QDomElement toDomElement(QDomDocument doc) const;
|
||||
|
||||
friend class QtSoapStructIterator;
|
||||
|
||||
protected:
|
||||
QList<QtSmartPtr<QtSoapType> > dict;
|
||||
};
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapStructIterator
|
||||
{
|
||||
public:
|
||||
QtSoapStructIterator(QtSoapStruct&);
|
||||
~QtSoapStructIterator();
|
||||
|
||||
QtSoapQName key() const;
|
||||
QtSoapType* data();
|
||||
const QtSoapType* current() const;
|
||||
|
||||
void operator ++();
|
||||
bool operator !=(const QtSoapStructIterator& j) const;
|
||||
bool operator ==(const QtSoapStructIterator& j) const;
|
||||
|
||||
private:
|
||||
QList<QtSmartPtr<QtSoapType> >::Iterator it;
|
||||
QList<QtSmartPtr<QtSoapType> >::Iterator itEnd;
|
||||
};
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapSimpleType : public QtSoapType
|
||||
{
|
||||
public:
|
||||
QtSoapSimpleType();
|
||||
QtSoapSimpleType(const QtSoapQName& name);
|
||||
QtSoapSimpleType(const QtSoapQName& name, int n);
|
||||
QtSoapSimpleType(const QtSoapQName& name, bool n, int dummy);
|
||||
QtSoapSimpleType(const QtSoapQName& name, const QString& n);
|
||||
QtSoapSimpleType(const QtSoapSimpleType& copy);
|
||||
QtSoapSimpleType& operator =(const QtSoapSimpleType& copy);
|
||||
~QtSoapSimpleType();
|
||||
|
||||
void clear();
|
||||
|
||||
bool parse(QDomNode node);
|
||||
bool isValid() const;
|
||||
|
||||
QString toString() const;
|
||||
int toInt() const;
|
||||
bool toBool() const;
|
||||
QVariant value() const;
|
||||
|
||||
QDomElement toDomElement(QDomDocument doc) const;
|
||||
|
||||
protected:
|
||||
QVariant v;
|
||||
};
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapMessage
|
||||
{
|
||||
friend class QtSoapHttpServer;
|
||||
|
||||
public:
|
||||
QtSoapMessage();
|
||||
QtSoapMessage(const QtSoapMessage& copy);
|
||||
~QtSoapMessage();
|
||||
|
||||
QtSoapMessage& operator =(const QtSoapMessage& copy);
|
||||
|
||||
bool setContent(const QByteArray& buffer);
|
||||
bool setContent(QDomDocument& d);
|
||||
|
||||
void addBodyItem(QtSoapType*);
|
||||
void addHeaderItem(QtSoapType*);
|
||||
|
||||
// Method and response
|
||||
const QtSoapType& method() const;
|
||||
const QtSoapType& returnValue() const;
|
||||
void setMethod(const QtSoapQName&);
|
||||
void setMethod(const QString& name, const QString& url = QString::null);
|
||||
void addMethodArgument(QtSoapType*);
|
||||
void addMethodArgument(const QString& uri, const QString& name, const QString& value);
|
||||
void addMethodArgument(const QString& uri, const QString& name, bool value, int dummy);
|
||||
void addMethodArgument(const QString& uri, const QString& name, int value);
|
||||
|
||||
// Fault
|
||||
enum FaultCode
|
||||
{
|
||||
VersionMismatch,
|
||||
MustUnderstand,
|
||||
Client,
|
||||
Server,
|
||||
Other
|
||||
};
|
||||
|
||||
bool isFault() const;
|
||||
FaultCode faultCode() const;
|
||||
const QtSoapType& faultString() const;
|
||||
const QtSoapType& faultDetail() const;
|
||||
void setFaultCode(FaultCode code);
|
||||
void setFaultString(const QString& fstring);
|
||||
void addFaultDetail(QtSoapType* detail);
|
||||
|
||||
// Generating
|
||||
void clear();
|
||||
QString toXmlString(int indent = 0) const;
|
||||
|
||||
// Errors
|
||||
QString errorString() const;
|
||||
|
||||
protected:
|
||||
enum MessageType
|
||||
{
|
||||
Fault,
|
||||
MethodRequest,
|
||||
MethodResponse,
|
||||
OtherType
|
||||
};
|
||||
|
||||
bool isValidSoapMessage(const QDomDocument& candidate);
|
||||
|
||||
QtSoapStruct& body() const;
|
||||
QtSoapStruct& header() const;
|
||||
|
||||
void init();
|
||||
|
||||
private:
|
||||
MessageType type;
|
||||
|
||||
mutable QtSoapStruct envelope;
|
||||
|
||||
QtSoapQName m;
|
||||
QtSoapStruct margs;
|
||||
|
||||
QString errorStr;
|
||||
};
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapTypeConstructorBase
|
||||
{
|
||||
public:
|
||||
inline QtSoapTypeConstructorBase()
|
||||
{
|
||||
}
|
||||
|
||||
virtual inline ~QtSoapTypeConstructorBase()
|
||||
{
|
||||
}
|
||||
|
||||
virtual QtSoapType* createObject(QDomNode) = 0;
|
||||
|
||||
virtual QString errorString() const = 0;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class QT_QTSOAP_EXPORT QtSoapTypeConstructor : public QtSoapTypeConstructorBase
|
||||
{
|
||||
public:
|
||||
QtSoapTypeConstructor()
|
||||
{
|
||||
}
|
||||
|
||||
QtSoapType* createObject(QDomNode node)
|
||||
{
|
||||
T* t = new T();
|
||||
if (t->parse(node))
|
||||
{
|
||||
return t;
|
||||
}
|
||||
else
|
||||
{
|
||||
errorStr = t->errorString();
|
||||
delete t;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
QString errorString() const
|
||||
{
|
||||
return errorStr;
|
||||
}
|
||||
|
||||
private:
|
||||
mutable QString errorStr;
|
||||
};
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapTypeFactory
|
||||
{
|
||||
private:
|
||||
QtSoapTypeFactory();
|
||||
|
||||
public:
|
||||
~QtSoapTypeFactory();
|
||||
|
||||
static QtSoapTypeFactory& instance();
|
||||
|
||||
bool registerHandler(const QString& name, QtSoapTypeConstructorBase* handler);
|
||||
|
||||
QtSmartPtr<QtSoapType> soapType(QDomNode node) const;
|
||||
|
||||
QString errorString() const;
|
||||
|
||||
private:
|
||||
mutable QString errorStr;
|
||||
QHash<QString, QtSoapTypeConstructorBase*> typeHandlers;
|
||||
QLinkedList<QtSoapTypeConstructorBase*> deleteList;
|
||||
};
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapNamespaces
|
||||
{
|
||||
public:
|
||||
void registerNamespace(const QString& prefix, const QString& uri);
|
||||
QString prefixFor(const QString& ns);
|
||||
|
||||
static QtSoapNamespaces& instance();
|
||||
|
||||
private:
|
||||
QMap<QString, QString> namespaces;
|
||||
QtSoapNamespaces();
|
||||
};
|
||||
|
||||
class QT_QTSOAP_EXPORT QtSoapHttpTransport : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QtSoapHttpTransport(QObject* parent = 0);
|
||||
~QtSoapHttpTransport();
|
||||
|
||||
void setHost(const QString& host, bool useSecureHTTP = false, int port = 0);
|
||||
void setHost(const QString& host, int port); //obsolete
|
||||
void setAction(const QString& action);
|
||||
void submitRequest(QtSoapMessage& request, const QString& path);
|
||||
const QtSoapMessage& getResponse() const;
|
||||
|
||||
QNetworkAccessManager* networkAccessManager();
|
||||
QNetworkReply* networkReply();
|
||||
|
||||
Q_SIGNALS:
|
||||
void responseReady();
|
||||
void responseReady(const QtSoapMessage& response);
|
||||
|
||||
private Q_SLOTS:
|
||||
void readResponse(QNetworkReply* reply);
|
||||
|
||||
private:
|
||||
QNetworkAccessManager networkMgr;
|
||||
QPointer<QNetworkReply> networkRep;
|
||||
QUrl url;
|
||||
QString soapAction;
|
||||
QtSoapMessage soapResponse;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user