From deaec8be40bf55cb77db4a172ab64e01d3fcca84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 6 Jun 2019 15:39:00 +0200 Subject: [PATCH] Add tcp server basic structure --- libnymea-remoteproxy/libnymea-remoteproxy.pro | 2 + libnymea-remoteproxy/tcpsocketserver.cpp | 74 ++++++++++++++ libnymea-remoteproxy/tcpsocketserver.h | 96 +++++++++++++++++++ libnymea-remoteproxy/websocketserver.h | 1 - .../tcpsocketconnection.cpp | 21 ++++ .../tcpsocketconnection.h | 21 ++++ nymea-remoteproxy.pri | 2 +- .../nymea-remoteproxy-tests-offline.h | 6 ++ 8 files changed, 221 insertions(+), 2 deletions(-) create mode 100644 libnymea-remoteproxy/tcpsocketserver.cpp create mode 100644 libnymea-remoteproxy/tcpsocketserver.h diff --git a/libnymea-remoteproxy/libnymea-remoteproxy.pro b/libnymea-remoteproxy/libnymea-remoteproxy.pro index 1edbfa2..373a8e8 100644 --- a/libnymea-remoteproxy/libnymea-remoteproxy.pro +++ b/libnymea-remoteproxy/libnymea-remoteproxy.pro @@ -6,6 +6,7 @@ TARGET = nymea-remoteproxy HEADERS += \ engine.h \ loggingcategories.h \ + tcpsocketserver.h \ transportinterface.h \ websocketserver.h \ proxyclient.h \ @@ -31,6 +32,7 @@ HEADERS += \ SOURCES += \ engine.cpp \ loggingcategories.cpp \ + tcpsocketserver.cpp \ transportinterface.cpp \ websocketserver.cpp \ proxyclient.cpp \ diff --git a/libnymea-remoteproxy/tcpsocketserver.cpp b/libnymea-remoteproxy/tcpsocketserver.cpp new file mode 100644 index 0000000..bf57d65 --- /dev/null +++ b/libnymea-remoteproxy/tcpsocketserver.cpp @@ -0,0 +1,74 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Simon Stürz * + * * + * This file is part of nymea-remoteproxy. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "tcpsocketserver.h" + +namespace remoteproxy { + +TcpSocketServer::TcpSocketServer(bool sslEnabled, const QSslConfiguration &sslConfiguration, QObject *parent) : + TransportInterface(parent), + m_sslEnabled(sslEnabled), + m_sslConfiguration(sslConfiguration) +{ + +} + +quint16 TcpSocketServer::port() const +{ + return m_port; +} + +void TcpSocketServer::setPort(quint16 port) +{ + m_port = port; +} + +QHostAddress TcpSocketServer::hostAddress() const +{ + return m_hostAddress; +} + +void TcpSocketServer::setHostAddress(const QHostAddress &address) +{ + m_hostAddress = address; +} + +void TcpSocketServer::sendData(const QUuid &clientId, const QByteArray &data) +{ + +} + +void TcpSocketServer::killClientConnection(const QUuid &clientId, const QString &killReason) +{ + +} + +bool TcpSocketServer::startServer() +{ + +} + +bool TcpSocketServer::stopServer() +{ + +} + +} diff --git a/libnymea-remoteproxy/tcpsocketserver.h b/libnymea-remoteproxy/tcpsocketserver.h new file mode 100644 index 0000000..9d2736a --- /dev/null +++ b/libnymea-remoteproxy/tcpsocketserver.h @@ -0,0 +1,96 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Simon Stürz * + * * + * This file is part of nymea-remoteproxy. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef TCPSOCKETSERVER_H +#define TCPSOCKETSERVER_H + +#include +#include +#include + +#include "transportinterface.h" + +namespace remoteproxy { + + +class SslServer: public QTcpServer +{ + Q_OBJECT +public: + SslServer(bool sslEnabled, const QSslConfiguration &config, QObject *parent = nullptr): + QTcpServer(parent), + m_sslEnabled(sslEnabled), + m_config(config) + { + + } + +signals: + void clientConnected(QSslSocket *socket); + void clientDisconnected(QSslSocket *socket); + void dataAvailable(QSslSocket *socket, const QByteArray &data); + +protected: + void incomingConnection(qintptr socketDescriptor) override; + +private slots: + void onClientDisconnected(); + void onSocketReadyRead(); + +private: + bool m_sslEnabled = false; + QSslConfiguration m_config; +}; + + +class TcpSocketServer : public TransportInterface +{ + Q_OBJECT +public: + explicit TcpSocketServer(bool sslEnabled, const QSslConfiguration &sslConfiguration, QObject *parent = nullptr); + ~TcpSocketServer() override; + + quint16 port() const; + void setPort(quint16 port); + + QHostAddress hostAddress() const; + void setHostAddress(const QHostAddress &address); + + void sendData(const QUuid &clientId, const QByteArray &data) override; + void killClientConnection(const QUuid &clientId, const QString &killReason) override; + +private: + quint16 m_port; + QHostAddress m_hostAddress; + bool m_sslEnabled; + QSslConfiguration m_sslConfiguration; + + QTcpServer *m_server = nullptr; + +public slots: + bool startServer() override; + bool stopServer() override; + +}; + +} + +#endif // TCPSOCKETSERVER_H diff --git a/libnymea-remoteproxy/websocketserver.h b/libnymea-remoteproxy/websocketserver.h index 27e4108..e51fd5b 100644 --- a/libnymea-remoteproxy/websocketserver.h +++ b/libnymea-remoteproxy/websocketserver.h @@ -61,7 +61,6 @@ private: QWebSocketServer *m_server = nullptr; bool m_sslEnabled; QSslConfiguration m_sslConfiguration; - bool m_enabled = false; QHash m_clientList; diff --git a/libnymea-remoteproxyclient/tcpsocketconnection.cpp b/libnymea-remoteproxyclient/tcpsocketconnection.cpp index 4e60266..13bbf13 100644 --- a/libnymea-remoteproxyclient/tcpsocketconnection.cpp +++ b/libnymea-remoteproxyclient/tcpsocketconnection.cpp @@ -1,3 +1,24 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Simon Stürz * + * * + * This file is part of nymea-remoteproxy. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + #include "tcpsocketconnection.h" Q_LOGGING_CATEGORY(dcRemoteProxyClientTcpSocket, "RemoteProxyClientTcpSocket") diff --git a/libnymea-remoteproxyclient/tcpsocketconnection.h b/libnymea-remoteproxyclient/tcpsocketconnection.h index f9ea374..f4fc187 100644 --- a/libnymea-remoteproxyclient/tcpsocketconnection.h +++ b/libnymea-remoteproxyclient/tcpsocketconnection.h @@ -1,3 +1,24 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2019 Simon Stürz * + * * + * This file is part of nymea-remoteproxy. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + #ifndef TCPSOCKETCONNECTION_H #define TCPSOCKETCONNECTION_H diff --git a/nymea-remoteproxy.pri b/nymea-remoteproxy.pri index 0d98588..314a20b 100644 --- a/nymea-remoteproxy.pri +++ b/nymea-remoteproxy.pri @@ -5,7 +5,7 @@ QT -= gui SERVER_NAME=nymea-remoteproxy API_VERSION_MAJOR=0 API_VERSION_MINOR=3 -SERVER_VERSION=0.1.7 +SERVER_VERSION=0.1.8 DEFINES += SERVER_NAME_STRING=\\\"$${SERVER_NAME}\\\" \ SERVER_VERSION_STRING=\\\"$${SERVER_VERSION}\\\" \ diff --git a/tests/test-offline/nymea-remoteproxy-tests-offline.h b/tests/test-offline/nymea-remoteproxy-tests-offline.h index aad9c69..af62b3c 100644 --- a/tests/test-offline/nymea-remoteproxy-tests-offline.h +++ b/tests/test-offline/nymea-remoteproxy-tests-offline.h @@ -54,6 +54,9 @@ private slots: void websocketBinaryData(); void websocketPing(); + // TCP socket connection + + // Api void getIntrospect(); void getHello(); @@ -80,6 +83,9 @@ private slots: void authenticationReplyTimeout(); void authenticationReplyConnection(); + // TCP Websocket combinations + + }; #endif // NYMEA_REMOTEPROXY_TESTS_OFFLINE_H