diff --git a/README.md b/README.md index 3bae6de..cd9bbe6 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ -qt-onvif-client -=============== +forked from jimxl/qt-onvif-client +================================= -qt实现的onvif的客户端 +Qt/ONVIF Client compatible with Qt5 -## 使用 - -具体的使用可以先参考 test里面的测试用例,详细的文档有待将来的补充. +Full support ONVIF specification v2 diff --git a/lib/client.cpp b/lib/client.cpp index dab76f2..292b2d7 100644 --- a/lib/client.cpp +++ b/lib/client.cpp @@ -1,31 +1,39 @@ #include "client.h" -#include #include #include #include +#include using namespace ONVIF; Client::Client(const QString &url) { mUrl = url; + //reply->ignoreSslErrors(); } QString Client::sendData(const QString &data) { -// qDebug() << "send to url => " << mUrl << " | data => " << data; - QHttp http; - http.ignoreSslErrors(); + // qDebug() << "send to url => " << mUrl << " | data => " << data; + QUrl url(mUrl); - http.setHost(url.host()); - http.post(url.path(), data.toUtf8()); - waitForFinish(http); - if(http.error() != QHttp::NoError) { + QNetworkRequest requete(url); + requete.setHeader( QNetworkRequest::ContentTypeHeader, QVariant( QString("text/xml;charset=utf-8"))); + requete.setHeader(QNetworkRequest::ContentLengthHeader, QVariant( qulonglong(data.size()) )); + requete.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QVariant( int(QNetworkRequest::AlwaysNetwork) )); + //requete.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/x-www-form-urlencoded")); + QNetworkAccessManager *manager = new QNetworkAccessManager; + reply = manager->post(requete, data.toUtf8()); + reply->ignoreSslErrors(); + waitForFinished(reply); + if(reply->error() != QNetworkReply::NoError) { + qDebug() << reply->error(); return ""; } - return QString(http.readAll()); + return QString(reply->readAll()); } -void Client::waitForFinish(const QHttp &http) { +void Client::waitForFinished(const QNetworkReply* reply) { QEventLoop loop; - connect(&http, SIGNAL(done(bool)), &loop, SLOT(quit())); - loop.exec(); + connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); + loop.exec(); } + diff --git a/lib/client.h b/lib/client.h index 1abe833..6b0239c 100644 --- a/lib/client.h +++ b/lib/client.h @@ -2,18 +2,21 @@ #define ONVIF_CLIENT_H #include -#include +#include namespace ONVIF { class Client : public QObject { Q_OBJECT public: explicit Client(const QString &url); + QNetworkReply *reply; QString sendData(const QString &data); + private: - void waitForFinish(const QHttp &http); + void waitForFinished(const QNetworkReply* reply); QString mUrl; }; } #endif // ONVIF_CLIENT_H + diff --git a/lib/device_management/networkinterfaces.cpp b/lib/device_management/networkinterfaces.cpp index dd311d4..9082840 100644 --- a/lib/device_management/networkinterfaces.cpp +++ b/lib/device_management/networkinterfaces.cpp @@ -1,5 +1,5 @@ #include "networkinterfaces.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; diff --git a/lib/device_management/systemdateandtime.cpp b/lib/device_management/systemdateandtime.cpp index 315fab6..09afa2d 100644 --- a/lib/device_management/systemdateandtime.cpp +++ b/lib/device_management/systemdateandtime.cpp @@ -1,5 +1,5 @@ #include "systemdateandtime.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; SystemDateAndTime::SystemDateAndTime(QObject *parent) : QObject(parent) { diff --git a/lib/device_management/systemdateandtime.h b/lib/device_management/systemdateandtime.h index 8e8070c..35eb315 100644 --- a/lib/device_management/systemdateandtime.h +++ b/lib/device_management/systemdateandtime.h @@ -2,6 +2,7 @@ #define ONVIF_SYSTEMDATEANDTIME_H #include +#include #include namespace ONVIF { class SystemDateAndTime : public QObject { diff --git a/lib/device_management/systemfactorydefault.cpp b/lib/device_management/systemfactorydefault.cpp index 4afd36f..096b09c 100644 --- a/lib/device_management/systemfactorydefault.cpp +++ b/lib/device_management/systemfactorydefault.cpp @@ -1,5 +1,5 @@ #include "systemfactorydefault.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; SystemFactoryDefault::SystemFactoryDefault(QObject *parent) : QObject(parent) { diff --git a/lib/device_management/systemreboot.cpp b/lib/device_management/systemreboot.cpp index 77cfeb4..ebb4380 100644 --- a/lib/device_management/systemreboot.cpp +++ b/lib/device_management/systemreboot.cpp @@ -1,5 +1,5 @@ #include "systemreboot.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; SystemReboot::SystemReboot(QObject *parent) : QObject(parent) { diff --git a/lib/devicemanagement.cpp b/lib/devicemanagement.cpp index 7b24a46..bade09c 100644 --- a/lib/devicemanagement.cpp +++ b/lib/devicemanagement.cpp @@ -20,35 +20,35 @@ QHash DeviceManagement::namespaces(const QString &key) { names.insert("xenc", "http://www.w3.org/2001/04/xmlenc#"); names.insert("ds", "http://www.w3.org/2000/09/xmldsig#"); names.insert("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); - names.insert("wsa5", "http://www.w3.org/2005/08/addressing"); names.insert("xmime", "http://tempuri.org/xmime.xsd"); names.insert("xop", "http://www.w3.org/2004/08/xop/include"); + names.insert("wsbf2", "http://docs.oasis-open.org/wsrf/bf-2"); names.insert("wsa", "http://schemas.xmlsoap.org/ws/2004/08/addressing"); + names.insert("wsa5", "http://www.w3.org/2005/08/addressing"); names.insert("tt", "http://www.onvif.org/ver10/schema"); - names.insert("wsbf", "http://docs.oasis-open.org/wsrf/bf-2"); names.insert("wstop", "http://docs.oasis-open.org/wsn/t-1"); - names.insert("d", "http://schemas.xmlsoap.org/ws/2005/04/discovery"); - names.insert("wsr", "http://docs.oasis-open.org/wsrf/r-2"); + names.insert("wsr2", "http://docs.oasis-open.org/wsrf/r-2"); + names.insert("daae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding"); + names.insert("dare", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding"); + names.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl"); + names.insert("decpp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding"); + names.insert("dee", "http://www.onvif.org/ver10/events/wsdl/EventBinding"); + names.insert("denc", "http://www.onvif.org/ver10/events/wsdl/NotificationConsumerBinding"); + names.insert("denf", "http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding"); + names.insert("depp", "http://www.onvif.org/ver10/events/wsdl/PullPointBinding"); + names.insert("depps", "http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding"); + names.insert("tev", "http://www.onvif.org/ver10/events/wsdl"); + names.insert("depsm", "http://www.onvif.org/ver10/events/wsdl/PausableSubscriptionManagerBinding"); + names.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2"); + names.insert("desm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding"); names.insert("dndl", "http://www.onvif.org/ver10/network/wsdl/DiscoveryLookupBinding"); names.insert("dnrd", "http://www.onvif.org/ver10/network/wsdl/RemoteDiscoveryBinding"); + names.insert("d", "http://schemas.xmlsoap.org/ws/2005/04/discovery"); names.insert("dn", "http://www.onvif.org/ver10/network/wsdl"); names.insert("tad", "http://www.onvif.org/ver10/analyticsdevice/wsdl"); - names.insert("tanae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding"); - names.insert("tanre", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding"); - names.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl"); + names.insert("tae", "http://www.onvif.org/ver10/actionengine/wsdl"); names.insert("tds", "http://www.onvif.org/ver10/device/wsdl"); - names.insert("tetcp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding"); - names.insert("tete", "http://www.onvif.org/ver10/events/wsdl/EventBinding"); - names.insert("tetnc", "http://www.onvif.org/ver10/events/wsdl/NotificationConsumerBinding"); - names.insert("tetnp", "http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding"); - names.insert("tetpp", "http://www.onvif.org/ver10/events/wsdl/PullPointBinding"); - names.insert("tetpps", "http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding"); - names.insert("tev", "http://www.onvif.org/ver10/events/wsdl"); - names.insert("tetps", "http://www.onvif.org/ver10/events/wsdl/PausableSubscriptionManagerBinding"); - names.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2"); - names.insert("tetsm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding"); names.insert("timg", "http://www.onvif.org/ver20/imaging/wsdl"); - names.insert("timg10", "http://www.onvif.org/ver10/imaging/wsdl"); names.insert("tls", "http://www.onvif.org/ver10/display/wsdl"); names.insert("tmd", "http://www.onvif.org/ver10/deviceIO/wsdl"); names.insert("tptz", "http://www.onvif.org/ver20/ptz/wsdl"); @@ -57,9 +57,13 @@ QHash DeviceManagement::namespaces(const QString &key) { names.insert("trt", "http://www.onvif.org/ver10/media/wsdl"); names.insert("trv", "http://www.onvif.org/ver10/receiver/wsdl"); names.insert("tse", "http://www.onvif.org/ver10/search/wsdl"); - names.insert("tns1", "http://www.onvif.org/ver10/schema"); + names.insert("tns1", "http://www.onvif.org/ver10/topics"); names.insert("tnsn", "http://www.eventextension.com/2011/event/topics"); names.insert("tnsavg", "http://www.avigilon.com/onvif/ver10/topics"); + names.insert("ter", "http://www.onvif.org/ver10/error" ); + names.insert("xmime5", "http://www.w3.org/2005/05/xmlmime"); + names.insert("hikwsd", "http://www.onvifext.com/onvif/ext/ver10/wsdl"); + names.insert("hikxsd", "http://www.onvifext.com/onvif/ext/ver10/schema"); return names; } diff --git a/lib/devicesearcher.cpp b/lib/devicesearcher.cpp index 8996dc9..b0537c5 100644 --- a/lib/devicesearcher.cpp +++ b/lib/devicesearcher.cpp @@ -75,8 +75,8 @@ void DeviceSearcher::readPendingDatagrams() { namespaces.insert("dnrd", "http://www.onvif.org/ver10/network/wsdl/RemoteDiscoveryBinding"); namespaces.insert("dn", "http://www.onvif.org/ver10/network/wsdl"); namespaces.insert("tad", "http://www.onvif.org/ver10/analyticsdevice/wsdl"); - namespaces.insert("tanae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding"); - namespaces.insert("tanre", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding"); + namespaces.insert("tanae", "http://www.onvif.org/ver10/analytics/wsdl/AnalyticsEngineBinding"); + namespaces.insert("tanre", "http://www.onvif.org/ver10/analytics/wsdl/RuleEngineBinding"); namespaces.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl"); namespaces.insert("tds", "http://www.onvif.org/ver10/device/wsdl"); namespaces.insert("tetcp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding"); @@ -90,7 +90,7 @@ void DeviceSearcher::readPendingDatagrams() { namespaces.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2"); namespaces.insert("tetsm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding"); namespaces.insert("timg", "http://www.onvif.org/ver20/imaging/wsdl"); - namespaces.insert("timg10", "http://www.onvif.org/ver10/imaging/wsdl"); + namespaces.insert("timg10", "http://www.onvif.org/ver20/imaging/wsdl"); namespaces.insert("tls", "http://www.onvif.org/ver10/display/wsdl"); namespaces.insert("tmd", "http://www.onvif.org/ver10/deviceIO/wsdl"); namespaces.insert("tptz", "http://www.onvif.org/ver20/ptz/wsdl"); diff --git a/lib/media_management/videoencoderconfiguration.cpp b/lib/media_management/videoencoderconfiguration.cpp index f0b9981..b2b6e5e 100644 --- a/lib/media_management/videoencoderconfiguration.cpp +++ b/lib/media_management/videoencoderconfiguration.cpp @@ -1,4 +1,6 @@ #include "videoencoderconfiguration.h" +#include "libONVIF/message.h" +#include using namespace ONVIF; @@ -11,3 +13,68 @@ VideoEncoderConfiguration::~VideoEncoderConfiguration() { } + +QDomElement VideoEncoderConfiguration::toxml() +{ + QDomElement SetVideoEncoderConfiguration = newElement("trt:SetVideoEncoderConfiguration"); + QDomElement Configuration = newElement("trt:Configuration"); + Configuration.setAttribute("token", this->token()); + QDomElement Name = newElement("tt:Name", this->name()); +// QDomElement UseCount = newElement("tt:UseCount", QString:: number(this->useCount())); +// QDomElement Encoding = newElement("tt:Encoding", this->encoding()); + QDomElement Resolution = newElement("tt:Resolution"); + QDomElement Width = newElement("tt:Width", QString:: number(this->width())); + QDomElement Height = newElement("tt:Height", QString:: number(this->height())); +// QDomElement Quality = newElement("tt:Quality", QString:: number(this->quality())); +// QDomElement RateControl = newElement("tt:RateControl"); +// QDomElement FrameRateLimit = newElement("tt:FrameRateLimit", QString:: number(this->frameRateLimit())); +// QDomElement EncodingInterval = newElement("tt:EncodingInterval", QString:: number(this->encodingInterval())); +// QDomElement BitrateLimit = newElement("tt:BitrateLimit", QString:: number(this->bitrateLimit())); + //QDomElement H264 = newElement("tt:H264"); + //QDomElement GovLength = newElement("tt:GovLength", QString:: number(this->govLength())); + //QDomElement H264Profile = newElement("tt:H264Profile", this->h264Profile()); +// QDomElement Multicast = newElement("tt:Multicast"); +// QDomElement Address = newElement("tt:Address"); +// QDomElement Type = newElement("tt:Type", this->type()); +// QDomElement IPv4Address = newElement("tt:IPv4Address", this->ipv4Address()); +// QDomElement IPv6Address = newElement("tt:IPv6Address", this->ipv6Address()); +// QDomElement Port = newElement("tt:Port", QString:: number(this->port())); +// QDomElement TTL = newElement("tt:TTL", QString:: number(this->ttl())); +// QDomElement AutoStart = newElement("tt:AutoStart", QString:: number(this->autoStart())); +// QDomElement SessionTimeout = newElement("tt:SessionTimeout", this->sessionTimeout()); +// QDomElement ForcePersistence = newElement("trt:ForcePersistence ", "true"); + + SetVideoEncoderConfiguration.appendChild(Configuration); + + Configuration.appendChild(Name); +// Configuration.appendChild(UseCount); +// Configuration.appendChild(Encoding); + Configuration.appendChild(Resolution); + Resolution.appendChild(Width); + Resolution.appendChild(Height); + +// Configuration.appendChild(Quality); +// Configuration.appendChild(RateControl); +// RateControl.appendChild(FrameRateLimit); +// RateControl.appendChild(EncodingInterval); +// RateControl.appendChild(BitrateLimit); + + //Configuration.appendChild(H264); + //H264.appendChild(GovLength); + //H264.appendChild(H264Profile); + +// Configuration.appendChild(Multicast); +// Multicast.appendChild(Address); +// Address.appendChild(Type); +// Address.appendChild(IPv4Address); +// Address.appendChild(IPv6Address); + +// Multicast.appendChild(Port); +// Multicast.appendChild(TTL); +// Multicast.appendChild(AutoStart); + +// Configuration.appendChild(SessionTimeout); +// SetVideoEncoderConfiguration.appendChild(ForcePersistence); + + return SetVideoEncoderConfiguration; +} diff --git a/lib/media_management/videoencoderconfiguration.h b/lib/media_management/videoencoderconfiguration.h index 45ef70a..fc214dc 100644 --- a/lib/media_management/videoencoderconfiguration.h +++ b/lib/media_management/videoencoderconfiguration.h @@ -1,6 +1,7 @@ #ifndef VIDEOENCODERCONFIGURATION_H #define VIDEOENCODERCONFIGURATION_H #include +#include namespace ONVIF { class VideoEncoderConfiguration : public QObject @@ -28,6 +29,7 @@ namespace ONVIF { public: explicit VideoEncoderConfiguration(QObject *parent = NULL); virtual ~VideoEncoderConfiguration(); + QDomElement toxml(); QString token() const { @@ -220,6 +222,11 @@ namespace ONVIF { m_sessionTimeout = arg; } + void setResult(bool arg) + { + m_result = arg; + } + private: QString m_token; QString m_name; @@ -239,6 +246,7 @@ namespace ONVIF { int m_port; int m_ttl; bool m_autoStart; + bool m_result; QString m_sessionTimeout; }; } diff --git a/lib/mediamanagement.cpp b/lib/mediamanagement.cpp index 834917b..9d7a312 100644 --- a/lib/mediamanagement.cpp +++ b/lib/mediamanagement.cpp @@ -1,5 +1,5 @@ #include "mediamanagement.h" -#include "lib/messageparser.h" +#include "libONVIF/messageparser.h" #include #include using namespace ONVIF; @@ -19,35 +19,35 @@ QHash MediaManagement::namespaces(const QString &key) { names.insert("xenc", "http://www.w3.org/2001/04/xmlenc#"); names.insert("ds", "http://www.w3.org/2000/09/xmldsig#"); names.insert("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); - names.insert("wsa5", "http://www.w3.org/2005/08/addressing"); names.insert("xmime", "http://tempuri.org/xmime.xsd"); names.insert("xop", "http://www.w3.org/2004/08/xop/include"); + names.insert("wsbf2", "http://docs.oasis-open.org/wsrf/bf-2"); names.insert("wsa", "http://schemas.xmlsoap.org/ws/2004/08/addressing"); + names.insert("wsa5", "http://www.w3.org/2005/08/addressing"); names.insert("tt", "http://www.onvif.org/ver10/schema"); - names.insert("wsbf", "http://docs.oasis-open.org/wsrf/bf-2"); names.insert("wstop", "http://docs.oasis-open.org/wsn/t-1"); - names.insert("d", "http://schemas.xmlsoap.org/ws/2005/04/discovery"); - names.insert("wsr", "http://docs.oasis-open.org/wsrf/r-2"); + names.insert("wsr2", "http://docs.oasis-open.org/wsrf/r-2"); + names.insert("daae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding"); + names.insert("dare", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding"); + names.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl"); + names.insert("decpp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding"); + names.insert("dee", "http://www.onvif.org/ver10/events/wsdl/EventBinding"); + names.insert("denc", "http://www.onvif.org/ver10/events/wsdl/NotificationConsumerBinding"); + names.insert("denf", "http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding"); + names.insert("depp", "http://www.onvif.org/ver10/events/wsdl/PullPointBinding"); + names.insert("depps", "http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding"); + names.insert("tev", "http://www.onvif.org/ver10/events/wsdl"); + names.insert("depsm", "http://www.onvif.org/ver10/events/wsdl/PausableSubscriptionManagerBinding"); + names.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2"); + names.insert("desm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding"); names.insert("dndl", "http://www.onvif.org/ver10/network/wsdl/DiscoveryLookupBinding"); names.insert("dnrd", "http://www.onvif.org/ver10/network/wsdl/RemoteDiscoveryBinding"); + names.insert("d", "http://schemas.xmlsoap.org/ws/2005/04/discovery"); names.insert("dn", "http://www.onvif.org/ver10/network/wsdl"); names.insert("tad", "http://www.onvif.org/ver10/analyticsdevice/wsdl"); - names.insert("tanae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding"); - names.insert("tanre", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding"); - names.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl"); + names.insert("tae", "http://www.onvif.org/ver10/actionengine/wsdl"); names.insert("tds", "http://www.onvif.org/ver10/device/wsdl"); - names.insert("tetcp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding"); - names.insert("tete", "http://www.onvif.org/ver10/events/wsdl/EventBinding"); - names.insert("tetnc", "http://www.onvif.org/ver10/events/wsdl/NotificationConsumerBinding"); - names.insert("tetnp", "http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding"); - names.insert("tetpp", "http://www.onvif.org/ver10/events/wsdl/PullPointBinding"); - names.insert("tetpps", "http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding"); - names.insert("tev", "http://www.onvif.org/ver10/events/wsdl"); - names.insert("tetps", "http://www.onvif.org/ver10/events/wsdl/PausableSubscriptionManagerBinding"); - names.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2"); - names.insert("tetsm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding"); names.insert("timg", "http://www.onvif.org/ver20/imaging/wsdl"); - names.insert("timg10", "http://www.onvif.org/ver10/imaging/wsdl"); names.insert("tls", "http://www.onvif.org/ver10/display/wsdl"); names.insert("tmd", "http://www.onvif.org/ver10/deviceIO/wsdl"); names.insert("tptz", "http://www.onvif.org/ver20/ptz/wsdl"); @@ -56,9 +56,13 @@ QHash MediaManagement::namespaces(const QString &key) { names.insert("trt", "http://www.onvif.org/ver10/media/wsdl"); names.insert("trv", "http://www.onvif.org/ver10/receiver/wsdl"); names.insert("tse", "http://www.onvif.org/ver10/search/wsdl"); - names.insert("tns1", "http://www.onvif.org/ver10/schema"); + names.insert("tns1", "http://www.onvif.org/ver10/topics"); names.insert("tnsn", "http://www.eventextension.com/2011/event/topics"); names.insert("tnsavg", "http://www.avigilon.com/onvif/ver10/topics"); + names.insert("ter", "http://www.onvif.org/ver10/error" ); + names.insert("xmime5", "http://www.w3.org/2005/05/xmlmime"); + names.insert("hikwsd", "http://www.onvifext.com/onvif/ext/ver10/wsdl"); + names.insert("hikxsd", "http://www.onvifext.com/onvif/ext/ver10/schema"); return names; } @@ -70,6 +74,23 @@ Message *MediaManagement::newMessage() { names.insert("sch", "http://www.onvif.org/ver10/schema"); return createMessage(names); } + +void MediaManagement::setVideoEncoderConfiguration(VideoEncoderConfiguration *encode) +{ + Message *msg = newMessage(); + msg->appendToBody(encode->toxml()); + qDebug() << msg->toXmlStr(); + MessageParser *result = sendMessage(msg); + if(result != NULL){ + if(result->find("//trt:SetVideoEncoderConfigurationResponse")) + encode->setResult(true); + else + encode->setResult(false); + delete result; + delete msg; + } +} + VideoSourceConfigurations *MediaManagement::getVideoSourceConfigurations() { VideoSourceConfigurations *videoSourceConfigurations = NULL; @@ -1323,7 +1344,7 @@ VideoEncoderConfiguration *MediaManagement::getVideoEncoderConfiguration() { VideoEncoderConfiguration *videoEncoderConfiguration = NULL; Message *msg = newMessage(); - QDomElement token = newElement("wsdl:ConfigurationToken","profile_video_stream_D1"); + QDomElement token = newElement("wsdl:ConfigurationToken","VideoEncodeConfigToken_m"); QDomElement body = newElement("wsdl:GetVideoEncoderConfiguration"); body.appendChild(token); msg->appendToBody(body); @@ -1539,7 +1560,7 @@ StreamUri *MediaManagement::getStreamUri() QDomElement tunnel = newElement("sch:Tunnel"); QDomElement streamSetup = newElement("wsdl:StreamSetup"); QDomElement getStreamUri = newElement("wsdl:GetStreamUri"); - QDomElement profileToken = newElement("wsdl:ProfileToken","profile_CIF"); + QDomElement profileToken = newElement("wsdl:ProfileToken",getProfiles() == NULL? "" : (getProfiles()->m_namePro[0] + "Token")); getStreamUri.appendChild(streamSetup); getStreamUri.appendChild(profileToken); streamSetup.appendChild(stream); diff --git a/lib/mediamanagement.h b/lib/mediamanagement.h index ab3daae..7477910 100644 --- a/lib/mediamanagement.h +++ b/lib/mediamanagement.h @@ -25,6 +25,7 @@ namespace ONVIF { Profiles *getProfiles(); Profile *getProfile720P(); Profile *getProfileD1(); + void setVideoEncoderConfiguration(VideoEncoderConfiguration *encode); AudioSourceConfigurations *getAudioSourceConfigurations(); AudioEncoderConfigurations *getAudioEncoderConfigurations(); VideoSourceConfiguration *getVideoSourceConfiguration(); diff --git a/lib/message.cpp b/lib/message.cpp index 45383c9..1eac1ca 100644 --- a/lib/message.cpp +++ b/lib/message.cpp @@ -36,7 +36,6 @@ QDomElement ONVIF::newElement(const QString &name, const QString &value) { return doc.firstChildElement(); } - Message *Message::getOnvifSearchMessage() { QHash namespaces; namespaces.insert("a", "http://schemas.xmlsoap.org/ws/2004/08/addressing"); @@ -88,7 +87,7 @@ Message* Message::getMessageWithUserInfo(QHash &namespaces, co Message::Message(const QHash &namespaces, QObject *parent) : QObject(parent) { this->mNamespaces = namespaces; - mDoc.appendChild(mDoc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"")); + mDoc.appendChild(mDoc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\"")); mEnv = mDoc.createElementNS("http://www.w3.org/2003/05/soap-envelope", "soap:Envelope"); mHeader = mDoc.createElement("soap:Header"); mBody = mDoc.createElement("soap:Body"); diff --git a/lib/ptz_management/absolutemove.cpp b/lib/ptz_management/absolutemove.cpp index 31a3804..1b4929a 100644 --- a/lib/ptz_management/absolutemove.cpp +++ b/lib/ptz_management/absolutemove.cpp @@ -1,5 +1,5 @@ #include "absolutemove.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; AbsoluteMove::AbsoluteMove(QObject *parent):QObject(parent) diff --git a/lib/ptz_management/configuration.cpp b/lib/ptz_management/configuration.cpp index e93a901..f898521 100644 --- a/lib/ptz_management/configuration.cpp +++ b/lib/ptz_management/configuration.cpp @@ -1,5 +1,5 @@ #include "configuration.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; Configuration::Configuration(QObject *parent):QObject(parent) diff --git a/lib/ptz_management/configuration.h b/lib/ptz_management/configuration.h index c13cc28..f6dd528 100644 --- a/lib/ptz_management/configuration.h +++ b/lib/ptz_management/configuration.h @@ -10,7 +10,7 @@ namespace ONVIF { Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(int useCount READ useCount WRITE setUseCount) Q_PROPERTY(QString nodeToken READ nodeToken WRITE setNodeToken) - Q_PROPERTY(QString defaultAbsolutePantTiltPositionSpace READ defaultAbsolutePantTiltPositionSpace WRITE setDefaultAbsolutePanTiltPositionSpace) + Q_PROPERTY(QString defaultAbsolutePantTiltPositionSpace READ defaultAbsolutePantTiltPositionSpace WRITE setDefaultAbsolutePanTiltPositionSpace) // GREPTAG000 Q_PROPERTY(QString defaultAbsoluteZoomPositionSpace READ defaultAbsoluteZoomPositionSpace WRITE setDefaultAbsoluteZoomPositionSpace) Q_PROPERTY(QString defaultRelativePanTiltTranslationSpace READ defaultRelativePanTiltTranslationSpace WRITE setDefaultRelativePanTiltTranslationSpace) Q_PROPERTY(QString defaultRelativeZoomTranslationSpace READ defaultRelativeZoomTranslationSpace WRITE setDefaultRelativeZoomTranslationSpace) @@ -172,7 +172,7 @@ namespace ONVIF { m_nodeToken = arg; } - void setDefaultAbsolutePantTiltPositionSpace(QString arg) + void setDefaultAbsolutePanTiltPositionSpace(QString arg) { m_defaultAbsolutePantTiltPositionSpace = arg; } diff --git a/lib/ptz_management/configurations.h b/lib/ptz_management/configurations.h index a7688ff..39fe36e 100644 --- a/lib/ptz_management/configurations.h +++ b/lib/ptz_management/configurations.h @@ -50,7 +50,7 @@ namespace ONVIF { return m_defaultAbsolutePantTiltPositionSpace; } - void setDefaultAbsolutePantTiltPositionSpace(QString defaultAbsolutePantTiltPositionSpace) + void setDefaultAbsolutePanTiltPositionSpace(QString defaultAbsolutePantTiltPositionSpace) { m_defaultAbsolutePantTiltPositionSpace.push_back(defaultAbsolutePantTiltPositionSpace); } @@ -128,6 +128,17 @@ namespace ONVIF { { return m_panTiltX; } + + Q_SLOT float getPanTiltYFloat() + { + return m_panTiltY[0]; + } + + Q_SLOT float getPanTiltXFloat() + { + return m_panTiltX[0]; + } + void setPanTiltX(float panTiltX) { m_panTiltX.push_back(panTiltX); @@ -148,6 +159,11 @@ namespace ONVIF { return m_zoomX; } + Q_SLOT float getZoomXFloat() + { + return m_zoomX[0]; + } + void setZoomX(float zoomX) { m_zoomX.push_back(zoomX); @@ -173,7 +189,7 @@ namespace ONVIF { m_panTiltRangeUri.push_back(panTiltRangeUri); } - QList getPanTiltXRangeMin() + Q_SLOT QList getPanTiltXRangeMin() { return m_panTiltXRangeMin; } @@ -183,7 +199,7 @@ namespace ONVIF { m_panTiltXRangeMin.push_back(panTiltXRangeMin); } - QList getPanTiltXRangeMax() + Q_SLOT QList getPanTiltXRangeMax() { return m_panTiltXRangeMax; } @@ -193,21 +209,41 @@ namespace ONVIF { m_panTiltXRangeMax.push_back(panTiltXRangeMax); } - QList getPanTiltYRangeMin() + Q_SLOT QList getPanTiltYRangeMin() { return m_panTiltYRangeMin; } + Q_SLOT float getPanTiltYRangeMinFloat() + { + return m_panTiltYRangeMin[0]; + } + + Q_SLOT float getPanTiltXRangeMinFloat() + { + return m_panTiltXRangeMin[0]; + } + void setPanTiltYRangeMin(float panTiltYRangeMin) { m_panTiltYRangeMin.push_back(panTiltYRangeMin); } - QList getPanTiltYRangeMax() + Q_SLOT QList getPanTiltYRangeMax() { return m_panTiltYRangeMax; } + Q_SLOT float getPanTiltYRangeMaxFloat() + { + return m_panTiltYRangeMax[0]; + } + + Q_SLOT float getPanTiltXRangeMaxFloat() + { + return m_panTiltXRangeMax[0]; + } + void setPanTiltYRangeMax(float panTiltYRangeMax) { m_panTiltYRangeMax.push_back(panTiltYRangeMax); @@ -238,6 +274,16 @@ namespace ONVIF { return m_zoomXRangeMax; } + Q_SLOT float getZoomXRangeMaxFloat() + { + return m_zoomXRangeMax[0]; + } + + Q_SLOT float getZoomXRangeMinFloat() + { + return m_zoomXRangeMin[0]; + } + void setZoomXRangeMax(float zoomXRangeMax) { m_zoomXRangeMax.push_back(zoomXRangeMax); diff --git a/lib/ptz_management/continuousmove.cpp b/lib/ptz_management/continuousmove.cpp index 4e12c16..da100b8 100644 --- a/lib/ptz_management/continuousmove.cpp +++ b/lib/ptz_management/continuousmove.cpp @@ -1,5 +1,5 @@ #include "continuousmove.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; ContinuousMove::ContinuousMove(QObject *parent):QObject(parent) @@ -14,17 +14,17 @@ ContinuousMove::~ContinuousMove() QDomElement ContinuousMove::toxml() { - QDomElement continuousMove = newElement("wsdl:ContinuousMove"); - QDomElement velocity = newElement("wsdl:Velocity"); - QDomElement profileToken = newElement("wsdl:ProfileToken",this->profileToken()); - QDomElement panTilt = newElement("sch:PanTilt"); + QDomElement continuousMove = newElement("tptz:ContinuousMove"); + QDomElement velocity = newElement("tptz:Velocity"); + QDomElement profileToken = newElement("tptz:ProfileToken",this->profileToken()); + QDomElement panTilt = newElement("tt:PanTilt"); panTilt.setAttribute("x",this->panTiltX()); panTilt.setAttribute("y",this->panTiltY()); panTilt.setAttribute("space",this->panTiltSpace()); - QDomElement zoom = newElement("sch:Zoom"); + QDomElement zoom = newElement("tt:Zoom"); zoom.setAttribute("x",this->zoomX()); zoom.setAttribute("space",this->zoomSpace()); - QDomElement timeout = newElement("wsdl:Timeout",this->timeout()); + QDomElement timeout = newElement("tptz:Timeout",this->timeout()); continuousMove.appendChild(profileToken); continuousMove.appendChild(velocity); continuousMove.appendChild(timeout); diff --git a/lib/ptz_management/gotohomeposition.cpp b/lib/ptz_management/gotohomeposition.cpp index 340f7c4..c77464b 100644 --- a/lib/ptz_management/gotohomeposition.cpp +++ b/lib/ptz_management/gotohomeposition.cpp @@ -1,5 +1,5 @@ #include "gotohomeposition.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; diff --git a/lib/ptz_management/gotopreset.cpp b/lib/ptz_management/gotopreset.cpp index 55670eb..c0a66e1 100644 --- a/lib/ptz_management/gotopreset.cpp +++ b/lib/ptz_management/gotopreset.cpp @@ -1,5 +1,5 @@ #include "gotopreset.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; diff --git a/lib/ptz_management/node.cpp b/lib/ptz_management/node.cpp index a460b1f..56ef3b1 100644 --- a/lib/ptz_management/node.cpp +++ b/lib/ptz_management/node.cpp @@ -1,5 +1,5 @@ #include "node.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; Node::Node(QObject *parent):QObject(parent) diff --git a/lib/ptz_management/nodes.cpp b/lib/ptz_management/nodes.cpp index 7079b0a..17b484f 100644 --- a/lib/ptz_management/nodes.cpp +++ b/lib/ptz_management/nodes.cpp @@ -1,5 +1,5 @@ #include "nodes.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; Nodes::Nodes(QObject *parent):QObject(parent) { diff --git a/lib/ptz_management/preset.cpp b/lib/ptz_management/preset.cpp index d1c5bb8..4c696ba 100644 --- a/lib/ptz_management/preset.cpp +++ b/lib/ptz_management/preset.cpp @@ -1,5 +1,5 @@ #include "preset.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; Preset::Preset(QObject *parent):QObject(parent) diff --git a/lib/ptz_management/relativemove.cpp b/lib/ptz_management/relativemove.cpp index dae6d8c..7624803 100644 --- a/lib/ptz_management/relativemove.cpp +++ b/lib/ptz_management/relativemove.cpp @@ -1,5 +1,5 @@ #include "relativemove.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; RelativeMove::RelativeMove(QObject *parent):QObject(parent) diff --git a/lib/ptz_management/removepreset.cpp b/lib/ptz_management/removepreset.cpp index ebb2b15..69311df 100644 --- a/lib/ptz_management/removepreset.cpp +++ b/lib/ptz_management/removepreset.cpp @@ -1,5 +1,5 @@ #include "removepreset.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; diff --git a/lib/ptz_management/stop.cpp b/lib/ptz_management/stop.cpp index 86112ce..9941f71 100644 --- a/lib/ptz_management/stop.cpp +++ b/lib/ptz_management/stop.cpp @@ -1,5 +1,5 @@ #include "stop.h" -#include "lib/message.h" +#include "libONVIF/message.h" using namespace ONVIF; Stop::Stop(QObject *parent):QObject(parent) { diff --git a/lib/ptzmanagement.cpp b/lib/ptzmanagement.cpp index 869edd4..158385a 100644 --- a/lib/ptzmanagement.cpp +++ b/lib/ptzmanagement.cpp @@ -20,35 +20,35 @@ QHash PtzManagement::namespaces(const QString &key) { names.insert("xenc", "http://www.w3.org/2001/04/xmlenc#"); names.insert("ds", "http://www.w3.org/2000/09/xmldsig#"); names.insert("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); - names.insert("wsa5", "http://www.w3.org/2005/08/addressing"); names.insert("xmime", "http://tempuri.org/xmime.xsd"); names.insert("xop", "http://www.w3.org/2004/08/xop/include"); + names.insert("wsbf2", "http://docs.oasis-open.org/wsrf/bf-2"); names.insert("wsa", "http://schemas.xmlsoap.org/ws/2004/08/addressing"); + names.insert("wsa5", "http://www.w3.org/2005/08/addressing"); names.insert("tt", "http://www.onvif.org/ver10/schema"); - names.insert("wsbf", "http://docs.oasis-open.org/wsrf/bf-2"); names.insert("wstop", "http://docs.oasis-open.org/wsn/t-1"); - names.insert("d", "http://schemas.xmlsoap.org/ws/2005/04/discovery"); - names.insert("wsr", "http://docs.oasis-open.org/wsrf/r-2"); + names.insert("wsr2", "http://docs.oasis-open.org/wsrf/r-2"); + names.insert("daae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding"); + names.insert("dare", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding"); + names.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl"); + names.insert("decpp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding"); + names.insert("dee", "http://www.onvif.org/ver10/events/wsdl/EventBinding"); + names.insert("denc", "http://www.onvif.org/ver10/events/wsdl/NotificationConsumerBinding"); + names.insert("denf", "http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding"); + names.insert("depp", "http://www.onvif.org/ver10/events/wsdl/PullPointBinding"); + names.insert("depps", "http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding"); + names.insert("tev", "http://www.onvif.org/ver10/events/wsdl"); + names.insert("depsm", "http://www.onvif.org/ver10/events/wsdl/PausableSubscriptionManagerBinding"); + names.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2"); + names.insert("desm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding"); names.insert("dndl", "http://www.onvif.org/ver10/network/wsdl/DiscoveryLookupBinding"); names.insert("dnrd", "http://www.onvif.org/ver10/network/wsdl/RemoteDiscoveryBinding"); + names.insert("d", "http://schemas.xmlsoap.org/ws/2005/04/discovery"); names.insert("dn", "http://www.onvif.org/ver10/network/wsdl"); names.insert("tad", "http://www.onvif.org/ver10/analyticsdevice/wsdl"); - names.insert("tanae", "http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding"); - names.insert("tanre", "http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding"); - names.insert("tan", "http://www.onvif.org/ver20/analytics/wsdl"); + names.insert("tae", "http://www.onvif.org/ver10/actionengine/wsdl"); names.insert("tds", "http://www.onvif.org/ver10/device/wsdl"); - names.insert("tetcp", "http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding"); - names.insert("tete", "http://www.onvif.org/ver10/events/wsdl/EventBinding"); - names.insert("tetnc", "http://www.onvif.org/ver10/events/wsdl/NotificationConsumerBinding"); - names.insert("tetnp", "http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding"); - names.insert("tetpp", "http://www.onvif.org/ver10/events/wsdl/PullPointBinding"); - names.insert("tetpps", "http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding"); - names.insert("tev", "http://www.onvif.org/ver10/events/wsdl"); - names.insert("tetps", "http://www.onvif.org/ver10/events/wsdl/PausableSubscriptionManagerBinding"); - names.insert("wsnt", "http://docs.oasis-open.org/wsn/b-2"); - names.insert("tetsm", "http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding"); names.insert("timg", "http://www.onvif.org/ver20/imaging/wsdl"); - names.insert("timg10", "http://www.onvif.org/ver10/imaging/wsdl"); names.insert("tls", "http://www.onvif.org/ver10/display/wsdl"); names.insert("tmd", "http://www.onvif.org/ver10/deviceIO/wsdl"); names.insert("tptz", "http://www.onvif.org/ver20/ptz/wsdl"); @@ -57,9 +57,13 @@ QHash PtzManagement::namespaces(const QString &key) { names.insert("trt", "http://www.onvif.org/ver10/media/wsdl"); names.insert("trv", "http://www.onvif.org/ver10/receiver/wsdl"); names.insert("tse", "http://www.onvif.org/ver10/search/wsdl"); - names.insert("tns1", "http://www.onvif.org/ver10/schema"); + names.insert("tns1", "http://www.onvif.org/ver10/topics"); names.insert("tnsn", "http://www.eventextension.com/2011/event/topics"); names.insert("tnsavg", "http://www.avigilon.com/onvif/ver10/topics"); + names.insert("ter", "http://www.onvif.org/ver10/error" ); + names.insert("xmime5", "http://www.w3.org/2005/05/xmlmime"); + names.insert("hikwsd", "http://www.onvifext.com/onvif/ext/ver10/wsdl"); + names.insert("hikxsd", "http://www.onvifext.com/onvif/ext/ver10/schema"); return names; } @@ -67,7 +71,7 @@ QHash PtzManagement::namespaces(const QString &key) { Message *PtzManagement::newMessage() { QHash names; names.insert("wsdl", "http://www.onvif.org/ver20/ptz/wsdl"); - names.insert("sch", "http://www.onvif.org/ver10/schema"); + names.insert("tt", "http://www.onvif.org/ver10/schema"); names.insert("tptz","http://www.onvif.org/ver20/ptz/wsdl"); return createMessage(names); @@ -118,7 +122,7 @@ Configurations *PtzManagement::getConfigurations() query->setQuery(result->nameSpace()+"./tt:DefaultAbsolutePantTiltPositionSpace/string()"); query->evaluateTo(&value); - configurations->setDefaultAbsolutePantTiltPositionSpace(value.trimmed()); + configurations->setDefaultAbsolutePanTiltPositionSpace(value.trimmed()); query->setQuery(result->nameSpace()+"./tt:DefaultAbsoluteZoomPositionSpace/string()"); query->evaluateTo(&value); @@ -302,6 +306,7 @@ void PtzManagement::continuousMove(ContinuousMove *continuousMove) delete msg; delete result; } + qDebug() << continuousMove->result(); } void PtzManagement::absoluteMove(AbsoluteMove *absoluteMove) @@ -574,9 +579,9 @@ void PtzManagement::getConfiguration(Configuration *configuration) configuration->setName(result->getValue("//tt:Name").trimmed()); configuration->setUseCount(result->getValue("//tt:UseCount").trimmed().toInt()); configuration->setNodeToken(result->getValue("//tt:NodeToken").trimmed()); - configuration->setDefaultAbsolutePantTiltPositionSpace(result->getValue("//tt:DefaultAbsolutePantTiltPositionSpace").trimmed()); + configuration->setDefaultAbsolutePanTiltPositionSpace(result->getValue("//tt:DefaultAbsolutePantTiltPositionSpace").trimmed()); configuration->setDefaultAbsoluteZoomPositionSpace(result->getValue("//tt:DefaultAbsoluteZoomPositionSpace").trimmed()); - configuration->setDefaultContinuousPanTiltVelocitySpace(result->getValue("//DefaultContinuousPanTiltVelocitySpace").trimmed()); + configuration->setDefaultContinuousPanTiltVelocitySpace(result->getValue("//tt:DefaultContinuousPanTiltVelocitySpace").trimmed()); configuration->setDefaultContinuousZoomVelocitySpace(result->getValue("//tt:DefaultContinuousZoomVelocitySpace").trimmed()); configuration->setDefaultRelativePanTiltTranslationSpace(result->getValue("//tt:DefaultRelativePanTiltTranslationSpace").trimmed()); configuration->setDefaultRelativeZoomTranslationSpace(result->getValue("//tt:DefaultRelativeZoomTranslationSpace").trimmed()); diff --git a/lib/ptzmanagement.h b/lib/ptzmanagement.h index 800ca09..72ca85f 100644 --- a/lib/ptzmanagement.h +++ b/lib/ptzmanagement.h @@ -28,10 +28,10 @@ namespace ONVIF { void removePreset(RemovePreset *removePreset); void setPreset(Preset *preset); - void continuousMove(ContinuousMove *continuousMove); + Q_SLOT void continuousMove(ContinuousMove *continuousMove); void absoluteMove(AbsoluteMove *absoluteMove); void relativeMove(RelativeMove *relativeMove); - void stop(Stop *stop); + Q_SLOT void stop(Stop *stop); void gotoPreset(GotoPreset *gotoPreset); void gotoHomePosition(GotoHomePosition *gotoHomePosition); diff --git a/lib/service.cpp b/lib/service.cpp index c94c097..74ee210 100644 --- a/lib/service.cpp +++ b/lib/service.cpp @@ -26,6 +26,7 @@ MessageParser *Service::sendMessage(Message *message, const QString &namespaceKe if(message == NULL) { return NULL; } + qDebug() << message->toXmlStr(); QString result = mClient->sendData(message->toXmlStr()); qDebug() << "receive data ==> " << result; if(result == "") {