Add random traffic generator for test clients
This commit is contained in:
parent
8081c7804e
commit
aecf6da7e1
@ -99,10 +99,11 @@ int main(int argc, char *argv[])
|
|||||||
"a server application as client perspective.\n\n"
|
"a server application as client perspective.\n\n"
|
||||||
"Version: %1\n"
|
"Version: %1\n"
|
||||||
"API version: %2\n\n"
|
"API version: %2\n\n"
|
||||||
"Copyright %3 2021 nymea GmbH <developer@nymea.io>\n")
|
"Copyright %3 %4 nymea GmbH <developer@nymea.io>\n")
|
||||||
.arg(SERVER_VERSION_STRING)
|
.arg(SERVER_VERSION_STRING)
|
||||||
.arg(API_VERSION_STRING)
|
.arg(API_VERSION_STRING)
|
||||||
.arg(QChar(0xA9)));
|
.arg(QChar(0xA9))
|
||||||
|
.arg(COPYRIGHT_YEAR_STRING));
|
||||||
|
|
||||||
QCommandLineOption urlOption(QStringList() << "u" << "url", "The proxy server url. Default ssl://dev-remoteproxy.nymea.io:4433", "url");
|
QCommandLineOption urlOption(QStringList() << "u" << "url", "The proxy server url. Default ssl://dev-remoteproxy.nymea.io:4433", "url");
|
||||||
urlOption.setDefaultValue("ssl://dev-remoteproxy.nymea.io:4433");
|
urlOption.setDefaultValue("ssl://dev-remoteproxy.nymea.io:4433");
|
||||||
|
|||||||
@ -61,8 +61,10 @@ void TcpSocketServer::sendData(const QUuid &clientId, const QByteArray &data)
|
|||||||
void TcpSocketServer::killClientConnection(const QUuid &clientId, const QString &killReason)
|
void TcpSocketServer::killClientConnection(const QUuid &clientId, const QString &killReason)
|
||||||
{
|
{
|
||||||
QTcpSocket *client = m_clientList.value(clientId);
|
QTcpSocket *client = m_clientList.value(clientId);
|
||||||
if (!client)
|
if (!client) {
|
||||||
|
qCWarning(dcTcpSocketServer()) << "Could not kill connection with id" << clientId.toString() << "with reason" << killReason << "because there is no socket with this id.";
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
qCDebug(dcTcpSocketServer()) << "Killing client connection" << clientId.toString() << "Reason:" << killReason;
|
qCDebug(dcTcpSocketServer()) << "Killing client connection" << clientId.toString() << "Reason:" << killReason;
|
||||||
client->close();
|
client->close();
|
||||||
@ -83,7 +85,7 @@ void TcpSocketServer::onDataAvailable(QSslSocket *client, const QByteArray &data
|
|||||||
emit dataAvailable(clientId, data);
|
emit dataAvailable(clientId, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TcpSocketServer::onClientConnected(QSslSocket *client)
|
void TcpSocketServer::onSocketConnected(QSslSocket *client)
|
||||||
{
|
{
|
||||||
QUuid clientId = QUuid::createUuid();
|
QUuid clientId = QUuid::createUuid();
|
||||||
qCDebug(dcTcpSocketServer()) << "New client connected:" << client << client->peerAddress().toString() << clientId.toString();
|
qCDebug(dcTcpSocketServer()) << "New client connected:" << client << client->peerAddress().toString() << clientId.toString();
|
||||||
@ -91,7 +93,7 @@ void TcpSocketServer::onClientConnected(QSslSocket *client)
|
|||||||
emit clientConnected(clientId, client->peerAddress());
|
emit clientConnected(clientId, client->peerAddress());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TcpSocketServer::onClientDisconnected(QSslSocket *client)
|
void TcpSocketServer::onSocketDisconnected(QSslSocket *client)
|
||||||
{
|
{
|
||||||
QUuid clientId = m_clientList.key(client);
|
QUuid clientId = m_clientList.key(client);
|
||||||
qCDebug(dcTcpSocketServer()) << "Client disconnected:" << client << client->peerAddress().toString() << clientId.toString();
|
qCDebug(dcTcpSocketServer()) << "Client disconnected:" << client << client->peerAddress().toString() << clientId.toString();
|
||||||
@ -112,8 +114,8 @@ bool TcpSocketServer::startServer()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(m_server, &SslServer::clientConnected, this, &TcpSocketServer::onClientConnected);
|
connect(m_server, &SslServer::socketConnected, this, &TcpSocketServer::onSocketConnected);
|
||||||
connect(m_server, &SslServer::clientDisconnected, this, &TcpSocketServer::onClientDisconnected);
|
connect(m_server, &SslServer::socketDisconnected, this, &TcpSocketServer::onSocketDisconnected);
|
||||||
connect(m_server, &SslServer::dataAvailable, this, &TcpSocketServer::onDataAvailable);
|
connect(m_server, &SslServer::dataAvailable, this, &TcpSocketServer::onDataAvailable);
|
||||||
qCDebug(dcTcpSocketServer()) << "Server started successfully.";
|
qCDebug(dcTcpSocketServer()) << "Server started successfully.";
|
||||||
return true;
|
return true;
|
||||||
@ -149,13 +151,13 @@ void SslServer::incomingConnection(qintptr socketDescriptor)
|
|||||||
QSslSocket *sslSocket = new QSslSocket(this);
|
QSslSocket *sslSocket = new QSslSocket(this);
|
||||||
qCDebug(dcTcpSocketServer()) << "Incomming connection" << sslSocket;
|
qCDebug(dcTcpSocketServer()) << "Incomming connection" << sslSocket;
|
||||||
connect(sslSocket, &QSslSocket::readyRead, this, &SslServer::onSocketReadyRead);
|
connect(sslSocket, &QSslSocket::readyRead, this, &SslServer::onSocketReadyRead);
|
||||||
connect(sslSocket, &QSslSocket::disconnected, this, &SslServer::onClientDisconnected);
|
connect(sslSocket, &QSslSocket::disconnected, this, &SslServer::onSocketDisconnected);
|
||||||
|
|
||||||
typedef void (QAbstractSocket:: *errorSignal)(QAbstractSocket::SocketError);
|
typedef void (QAbstractSocket:: *errorSignal)(QAbstractSocket::SocketError);
|
||||||
connect(sslSocket, static_cast<errorSignal>(&QAbstractSocket::error), this, &SslServer::onSocketError);
|
connect(sslSocket, static_cast<errorSignal>(&QAbstractSocket::error), this, &SslServer::onSocketError);
|
||||||
connect(sslSocket, &QSslSocket::encrypted, this, [this, sslSocket](){
|
connect(sslSocket, &QSslSocket::encrypted, this, [this, sslSocket](){
|
||||||
qCDebug(dcTcpSocketServer()) << "SSL encryption established for" << sslSocket;
|
qCDebug(dcTcpSocketServer()) << "SSL encryption established for" << sslSocket;
|
||||||
emit clientConnected(sslSocket);
|
emit socketConnected(sslSocket);
|
||||||
});
|
});
|
||||||
|
|
||||||
typedef void (QSslSocket:: *sslErrorsSignal)(const QList<QSslError> &);
|
typedef void (QSslSocket:: *sslErrorsSignal)(const QList<QSslError> &);
|
||||||
@ -178,15 +180,15 @@ void SslServer::incomingConnection(qintptr socketDescriptor)
|
|||||||
//addPendingConnection(sslSocket);
|
//addPendingConnection(sslSocket);
|
||||||
sslSocket->startServerEncryption();
|
sslSocket->startServerEncryption();
|
||||||
} else {
|
} else {
|
||||||
emit clientConnected(sslSocket);
|
emit socketConnected(sslSocket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SslServer::onClientDisconnected()
|
void SslServer::onSocketDisconnected()
|
||||||
{
|
{
|
||||||
QSslSocket *sslSocket = qobject_cast<QSslSocket *>(sender());
|
QSslSocket *sslSocket = qobject_cast<QSslSocket *>(sender());
|
||||||
qCDebug(dcTcpSocketServer()) << "Client socket disconnected:" << sslSocket << sslSocket->peerAddress().toString();;
|
qCDebug(dcTcpSocketServer()) << "Client socket disconnected:" << sslSocket << sslSocket->peerAddress().toString();;
|
||||||
emit clientDisconnected(sslSocket);
|
emit socketDisconnected(sslSocket);
|
||||||
sslSocket->deleteLater();
|
sslSocket->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -50,15 +50,15 @@ private:
|
|||||||
QSslConfiguration m_config;
|
QSslConfiguration m_config;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void clientConnected(QSslSocket *socket);
|
void socketConnected(QSslSocket *socket);
|
||||||
void clientDisconnected(QSslSocket *socket);
|
void socketDisconnected(QSslSocket *socket);
|
||||||
void dataAvailable(QSslSocket *socket, const QByteArray &data);
|
void dataAvailable(QSslSocket *socket, const QByteArray &data);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void incomingConnection(qintptr socketDescriptor) override;
|
void incomingConnection(qintptr socketDescriptor) override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onClientDisconnected();
|
void onSocketDisconnected();
|
||||||
void onSocketReadyRead();
|
void onSocketReadyRead();
|
||||||
void onSocketError(QAbstractSocket::SocketError);
|
void onSocketError(QAbstractSocket::SocketError);
|
||||||
|
|
||||||
@ -87,8 +87,8 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onDataAvailable(QSslSocket *client, const QByteArray &data);
|
void onDataAvailable(QSslSocket *client, const QByteArray &data);
|
||||||
void onClientConnected(QSslSocket *client);
|
void onSocketConnected(QSslSocket *client);
|
||||||
void onClientDisconnected(QSslSocket *client);
|
void onSocketDisconnected(QSslSocket *client);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
bool startServer() override;
|
bool startServer() override;
|
||||||
|
|||||||
@ -50,10 +50,11 @@ int main(int argc, char *argv[])
|
|||||||
parser.setApplicationDescription(QString("\nThe nymea remote proxy monitor allowes to monitor the live server activity on the a local instance.\n\n"
|
parser.setApplicationDescription(QString("\nThe nymea remote proxy monitor allowes to monitor the live server activity on the a local instance.\n\n"
|
||||||
"Server version: %1\n"
|
"Server version: %1\n"
|
||||||
"API version: %2\n\n"
|
"API version: %2\n\n"
|
||||||
"Copyright %3 2022 nymea GmbH <developer@nymea.io>\n")
|
"Copyright %3 %4 nymea GmbH <developer@nymea.io>\n")
|
||||||
.arg(SERVER_VERSION_STRING)
|
.arg(SERVER_VERSION_STRING)
|
||||||
.arg(API_VERSION_STRING)
|
.arg(API_VERSION_STRING)
|
||||||
.arg(QChar(0xA9)));
|
.arg(QChar(0xA9))
|
||||||
|
.arg(COPYRIGHT_YEAR_STRING));
|
||||||
|
|
||||||
|
|
||||||
QCommandLineOption socketOption(QStringList() << "s" << "socket", "The socket descriptor for the nymea-remoteproxy monitor socket. Default is /tmp/nymea-remoteproxy-monitor.sock", "socket");
|
QCommandLineOption socketOption(QStringList() << "s" << "socket", "The socket descriptor for the nymea-remoteproxy monitor socket. Default is /tmp/nymea-remoteproxy-monitor.sock", "socket");
|
||||||
|
|||||||
@ -15,7 +15,7 @@ authorizerLambdaFunction=system-services-authorizer-dev-checkToken
|
|||||||
awsCredentialsUrl=http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2-Remote-Connection-Proxy-Role
|
awsCredentialsUrl=http://169.254.169.254/latest/meta-data/iam/security-credentials/EC2-Remote-Connection-Proxy-Role
|
||||||
|
|
||||||
[SSL]
|
[SSL]
|
||||||
enabled=true
|
enabled=false
|
||||||
certificate=/etc/ssl/certs/ssl-cert-snakeoil.pem
|
certificate=/etc/ssl/certs/ssl-cert-snakeoil.pem
|
||||||
certificateKey=/etc/ssl/private/ssl-cert-snakeoil.key
|
certificateKey=/etc/ssl/private/ssl-cert-snakeoil.key
|
||||||
certificateChain=
|
certificateChain=
|
||||||
|
|||||||
@ -4,6 +4,7 @@ include(nymea-remoteproxy.pri)
|
|||||||
SERVER_NAME=nymea-remoteproxy
|
SERVER_NAME=nymea-remoteproxy
|
||||||
API_VERSION_MAJOR=0
|
API_VERSION_MAJOR=0
|
||||||
API_VERSION_MINOR=5
|
API_VERSION_MINOR=5
|
||||||
|
COPYRIGHT_YEAR=2023
|
||||||
|
|
||||||
# Parse and export SERVER_VERSION
|
# Parse and export SERVER_VERSION
|
||||||
SERVER_VERSION=$$system('dpkg-parsechangelog | sed -n -e "s/^Version: //p"')
|
SERVER_VERSION=$$system('dpkg-parsechangelog | sed -n -e "s/^Version: //p"')
|
||||||
|
|||||||
@ -118,10 +118,11 @@ int main(int argc, char *argv[])
|
|||||||
"registered nymea deamons to establish a tunnel connection.\n\n"
|
"registered nymea deamons to establish a tunnel connection.\n\n"
|
||||||
"Version: %1\n"
|
"Version: %1\n"
|
||||||
"API version: %2\n\n"
|
"API version: %2\n\n"
|
||||||
"Copyright %3 2022 nymea GmbH <developer@nymea.io>\n")
|
"Copyright %3 %4 nymea GmbH <developer@nymea.io>\n")
|
||||||
.arg(SERVER_VERSION_STRING)
|
.arg(SERVER_VERSION_STRING)
|
||||||
.arg(API_VERSION_STRING)
|
.arg(API_VERSION_STRING)
|
||||||
.arg(QChar(0xA9)));
|
.arg(QChar(0xA9))
|
||||||
|
.arg(COPYRIGHT_YEAR_STRING));
|
||||||
|
|
||||||
QCommandLineOption logfileOption(QStringList() << "l" << "logging", "Write log file to the given logfile.",
|
QCommandLineOption logfileOption(QStringList() << "l" << "logging", "Write log file to the given logfile.",
|
||||||
"logfile", "/var/log/nymea-remoteproxy.log");
|
"logfile", "/var/log/nymea-remoteproxy.log");
|
||||||
|
|||||||
@ -3,16 +3,24 @@
|
|||||||
CHILD_PROCESSES=()
|
CHILD_PROCESSES=()
|
||||||
SERVER_URL=tcp://127.0.0.1:2213
|
SERVER_URL=tcp://127.0.0.1:2213
|
||||||
|
|
||||||
|
SERVER_COUNTER=0
|
||||||
|
CLIENT_COUNTER=0
|
||||||
|
TOTAL_COUNTER=0
|
||||||
|
|
||||||
# Start server: Arguments: serverName serverUuid
|
# Start server: Arguments: serverName serverUuid
|
||||||
function createServer() {
|
function createServer() {
|
||||||
echo "--> Create server"
|
echo "--> Create server"
|
||||||
nymea-remoteproxy-tunnelclient -s -n "$1" --uuid "$2" -u $SERVER_URL -i & CHILD_PROCESSES+=("$!")
|
SERVER_COUNTER=$(($SERVER_COUNTER + 1))
|
||||||
|
TOTAL_COUNTER=$(($TOTAL_COUNTER + 1))
|
||||||
|
nymea-remoteproxy-tunnelclient -s -r -n "$1" --uuid "$2" -u $SERVER_URL -i & CHILD_PROCESSES+=("$!")
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create client: Arguments: clientName serverUuid
|
# Create client: Arguments: clientName serverUuid
|
||||||
function createClient() {
|
function createClient() {
|
||||||
echo "--> Create client"
|
echo "--> Create client"
|
||||||
nymea-remoteproxy-tunnelclient -c -n "$1" --server-uuid "$2" -u $SERVER_URL -i & CHILD_PROCESSES+=("$!")
|
CLIENT_COUNTER=$(($CLIENT_COUNTER + 1))
|
||||||
|
TOTAL_COUNTER=$(($TOTAL_COUNTER + 1))
|
||||||
|
nymea-remoteproxy-tunnelclient -c -r -n "$1" --server-uuid "$2" -u $SERVER_URL -i & CHILD_PROCESSES+=("$!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -38,7 +46,6 @@ function cleanup {
|
|||||||
|
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
|
||||||
createTunnelConnections 5
|
createTunnelConnections 5
|
||||||
createTunnelConnections 3
|
createTunnelConnections 3
|
||||||
createTunnelConnections 9
|
createTunnelConnections 9
|
||||||
@ -52,4 +59,11 @@ createTunnelConnections 2
|
|||||||
createTunnelConnections 1
|
createTunnelConnections 1
|
||||||
createTunnelConnections 8
|
createTunnelConnections 8
|
||||||
|
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
echo "------------------------------"
|
||||||
|
echo "Total: $TOTAL_COUNTER"
|
||||||
|
echo "Servers: $SERVER_COUNTER"
|
||||||
|
echo "Clients: $CLIENT_COUNTER"
|
||||||
|
|
||||||
sleep 300
|
sleep 300
|
||||||
|
|||||||
@ -1,15 +1,22 @@
|
|||||||
#include "clientconnection.h"
|
#include "clientconnection.h"
|
||||||
|
|
||||||
ClientConnection::ClientConnection(const QUrl &serverUrl, const QString &name, const QUuid &uuid, const QUuid &serverUuid, bool insecure, QObject *parent) :
|
ClientConnection::ClientConnection(const QUrl &serverUrl, const QString &name, const QUuid &uuid, const QUuid &serverUuid, bool insecure, bool sendRandomData, QObject *parent) :
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
m_serverUrl(serverUrl),
|
m_serverUrl(serverUrl),
|
||||||
m_name(name),
|
m_name(name),
|
||||||
m_uuid(uuid),
|
m_uuid(uuid),
|
||||||
m_serverUuid(serverUuid),
|
m_serverUuid(serverUuid),
|
||||||
m_insecure(insecure)
|
m_insecure(insecure),
|
||||||
|
m_sendRandomData(sendRandomData)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_remoteConnection = new TunnelProxyRemoteConnection(m_uuid, m_name);
|
m_remoteConnection = new TunnelProxyRemoteConnection(m_uuid, m_name);
|
||||||
|
m_timer.setSingleShot(true);
|
||||||
|
connect(&m_timer, &QTimer::timeout, this, [=](){
|
||||||
|
if (m_remoteConnection->remoteConnected()) {
|
||||||
|
m_remoteConnection->sendData(generateRandomString(100).toUtf8());
|
||||||
|
m_timer.start(1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
connect(m_remoteConnection, &TunnelProxyRemoteConnection::stateChanged, this, [this](TunnelProxyRemoteConnection::State state){
|
connect(m_remoteConnection, &TunnelProxyRemoteConnection::stateChanged, this, [this](TunnelProxyRemoteConnection::State state){
|
||||||
qDebug() << state;
|
qDebug() << state;
|
||||||
@ -22,12 +29,16 @@ ClientConnection::ClientConnection(const QUrl &serverUrl, const QString &name, c
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(m_remoteConnection, &TunnelProxyRemoteConnection::remoteConnectedChanged, this, [](bool remoteConnected){
|
connect(m_remoteConnection, &TunnelProxyRemoteConnection::remoteConnectedChanged, this, [this](bool remoteConnected){
|
||||||
qDebug() << "Remote connection" << (remoteConnected ? "established successfully" : "disconnected");
|
qDebug() << "Remote connection" << (remoteConnected ? "established successfully" : "disconnected");
|
||||||
|
if (remoteConnected) {
|
||||||
|
m_timer.start(1000);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(m_remoteConnection, &TunnelProxyRemoteConnection::dataReady, this, [](const QByteArray &data){
|
connect(m_remoteConnection, &TunnelProxyRemoteConnection::dataReady, this, [this](const QByteArray &data){
|
||||||
qDebug() << "Data received" << data;
|
if (!m_sendRandomData)
|
||||||
|
qDebug() << "Data received" << data;
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(m_remoteConnection, &TunnelProxyRemoteConnection::errorOccurred, this, [](QAbstractSocket::SocketError error){
|
connect(m_remoteConnection, &TunnelProxyRemoteConnection::errorOccurred, this, [](QAbstractSocket::SocketError error){
|
||||||
@ -50,3 +61,13 @@ void ClientConnection::connectToServer()
|
|||||||
{
|
{
|
||||||
m_remoteConnection->connectServer(m_serverUrl, m_serverUuid);
|
m_remoteConnection->connectServer(m_serverUrl, m_serverUuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString ClientConnection::generateRandomString(uint length) const
|
||||||
|
{
|
||||||
|
const QString possibleCharacters("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
|
||||||
|
QString randomString;
|
||||||
|
for(uint i = 0; i < length; i++) {
|
||||||
|
randomString.append(possibleCharacters.at(qrand() % possibleCharacters.length()));
|
||||||
|
}
|
||||||
|
return randomString;
|
||||||
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#include "tunnelproxy/tunnelproxyremoteconnection.h"
|
#include "tunnelproxy/tunnelproxyremoteconnection.h"
|
||||||
|
|
||||||
@ -12,7 +13,7 @@ class ClientConnection : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ClientConnection(const QUrl &serverUrl, const QString &name, const QUuid &uuid, const QUuid &serverUuid, bool insecure, QObject *parent = nullptr);
|
explicit ClientConnection(const QUrl &serverUrl, const QString &name, const QUuid &uuid, const QUuid &serverUuid, bool insecure, bool sendRandomData, QObject *parent = nullptr);
|
||||||
|
|
||||||
void connectToServer();
|
void connectToServer();
|
||||||
|
|
||||||
@ -22,10 +23,12 @@ private:
|
|||||||
QUuid m_uuid;
|
QUuid m_uuid;
|
||||||
QUuid m_serverUuid;
|
QUuid m_serverUuid;
|
||||||
bool m_insecure = false;
|
bool m_insecure = false;
|
||||||
|
bool m_sendRandomData = false;
|
||||||
|
|
||||||
TunnelProxyRemoteConnection *m_remoteConnection = nullptr;
|
TunnelProxyRemoteConnection *m_remoteConnection = nullptr;
|
||||||
|
QTimer m_timer;
|
||||||
|
|
||||||
|
QString generateRandomString(uint length) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CLIENTCONNECTION_H
|
#endif // CLIENTCONNECTION_H
|
||||||
|
|||||||
@ -113,10 +113,11 @@ int main(int argc, char *argv[])
|
|||||||
"or server on the tunnel proxy interface.\n\n"
|
"or server on the tunnel proxy interface.\n\n"
|
||||||
"Version: %1\n"
|
"Version: %1\n"
|
||||||
"API version: %2\n\n"
|
"API version: %2\n\n"
|
||||||
"Copyright %3 2021 nymea GmbH <developer@nymea.io>\n")
|
"Copyright %3 %4 nymea GmbH <developer@nymea.io>\n")
|
||||||
.arg(SERVER_VERSION_STRING)
|
.arg(SERVER_VERSION_STRING)
|
||||||
.arg(API_VERSION_STRING)
|
.arg(API_VERSION_STRING)
|
||||||
.arg(QChar(0xA9)));
|
.arg(QChar(0xA9))
|
||||||
|
.arg(COPYRIGHT_YEAR_STRING));
|
||||||
|
|
||||||
QCommandLineOption urlOption(QStringList() << "u" << "url", "The proxy server url. Default ssl://dev-remoteproxy.nymea.io:2213", "url");
|
QCommandLineOption urlOption(QStringList() << "u" << "url", "The proxy server url. Default ssl://dev-remoteproxy.nymea.io:2213", "url");
|
||||||
urlOption.setDefaultValue("ssl://dev-remoteproxy.nymea.io:2213");
|
urlOption.setDefaultValue("ssl://dev-remoteproxy.nymea.io:2213");
|
||||||
@ -134,6 +135,9 @@ int main(int argc, char *argv[])
|
|||||||
QCommandLineOption nameOption(QStringList() << "n" << "name", "The name of the connecting client. If not specified a default name will be selected.", "name");
|
QCommandLineOption nameOption(QStringList() << "n" << "name", "The name of the connecting client. If not specified a default name will be selected.", "name");
|
||||||
parser.addOption(nameOption);
|
parser.addOption(nameOption);
|
||||||
|
|
||||||
|
QCommandLineOption randomDataOption(QStringList() << "r" << "random", "Send random data trough the tunnel. If you start a server, it will echo any client data received.");
|
||||||
|
parser.addOption(randomDataOption);
|
||||||
|
|
||||||
QCommandLineOption uuidOption(QStringList() << "uuid", "The uuid of the connecting client. If not specified, a new one will be created.", "uuid");
|
QCommandLineOption uuidOption(QStringList() << "uuid", "The uuid of the connecting client. If not specified, a new one will be created.", "uuid");
|
||||||
parser.addOption(uuidOption);
|
parser.addOption(uuidOption);
|
||||||
|
|
||||||
@ -196,7 +200,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
|
|
||||||
// Create the server connection
|
// Create the server connection
|
||||||
ServerConnection *server = new ServerConnection(serverUrl, name, uuid, parser.isSet(insecureOption));
|
ServerConnection *server = new ServerConnection(serverUrl, name, uuid, parser.isSet(insecureOption), parser.isSet(randomDataOption));
|
||||||
server->startServer();
|
server->startServer();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -238,7 +242,7 @@ int main(int argc, char *argv[])
|
|||||||
QLoggingCategory::installFilter(loggingCategoryFilter);
|
QLoggingCategory::installFilter(loggingCategoryFilter);
|
||||||
|
|
||||||
// Create the server connection
|
// Create the server connection
|
||||||
ClientConnection *client = new ClientConnection(serverUrl, name, uuid, serverUuid, parser.isSet(insecureOption));
|
ClientConnection *client = new ClientConnection(serverUrl, name, uuid, serverUuid, parser.isSet(insecureOption), parser.isSet(randomDataOption));
|
||||||
client->connectToServer();
|
client->connectToServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,23 @@
|
|||||||
#include "serverconnection.h"
|
#include "serverconnection.h"
|
||||||
|
|
||||||
ServerConnection::ServerConnection(const QUrl &serverUrl, const QString &name, const QUuid &uuid, bool insecure, QObject *parent) :
|
ServerConnection::ServerConnection(const QUrl &serverUrl, const QString &name, const QUuid &uuid, bool insecure, bool echo, QObject *parent) :
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
m_serverUrl(serverUrl),
|
m_serverUrl(serverUrl),
|
||||||
m_name(name),
|
m_name(name),
|
||||||
m_uuid(uuid),
|
m_uuid(uuid),
|
||||||
m_insecure(insecure)
|
m_insecure(insecure),
|
||||||
|
m_echo(echo)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_socketServer = new TunnelProxySocketServer(m_uuid, m_name, this);
|
m_socketServer = new TunnelProxySocketServer(m_uuid, m_name, this);
|
||||||
|
|
||||||
connect(m_socketServer, &TunnelProxySocketServer::clientConnected, this, [=](TunnelProxySocket *tunnelProxySocket){
|
connect(m_socketServer, &TunnelProxySocketServer::clientConnected, this, [=](TunnelProxySocket *tunnelProxySocket){
|
||||||
qDebug() << "[+] Client connected" << tunnelProxySocket;
|
qDebug() << "[+] Client connected" << tunnelProxySocket;
|
||||||
|
if (m_echo) {
|
||||||
|
connect(tunnelProxySocket, &TunnelProxySocket::dataReceived, m_socketServer, [tunnelProxySocket](const QByteArray &data){
|
||||||
|
tunnelProxySocket->writeData(data);
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(m_socketServer, &TunnelProxySocketServer::clientDisconnected, this, [=](TunnelProxySocket *tunnelProxySocket){
|
connect(m_socketServer, &TunnelProxySocketServer::clientDisconnected, this, [=](TunnelProxySocket *tunnelProxySocket){
|
||||||
@ -35,7 +41,6 @@ ServerConnection::ServerConnection(const QUrl &serverUrl, const QString &name, c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerConnection::startServer()
|
void ServerConnection::startServer()
|
||||||
|
|||||||
@ -12,7 +12,7 @@ class ServerConnection : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ServerConnection(const QUrl &serverUrl, const QString &name, const QUuid &uuid, bool insecure, QObject *parent = nullptr);
|
explicit ServerConnection(const QUrl &serverUrl, const QString &name, const QUuid &uuid, bool insecure, bool echo, QObject *parent = nullptr);
|
||||||
|
|
||||||
void startServer();
|
void startServer();
|
||||||
|
|
||||||
@ -21,6 +21,7 @@ private:
|
|||||||
QString m_name;
|
QString m_name;
|
||||||
QUuid m_uuid;
|
QUuid m_uuid;
|
||||||
bool m_insecure = false;
|
bool m_insecure = false;
|
||||||
|
bool m_echo = false;
|
||||||
|
|
||||||
TunnelProxySocketServer *m_socketServer = nullptr;
|
TunnelProxySocketServer *m_socketServer = nullptr;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -34,5 +34,6 @@
|
|||||||
#define SERVER_NAME_STRING '"$$SERVER_NAME"'
|
#define SERVER_NAME_STRING '"$$SERVER_NAME"'
|
||||||
#define SERVER_VERSION_STRING '"$$SERVER_VERSION"'
|
#define SERVER_VERSION_STRING '"$$SERVER_VERSION"'
|
||||||
#define API_VERSION_STRING '"$$API_VERSION_MAJOR.$$API_VERSION_MINOR"'
|
#define API_VERSION_STRING '"$$API_VERSION_MAJOR.$$API_VERSION_MINOR"'
|
||||||
|
#define COPYRIGHT_YEAR_STRING '"$$COPYRIGHT_YEAR"'
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user