diff --git a/guh.pro b/guh.pro index 9a885c30..70e0c47a 100644 --- a/guh.pro +++ b/guh.pro @@ -7,6 +7,7 @@ SUBDIRS += libguh server plugins !disabletesting { message("Building guh tests enabled") SUBDIRS += tests + DEFINES += TESTING_ENABLED } else { message("Building guh tests disabled") } diff --git a/server/guhcore.h b/server/guhcore.h index 9812d315..9e93afe5 100644 --- a/server/guhcore.h +++ b/server/guhcore.h @@ -96,6 +96,7 @@ public: LogEngine* logEngine() const; JsonRPCServer *jsonRPCServer() const; RestServer *restServer() const; + DeviceManager *deviceManager() const; signals: void eventTriggered(const Event &event); @@ -118,7 +119,6 @@ signals: private: RuleEngine *ruleEngine() const; - DeviceManager *deviceManager() const; explicit GuhCore(QObject *parent = 0); static GuhCore *s_instance; diff --git a/server/guhservice.cpp b/server/guhservice.cpp index 40554a6e..dbc2116e 100644 --- a/server/guhservice.cpp +++ b/server/guhservice.cpp @@ -18,12 +18,27 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*! + \class guhserver::GuhService + \brief The daemon service reprenetation of the guh server. + + \ingroup core + \inmodule server + + The \l{GuhService} represents the forked guhd. + + \sa QtService +*/ + + #include #include "guhservice.h" #include "loggingcategories.h" namespace guhserver { +/*! Constructs the forked guhd application with the given argument count \a argc and argument vector \a argv. */ GuhService::GuhService(int argc, char **argv): QtService(argc, argv, "guh daemon") { @@ -38,10 +53,12 @@ GuhService::GuhService(int argc, char **argv): setServiceFlags(QtServiceBase::CanBeSuspended); } +/*! Destroyes the forked guhd application. */ GuhService::~GuhService() { } +/*! Starts the forked guhd application. */ void GuhService::start() { GuhCore::instance()->setRunningMode(GuhCore::RunningModeService); diff --git a/server/httpreply.cpp b/server/httpreply.cpp index 527465fb..75157b2c 100644 --- a/server/httpreply.cpp +++ b/server/httpreply.cpp @@ -19,17 +19,16 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*! - \class guhserver::HttpReply - \brief Represents a reply of the guh webserver. + \class guhserver::HttpReply + \brief Represents a reply of the guh webserver to a \l{HttpRequest}. - \ingroup core - \inmodule server + \ingroup core + \inmodule server - This class holds the header and the payload data of a network reply and represents a response - from the guh webserver. - - \note RFC 7231 HTTP/1.1 Semantics and Content -> \l{http://tools.ietf.org/html/rfc7231}{http://tools.ietf.org/html/rfc7231} + This class holds the header and the payload data of a network reply and represents a response + from the guh webserver to a \l{HttpRequest}. + \note RFC 7231 HTTP/1.1 Semantics and Content -> \l{http://tools.ietf.org/html/rfc7231}{http://tools.ietf.org/html/rfc7231} */ /*! \enum guhserver::HttpReply::HttpStatusCode @@ -75,9 +74,7 @@ */ /*! \enum guhserver::HttpReply::HttpHeaderType - This enum type specifies the known type of a header in a HTTP webserver reply. - You can find more information here: \l{http://tools.ietf.org/html/rfc7231#section-5} \value ContentTypeHeader @@ -162,7 +159,7 @@ HttpReply::HttpReply(const HttpReply::HttpStatusCode &statusCode, const HttpRepl packReply(); } -/*! Set the \a statusCode for this \l{HttpReply}.*/ +/*! Set the \l{HttpStatusCode} \a statusCode for this \l{HttpReply}. */ void HttpReply::setHttpStatusCode(const HttpReply::HttpStatusCode &statusCode) { m_statusCode = statusCode; @@ -363,6 +360,10 @@ QByteArray HttpReply::getHeaderType(const HttpReply::HttpHeaderType &headerType) } } +/*! Starts the timer for an async \l{HttpReply}. + * + * \sa finished() +*/ void HttpReply::startWait() { m_timer->start(5000); diff --git a/server/httprequest.cpp b/server/httprequest.cpp index e5ef700d..03de030a 100644 --- a/server/httprequest.cpp +++ b/server/httprequest.cpp @@ -148,9 +148,10 @@ bool HttpRequest::hasPayload() const return !m_payload.isEmpty(); } -/*! Appends data to the current raw data of this \l{HttpRequest}. This method will be used if a \l{HttpRequest} is not complete yet. - - \sa isComplete() +/*! Appends the given \a data to the current raw data of this \l{HttpRequest}. + * This method will be used if a \l{HttpRequest} is not complete yet. + * + * \sa isComplete() */ void HttpRequest::appendData(const QByteArray &data) { diff --git a/server/jsonrpc/jsonrpcserver.cpp b/server/jsonrpc/jsonrpcserver.cpp index 322f07b6..08bc437a 100644 --- a/server/jsonrpc/jsonrpcserver.cpp +++ b/server/jsonrpc/jsonrpcserver.cpp @@ -21,14 +21,7 @@ #include "jsonrpcserver.h" #include "jsontypes.h" - -#ifdef TESTING_ENABLED -#include "mocktcpserver.h" -#else -#include "tcpserver.h" -#endif #include "jsonhandler.h" - #include "guhcore.h" #include "devicemanager.h" #include "plugin/deviceplugin.h" @@ -45,6 +38,12 @@ #include "logginghandler.h" #include "statehandler.h" +#ifndef TESTING_ENABLED +#include "tcpserver.h" +#else +#include "mocktcpserver.h" +#endif + #ifdef WEBSOCKET #include "websocketserver.h" #endif diff --git a/server/jsonrpc/jsonrpcserver.h b/server/jsonrpc/jsonrpcserver.h index 5d147c0f..1db55866 100644 --- a/server/jsonrpc/jsonrpcserver.h +++ b/server/jsonrpc/jsonrpcserver.h @@ -36,14 +36,18 @@ class Device; class QSslConfiguration; + +#ifdef TESTING_ENABLED +class MockTcpServer; +#endif + namespace guhserver { + #ifdef WEBSOCKET class WebSocketServer; #endif -#ifdef TESTING_ENABLED -class MockTcpServer; -#else +#ifndef TESTING_ENABLED class TcpServer; #endif @@ -76,11 +80,6 @@ private slots: void asyncReplyFinished(); -private: - void registerHandler(JsonHandler *handler); - - QString formatAssertion(const QString &targetNamespace, const QString &method, JsonHandler *handler, const QVariantMap &data) const; - private: #ifdef TESTING_ENABLED MockTcpServer *m_tcpServer; @@ -100,6 +99,9 @@ private: QHash m_clients; int m_notificationId; + + void registerHandler(JsonHandler *handler); + QString formatAssertion(const QString &targetNamespace, const QString &method, JsonHandler *handler, const QVariantMap &data) const; }; } diff --git a/server/rest/restserver.h b/server/rest/restserver.h index 3d441731..77cb2de7 100644 --- a/server/rest/restserver.h +++ b/server/rest/restserver.h @@ -45,7 +45,6 @@ class RestServer : public QObject public: explicit RestServer(const QSslConfiguration &sslConfiguration = QSslConfiguration(), QObject *parent = 0); - private: WebServer *m_webserver; QList m_clientList; diff --git a/server/ruleengine.cpp b/server/ruleengine.cpp index a30b91c4..d3063554 100644 --- a/server/ruleengine.cpp +++ b/server/ruleengine.cpp @@ -72,6 +72,7 @@ */ /*! \enum guhserver::RuleEngine::RemovePolicy + \value RemovePolicyCascade Remove the whole \l{Rule}. \value RemovePolicyUpdate @@ -99,7 +100,7 @@ namespace guhserver { /*! Constructs the RuleEngine with the given \a parent. Although it wouldn't harm to have multiple RuleEngines, there is one instance available from \l{GuhCore}. This one should be used instead of creating multiple ones. - */ + */ RuleEngine::RuleEngine(QObject *parent) : QObject(parent) { @@ -204,7 +205,8 @@ RuleEngine::RuleEngine(QObject *parent) : This will search all the \l{Rule}{Rules} triggered by the given \a event and evaluate their states in the system. It will return a list of all \l{Rule}{Rules} that are triggered or change its active state - because of this \a event. */ + because of this \a event. +*/ QList RuleEngine::evaluateEvent(const Event &event) { Device *device = GuhCore::instance()->findConfiguredDevice(event.deviceId()); @@ -254,7 +256,8 @@ QList RuleEngine::evaluateEvent(const Event &event) } /*! Add a new \l{Rule} with the given \a ruleId , \a name, \a eventDescriptorList, \a actions and \a enabled value to the engine. - For convenience, this creates a Rule without any \l{State} comparison. */ + For convenience, this creates a Rule without any \l{State} comparison. +*/ RuleEngine::RuleError RuleEngine::addRule(const RuleId &ruleId, const QString &name, const QList &eventDescriptorList, const QList &actions, bool enabled) { return addRule(ruleId, name, eventDescriptorList, StateEvaluator(), actions, QList(), enabled); @@ -349,7 +352,9 @@ RuleEngine::RuleError RuleEngine::addRule(const RuleId &ruleId, const QString &n return RuleErrorNoError; } -/*! Edit a \l{Rule} with the given \a ruleId, \a name, \a eventDescriptorList, \a stateEvaluator, the list of \a actions the list of \a exitActions and the \a enabled in the engine. */ +/*! Edit a \l{Rule} with the given \a ruleId, \a name, \a eventDescriptorList, \a stateEvaluator, + the list of \a actions the list of \a exitActions and the \a enabled in the engine. +*/ RuleEngine::RuleError RuleEngine::editRule(const RuleId &ruleId, const QString &name, const QList &eventDescriptorList, const StateEvaluator &stateEvaluator, const QList &actions, const QList &exitActions, bool enabled) { if (ruleId.isNull()) { @@ -427,7 +432,9 @@ RuleEngine::RuleError RuleEngine::removeRule(const RuleId &ruleId, bool fromEdit } /*! Enables the rule with the given \a ruleId that has been previously disabled. - \sa disableRule(), */ + + \sa disableRule() +*/ RuleEngine::RuleError RuleEngine::enableRule(const RuleId &ruleId) { if (!m_rules.contains(ruleId)) { @@ -445,7 +452,9 @@ RuleEngine::RuleError RuleEngine::enableRule(const RuleId &ruleId) } /*! Disables the rule with the given \a ruleId. Disabled rules won't be triggered. - \sa enableRule(), */ + + \sa enableRule() +*/ RuleEngine::RuleError RuleEngine::disableRule(const RuleId &ruleId) { if (!m_rules.contains(ruleId)) { diff --git a/server/servermanager.cpp b/server/servermanager.cpp index 8b5e1c14..7863e513 100644 --- a/server/servermanager.cpp +++ b/server/servermanager.cpp @@ -18,6 +18,20 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/*! + \class guhserver::ServerManager + \brief This class represents the manager of all server interfaces of the guh server. + + \ingroup core + \inmodule server + + The \l{ServerManager} starts the \l{JsonRPCServer} and the \l{RestServer}. He also loads + and provides the SSL configurations for the secure \l{WebServer} and \l{WebSocketServer} + connection. + + \sa JsonRPCServer, RestServer +*/ + #include "servermanager.h" #include "guhsettings.h" @@ -27,6 +41,7 @@ namespace guhserver { +/*! Constructs a \l{ServerManager} with the given \a parent. */ ServerManager::ServerManager(QObject *parent) : QObject(parent), m_sslConfiguration(QSslConfiguration()) @@ -62,11 +77,13 @@ ServerManager::ServerManager(QObject *parent) : m_restServer = new RestServer(m_sslConfiguration, this); } +/*! Returns the pointer to the created \l{JsonRPCServer} in this \l{ServerManager}. */ JsonRPCServer *ServerManager::jsonServer() const { return m_jsonServer; } +/*! Returns the pointer to the created \l{RestServer} in this \l{ServerManager}. */ RestServer *ServerManager::restServer() const { return m_restServer; diff --git a/server/tcpserver.cpp b/server/tcpserver.cpp index 4b851bbb..5cd62673 100644 --- a/server/tcpserver.cpp +++ b/server/tcpserver.cpp @@ -19,6 +19,20 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/*! + \class guhserver::TcpServer + \brief This class represents the tcp server for guhd. + + \ingroup core + \inmodule server + + \inherits TransportInterface + + The TCP server allowes clients to connect to the JSON-RPC API. + + \sa WebSocketServer, TransportInterface +*/ + #include "tcpserver.h" #include "loggingcategories.h" #include "guhsettings.h" @@ -30,6 +44,10 @@ namespace guhserver { +/*! Constructs a \l{TcpServer} with the given \a parent. + * + * \sa ServerManager + */ TcpServer::TcpServer(QObject *parent) : TransportInterface(parent) { @@ -66,10 +84,12 @@ TcpServer::TcpServer(QObject *parent) : settings.endGroup(); } +/*! Destructor of this \l{TcpServer}. */ TcpServer::~TcpServer() { } +/*! Sending \a data to a list of \a clients.*/ void TcpServer::sendData(const QList &clients, const QVariantMap &data) { foreach (const QUuid &client, clients) { @@ -77,6 +97,16 @@ void TcpServer::sendData(const QList &clients, const QVariantMap &data) } } +/*! Sending \a data to the client with the given \a clientId.*/ +void TcpServer::sendData(const QUuid &clientId, const QVariantMap &data) +{ + QTcpSocket *client = 0; + client = m_clientList.value(clientId); + if (client) { + client->write(QJsonDocument::fromVariant(data).toJson()); + } +} + void TcpServer::reloadNetworkInterfaces() { GuhSettings settings(GuhSettings::SettingsRoleGlobal); @@ -98,15 +128,6 @@ void TcpServer::reloadNetworkInterfaces() settings.endGroup(); } -void TcpServer::sendData(const QUuid &clientId, const QVariantMap &data) -{ - QTcpSocket *client = 0; - client = m_clientList.value(clientId); - if (client) { - client->write(QJsonDocument::fromVariant(data).toJson()); - } -} - void TcpServer::onClientConnected() { // got a new client connected @@ -233,6 +254,10 @@ void TcpServer::onTimeout() } } +/*! Returns true if this \l{TcpServer} started successfully. + * + * \sa TransportInterface::startServer() + */ bool TcpServer::startServer() { bool ipV4 = m_ipVersions.contains("IPv4"); @@ -276,6 +301,10 @@ bool TcpServer::startServer() return true; } +/*! Returns true if this \l{TcpServer} stopped successfully. + * + * \sa TransportInterface::startServer() + */ bool TcpServer::stopServer() { // Listen on all Networkinterfaces diff --git a/server/transportinterface.cpp b/server/transportinterface.cpp index 967ac8e0..6a6c5fc8 100644 --- a/server/transportinterface.cpp +++ b/server/transportinterface.cpp @@ -18,6 +18,58 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/*! + \class guhserver::TransportInterface + \brief This class provides an interface for the JSON servers. + + \ingroup core + \inmodule server + + \sa WebSocketServer, TcpServer +*/ + +/*! \fn void guhserver::TransportInterface::clientConnected(const QUuid &clientId); + This signal is emitted when a new client with the given \a clientId has been connected. + + \sa WebSocketServer, TcpServer +*/ + +/*! \fn void guhserver::TransportInterface::clientDisconnected(const QUuid &clientId); + This signal is emitted when a new client with the given \a clientId has been connected. + + \sa WebSocketServer, TcpServer +*/ + +/*! \fn bool guhserver::TransportInterface::startServer(); + Pure virtual public slot for starting the corresponding \l{TransportInterface}. Returns true + if started successfully. + + \sa WebSocketServer::startServer(), TcpServer::startServer() +*/ + +/*! \fn bool guhserver::TransportInterface::stopServer(); + Pure virtual public slot for stopping the corresponding \l{TransportInterface}. Returns true + if stopped successfully. + + \sa WebSocketServer::stopServer(), TcpServer::stopServer() +*/ + +/*! \fn void guhserver::TransportInterface::sendData(const QUuid &clientId, const QVariantMap &data); + Pure virtual method for sending \a data to the client with the id \a clientId over the corresponding \l{TransportInterface}. +*/ + +/*! \fn void guhserver::TransportInterface::sendData(const QList &clients, const QVariantMap &data); + Pure virtual method for sending \a data to \a clients over the corresponding \l{TransportInterface}. +*/ + +/*! \fn void guhserver::TransportInterface::dataAvailable(const QUuid &clientId, const QString &targetNamespace, const QString &method, const QVariantMap &message); + This signal is emitted when valid data from the client with the given \a clientId are available. + Data are valid if the corresponding \l{TransportInterface} has parsed successfully the given + \a targetNamespace, \a method and \a message. + + \sa WebSocketServer, TcpServer +*/ + #include "transportinterface.h" #include "loggingcategories.h" #include "jsonhandler.h" @@ -27,15 +79,20 @@ namespace guhserver { +/*! Constructs a \l{TransportInterface} with the given \a parent. */ TransportInterface::TransportInterface(QObject *parent) : QObject(parent) { } +/*! Pure virtual destructor for \l{TransportInterface}. */ TransportInterface::~TransportInterface() { } +/*! Send a JSON success response to the client with the given \a clientId, + * \a commandId and \a params to the inerted \l{TransportInterface}. + */ void TransportInterface::sendResponse(const QUuid &clientId, int commandId, const QVariantMap ¶ms) { QVariantMap response; @@ -46,6 +103,10 @@ void TransportInterface::sendResponse(const QUuid &clientId, int commandId, cons sendData(clientId, response); } + +/*! Send a JSON error response to the client with the given \a clientId, + * \a commandId and \a error to the inerted \l{TransportInterface}. + */ void TransportInterface::sendErrorResponse(const QUuid &clientId, int commandId, const QString &error) { QVariantMap errorResponse; @@ -56,7 +117,12 @@ void TransportInterface::sendErrorResponse(const QUuid &clientId, int commandId, sendData(clientId, errorResponse); } - +/*! Validates the given \a data from the client with the id \a clientId. If the validation was + * successfull, the signal \l{dataAvailable()} will be emitted, otherwise an error response + * will be sent to the client. + * + * \sa dataAvailable() + */ void TransportInterface::validateMessage(const QUuid &clientId, const QByteArray &data) { QJsonParseError error; diff --git a/server/webserver.cpp b/server/webserver.cpp index 9dcc0f53..e9ca8336 100644 --- a/server/webserver.cpp +++ b/server/webserver.cpp @@ -18,6 +18,58 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/*! + \class guhserver::WebServer + \brief This class represents the web server for guhd. + + \ingroup core + \inmodule server + + The \l{WebServer} class provides a HTTP/1.1 web server. The web server + provides access to the guh-webinterface and the path can be specified + in the \tt /etc/guh/guhd.conf file and to the guh \l{https://github.com/guh/guh/wiki/REST-Api-documentation}{REST API}. + The default port for the web server is 3333, which is according to this + \l{https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers}{list} + officially free. + + The URL for the insecure guh-webinterface access: + \code http://localhost:3333\endcode + + The URL for the secure HTTPS (TLS 1.2) guh-webinterface access: + \code https://localhost:3333\endcode + + The URL for the insecure REST API access to a \l{RestResource}: + \code http://localhost:3333/api/v1/{resource}\endcode + + The URL for the secure HTTPS (TLS 1.2) REST API access to a \l{RestResource}: + \code https://localhost:3333/api/v1/{RestResource}\endcode + + You can turn on the HTTPS server in the \tt WebServer section of the \tt /etc/guh/guhd.conf file. + + \note For \tt HTTPS you need to have a certificate and configure it in the \tt SSL-configuration + section of the \tt /etc/guh/guhd.conf file. + + \sa WebSocketServer, TcpServer +*/ + +/*! \fn void guhserver::WebServer::httpRequestReady(const QUuid &clientId, const HttpRequest &httpRequest); + This signal is emitted when a \a httpRequest from a client with the given \a clientId is ready. + + \sa RestServer, HttpRequest +*/ + +/*! \fn void guhserver::WebServer::clientConnected(const QUuid &clientId); + This signal is emitted when a new client with the given \a clientId has been connected. +*/ + +/*! \fn void guhserver::WebServer::clientDisconnected(const QUuid &clientId); + This signal is emitted when a client with the given \a clientId has been disconnected. +*/ + +/*! \fn void guhserver::WebServer::incomingConnection(qintptr socketDescriptor); + Overwritten virtual method from \l{http://doc.qt.io/qt-5/qtcpserver.html#incomingConnection}{QTcpServer::incomingConnection( \a socketDescriptor)}. +*/ + #include "webserver.h" #include "loggingcategories.h" #include "guhsettings.h" @@ -35,6 +87,10 @@ namespace guhserver { +/*! Constructs a \l{WebServer} with the given \a sslConfiguration and \a parent. + * + * \sa ServerManager + */ WebServer::WebServer(const QSslConfiguration &sslConfiguration, QObject *parent) : QTcpServer(parent), m_sslConfiguration(sslConfiguration), @@ -63,11 +119,16 @@ WebServer::WebServer(const QSslConfiguration &sslConfiguration, QObject *parent) m_useSsl = false; } +/*! Destructor of this \l{WebServer}. */ WebServer::~WebServer() { this->close(); } +/*! Send the given \a reply map to the corresponding client. + * + * \sa HttpReply + */ void WebServer::sendHttpReply(HttpReply *reply) { QSslSocket *socket = 0; @@ -297,6 +358,7 @@ void WebServer::onError(QAbstractSocket::SocketError error) qCWarning(dcConnection) << "Client socket error" << socket->peerAddress() << error << socket->errorString(); } +/*! Returns true if this \l{WebServer} started successfully. */ bool WebServer::startServer() { if (!listen(QHostAddress::Any, m_port)) { @@ -313,6 +375,7 @@ bool WebServer::startServer() return true; } +/*! Returns true if this \l{WebServer} stopped successfully. */ bool WebServer::stopServer() { close(); diff --git a/server/webserver.h b/server/webserver.h index bbe79960..0eda335c 100644 --- a/server/webserver.h +++ b/server/webserver.h @@ -72,7 +72,6 @@ signals: void httpRequestReady(const QUuid &clientId, const HttpRequest &httpRequest); void clientConnected(const QUuid &clientId); void clientDisconnected(const QUuid &clientId); - void dataAvailable(const QUuid &clientId, const QString &targetNamespace, const QString &method, const QVariantMap &message); private slots: void readClient(); diff --git a/server/websocketserver.cpp b/server/websocketserver.cpp index f386354d..e1286637 100644 --- a/server/websocketserver.cpp +++ b/server/websocketserver.cpp @@ -18,6 +18,33 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/*! + \class guhserver::WebSocketServer + \brief This class represents the websocket server for guhd. + + \ingroup core + \inmodule server + + The websocket server provides a server for websocket clients based on + \l{http://tools.ietf.org/html/rfc6455}{Protocol Version 13}. The default + port for the websocket server is 4444, which is according to this + \l{https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers}{list} + officially free. + + The URL for the insecure websocket: + \code ws://localhost:4444\endcode + + The URL for the secure websocket (TLS 1.2): + \code wss://localhost:4444\endcode + + You can turn on the \tt wss server in the \tt WebServerServer section of the \tt /etc/guh/guhd.conf file. + + \note For \tt wss you need to have a certificate and configure it in the \tt SSL-configuration + section of the \tt /etc/guh/guhd.conf file. + + \sa WebServer, TcpServer, TransportInterface +*/ + #include "websocketserver.h" #include "guhsettings.h" #include "loggingcategories.h" @@ -27,6 +54,10 @@ namespace guhserver { +/*! Constructs a \l{WebSocketServer} with the given \a sslConfiguration and \a parent. + * + * \sa ServerManager + */ WebSocketServer::WebSocketServer(const QSslConfiguration &sslConfiguration, QObject *parent) : TransportInterface(parent), m_server(0), @@ -49,10 +80,15 @@ WebSocketServer::WebSocketServer(const QSslConfiguration &sslConfiguration, QObj m_useSsl = false; } +/*! Destructor of this \l{WebSocketServer}. */ WebSocketServer::~WebSocketServer() { } +/*! Send the given \a data map to the client with the given \a clientId. + * + * \sa TransportInterface::sendData() + */ void WebSocketServer::sendData(const QUuid &clientId, const QVariantMap &data) { QWebSocket *client = 0; @@ -62,6 +98,10 @@ void WebSocketServer::sendData(const QUuid &clientId, const QVariantMap &data) } } +/*! Send the given \a data map to the given list of \a clients. + * + * \sa TransportInterface::sendData() + */ void WebSocketServer::sendData(const QList &clients, const QVariantMap &data) { foreach (const QUuid &client, clients) { @@ -135,6 +175,10 @@ void WebSocketServer::onPing(quint64 elapsedTime, const QByteArray &payload) qCDebug(dcWebSocketServer) << "ping response" << client->peerAddress() << elapsedTime << payload; } +/*! Returns true if this \l{WebSocketServer} started successfully. + * + * \sa TransportInterface::startServer() + */ bool WebSocketServer::startServer() { if (m_server) { @@ -164,6 +208,10 @@ bool WebSocketServer::startServer() return true; } +/*! Returns true if this \l{WebSocketServer} stopped successfully. + * + * \sa TransportInterface::stopServer() + */ bool WebSocketServer::stopServer() { qCDebug(dcConnection) << "Stopping websocket server"; diff --git a/tests/auto/guhtestbase.cpp b/tests/auto/guhtestbase.cpp index c7e39602..7f156200 100644 --- a/tests/auto/guhtestbase.cpp +++ b/tests/auto/guhtestbase.cpp @@ -34,7 +34,7 @@ #include #include -namespace guhserver { +using namespace guhserver; PluginId mockPluginId = PluginId("727a4a9a-c187-446f-aadf-f1b2220607d1"); VendorId guhVendorId = VendorId("2062d64d-3232-433c-88bc-0d33c0ba2ba6"); @@ -67,7 +67,6 @@ GuhTestBase::GuhTestBase(QObject *parent) : void GuhTestBase::initTestCase() { - // If testcase asserts cleanup won't do. Lets clear any previous test run settings leftovers GuhSettings rulesSettings(GuhSettings::SettingsRoleRules); rulesSettings.clear(); @@ -198,4 +197,3 @@ void GuhTestBase::restartServer() m_mockTcpServer = MockTcpServer::servers().first(); } -} diff --git a/tests/auto/guhtestbase.h b/tests/auto/guhtestbase.h index 81bd6ee4..212d7bc3 100644 --- a/tests/auto/guhtestbase.h +++ b/tests/auto/guhtestbase.h @@ -34,8 +34,6 @@ #include #include -namespace guhserver { - extern DeviceClassId mockDeviceClassId; extern DeviceClassId mockDeviceAutoClassId; extern DeviceClassId mockDeviceDiscoveryClassId; @@ -52,6 +50,7 @@ extern EventTypeId mockEvent2Id; extern StateTypeId mockIntStateId; extern StateTypeId mockBoolStateId; +using namespace guhserver; class MockTcpServer; @@ -137,6 +136,4 @@ protected: }; -} - #endif // GUHTESTBASE_H diff --git a/tests/auto/mocktcpserver.cpp b/tests/auto/mocktcpserver.cpp index 7bd5788d..ef38c7a2 100644 --- a/tests/auto/mocktcpserver.cpp +++ b/tests/auto/mocktcpserver.cpp @@ -27,8 +27,7 @@ #include #include - -namespace guhserver { +using namespace guhserver; QList MockTcpServer::s_allServers; @@ -134,5 +133,3 @@ bool MockTcpServer::stopServer() { return true; } - -} diff --git a/tests/auto/mocktcpserver.h b/tests/auto/mocktcpserver.h index 74c38f79..c1fd4418 100644 --- a/tests/auto/mocktcpserver.h +++ b/tests/auto/mocktcpserver.h @@ -27,7 +27,7 @@ #include "transportinterface.h" -namespace guhserver { +using namespace guhserver; class JsonRPCServer; @@ -60,7 +60,5 @@ private: static QList s_allServers; }; -} - #endif // TCPSERVER_H