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 * Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2015 - 2016 Symless Ltd. * SPDX-FileCopyrightText: (C) 2015 - 2016 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/ */
@ -25,9 +26,12 @@ static const char s_certificateFileExt[] = {"pem"};
// //
SecureListenSocket::SecureListenSocket( 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; SecureSocket *socket = NULL;
try { 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); socket->initSsl(true);
if (socket != NULL) { if (socket != NULL) {

View file

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

View file

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

View file

@ -1,11 +1,13 @@
/* /*
* Deskflow -- mouse and keyboard sharing utility * Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2015 - 2016 Symless Ltd. * SPDX-FileCopyrightText: (C) 2015 - 2016 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/ */
#pragma once #pragma once
#include "net/SecurityLevel.h"
#include "net/TCPSocket.h" #include "net/TCPSocket.h"
#include "net/XSocket.h" #include "net/XSocket.h"
#include <mutex> #include <mutex>
@ -23,8 +25,14 @@ A secure socket using SSL.
class SecureSocket : public TCPSocket class SecureSocket : public TCPSocket
{ {
public: public:
SecureSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::EAddressFamily family); SecureSocket(
SecureSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket); 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 const &) = delete;
SecureSocket(SecureSocket &&) = delete; SecureSocket(SecureSocket &&) = delete;
~SecureSocket(); ~SecureSocket();
@ -84,4 +92,5 @@ private:
Ssl *m_ssl; Ssl *m_ssl;
bool m_secureReady; bool m_secureReady;
bool m_fatal; 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 IDataSocket *TCPSocketFactory::create(IArchNetwork::EAddressFamily family, SecurityLevel securityLevel) const
{ {
if (securityLevel != SecurityLevel::PlainText) { 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); secureSocket->initSsl(false);
return secureSocket; return secureSocket;
} else { } else {
@ -45,7 +45,7 @@ IListenSocket *TCPSocketFactory::createListen(IArchNetwork::EAddressFamily famil
{ {
IListenSocket *socket = NULL; IListenSocket *socket = NULL;
if (securityLevel != SecurityLevel::PlainText) { if (securityLevel != SecurityLevel::PlainText) {
socket = new SecureListenSocket(m_events, m_socketMultiplexer, family); socket = new SecureListenSocket(m_events, m_socketMultiplexer, family, securityLevel);
} else { } else {
socket = new TCPListenSocket(m_events, m_socketMultiplexer, family); socket = new TCPListenSocket(m_events, m_socketMultiplexer, family);
} }