refactor: use enum for secure sockets

based on barrier: 57769cf
This commit is contained in:
sithlord48
2024-11-28 07:51:24 -05:00
committed by Nick Bolton
parent e996471e37
commit 60c7e512f2
5 changed files with 38 additions and 12 deletions

View File

@ -1,5 +1,6 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2015 - 2016 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
@ -25,9 +26,12 @@ static const char s_certificateFileExt[] = {"pem"};
//
SecureListenSocket::SecureListenSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
SecurityLevel securityLevel
)
: TCPListenSocket(events, socketMultiplexer, family)
: TCPListenSocket(events, socketMultiplexer, family),
m_securityLevel{securityLevel}
{
}
@ -35,7 +39,7 @@ IDataSocket *SecureListenSocket::accept()
{
SecureSocket *socket = NULL;
try {
socket = new SecureSocket(m_events, m_socketMultiplexer, ARCH->acceptSocket(m_socket, NULL));
socket = new SecureSocket(m_events, m_socketMultiplexer, ARCH->acceptSocket(m_socket, NULL), m_securityLevel);
socket->initSsl(true);
if (socket != NULL) {

View File

@ -1,5 +1,6 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2015 - 2016 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
@ -7,6 +8,7 @@
#pragma once
#include "common/stdset.h"
#include "net/SecurityLevel.h"
#include "net/TCPListenSocket.h"
class IEventQueue;
@ -16,8 +18,14 @@ class IDataSocket;
class SecureListenSocket : public TCPListenSocket
{
public:
SecureListenSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family);
SecureListenSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
SecurityLevel securityLevel = SecurityLevel::PlainText
);
// IListenSocket overrides
virtual IDataSocket *accept();
private:
const SecurityLevel m_securityLevel;
};

View File

@ -51,20 +51,25 @@ struct Ssl
};
SecureSocket::SecureSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
SecurityLevel securityLevel
)
: TCPSocket(events, socketMultiplexer, family),
m_ssl(nullptr),
m_secureReady(false),
m_fatal(false)
m_fatal(false),
m_securityLevel{securityLevel}
{
}
SecureSocket::SecureSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket)
SecureSocket::SecureSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket, SecurityLevel securityLevel
)
: TCPSocket(events, socketMultiplexer, socket),
m_ssl(nullptr),
m_secureReady(false),
m_fatal(false)
m_fatal(false),
m_securityLevel{securityLevel}
{
}

View File

@ -1,11 +1,13 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2015 - 2016 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#pragma once
#include "net/SecurityLevel.h"
#include "net/TCPSocket.h"
#include "net/XSocket.h"
#include <mutex>
@ -23,8 +25,14 @@ A secure socket using SSL.
class SecureSocket : public TCPSocket
{
public:
SecureSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family);
SecureSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket);
SecureSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family,
SecurityLevel securityLevel = SecurityLevel::Encrypted
);
SecureSocket(
IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket,
SecurityLevel securityLevel = SecurityLevel::Encrypted
);
SecureSocket(SecureSocket const &) = delete;
SecureSocket(SecureSocket &&) = delete;
~SecureSocket();
@ -84,4 +92,5 @@ private:
Ssl *m_ssl;
bool m_secureReady;
bool m_fatal;
SecurityLevel m_securityLevel = SecurityLevel::Encrypted;
};

View File

@ -33,7 +33,7 @@ TCPSocketFactory::~TCPSocketFactory()
IDataSocket *TCPSocketFactory::create(IArchNetwork::EAddressFamily family, SecurityLevel securityLevel) const
{
if (securityLevel != SecurityLevel::PlainText) {
SecureSocket *secureSocket = new SecureSocket(m_events, m_socketMultiplexer, family);
SecureSocket *secureSocket = new SecureSocket(m_events, m_socketMultiplexer, family, securityLevel);
secureSocket->initSsl(false);
return secureSocket;
} else {
@ -45,7 +45,7 @@ IListenSocket *TCPSocketFactory::createListen(IArchNetwork::EAddressFamily famil
{
IListenSocket *socket = NULL;
if (securityLevel != SecurityLevel::PlainText) {
socket = new SecureListenSocket(m_events, m_socketMultiplexer, family);
socket = new SecureListenSocket(m_events, m_socketMultiplexer, family, securityLevel);
} else {
socket = new TCPListenSocket(m_events, m_socketMultiplexer, family);
}