Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
SecureSocket.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
4 * SPDX-FileCopyrightText: (C) 2015 - 2016 Symless Ltd.
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include "io/Filesystem.h"
11#include "net/SecurityLevel.h"
12#include "net/TCPSocket.h"
13#include "net/XSocket.h"
14
15#include <memory>
16#include <mutex>
17
18class IEventQueue;
21class QString;
22
23struct Ssl;
24
26
29class SecureSocket : public TCPSocket
30{
31public:
33 IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family,
35 );
37 IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket,
39 );
40 SecureSocket(SecureSocket const &) = delete;
42 ~SecureSocket() override;
43
46
47 // ISocket overrides
48 void close() override;
49
50 // IDataSocket overrides
51 void connect(const NetworkAddress &) override;
52
53 ISocketMultiplexerJob *newJob() override;
54 bool isFatal() const override
55 {
56 return m_fatal;
57 }
58 void isFatal(bool b)
59 {
60 m_fatal = b;
61 }
62 bool isSecureReady() const;
63 void secureConnect();
64 void secureAccept();
65 int secureRead(void *buffer, int size, int &read);
66 int secureWrite(const void *buffer, int size, int &wrote);
67 JobResult doRead() override;
68 JobResult doWrite() override;
69 void initSsl(bool server);
70 bool loadCertificates(const std::string &CertFile);
71
72private:
73 // SSL
74 void initContext(bool server);
75 void createSSL();
76 void freeSSL();
77 int secureAccept(int s);
78 int secureConnect(int s);
79 bool showCertificate() const;
80 void checkResult(int n, int &retry);
81 void disconnect();
82 bool verifyCertFingerprint(const QString &FingerprintDatabasePath) const;
83
84 ISocketMultiplexerJob *serviceConnect(ISocketMultiplexerJob *, bool, bool, bool);
85
86 ISocketMultiplexerJob *serviceAccept(ISocketMultiplexerJob *, bool, bool, bool);
87
88 void handleTCPConnected(const Event &event);
89
90private:
91 // all accesses to m_ssl must be protected by this mutex. The only function that is called
92 // from outside SocketMultiplexer thread is close(), so we mostly care about things accessed
93 // by it.
94 std::mutex ssl_mutex_;
95
96 std::unique_ptr<Ssl> m_ssl;
97 bool m_secureReady = false;
98 bool m_fatal = false;
100};
ArchSocketImpl * ArchSocket
Opaque socket type. An opaque type representing a socket.
Definition IArchNetwork.h:30
SecurityLevel
This enum is used to set how the client and server will communicate.
Definition SecurityLevel.h:14
@ Encrypted
Definition SecurityLevel.h:16
Event.
Definition Event.h:27
AddressFamily
Supported address families.
Definition IArchNetwork.h:57
Event queue interface.
Definition IEventQueue.h:32
Socket multiplexer job.
Definition ISocketMultiplexerJob.h:18
Network address type.
Definition NetworkAddress.h:18
ISocketMultiplexerJob * newJob() override
Definition SecureSocket.cpp:87
~SecureSocket() override
Definition SecureSocket.cpp:68
bool loadCertificates(const std::string &CertFile)
Definition SecureSocket.cpp:292
SecureSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family, SecurityLevel securityLevel=SecurityLevel::Encrypted)
Definition SecureSocket.cpp:49
SecureSocket & operator=(SecureSocket const &)=delete
SecureSocket(SecureSocket const &)=delete
void secureConnect()
Definition SecureSocket.cpp:98
bool isSecureReady() const
Definition SecureSocket.cpp:278
int secureWrite(const void *buffer, int size, int &wrote)
Definition SecureSocket.cpp:250
void close() override
Close socket.
Definition SecureSocket.cpp:73
SecureSocket & operator=(SecureSocket &&)=delete
void secureAccept()
Definition SecureSocket.cpp:105
void initSsl(bool server)
Definition SecureSocket.cpp:283
int secureRead(void *buffer, int size, int &read)
Definition SecureSocket.cpp:223
SecureSocket(SecureSocket &&)=delete
bool isFatal() const override
Definition SecureSocket.h:54
void isFatal(bool b)
Definition SecureSocket.h:58
void connect(const NetworkAddress &) override
Connect socket.
Definition SecureSocket.cpp:79
JobResult doRead() override
Definition SecureSocket.cpp:112
JobResult doWrite() override
Definition SecureSocket.cpp:169
Socket multiplexer.
Definition SocketMultiplexer.h:26
JobResult
Definition TCPSocket.h:63
uint32_t read(void *buffer, uint32_t n) override
Read from stream.
Definition TCPSocket.cpp:118
TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family=IArchNetwork::AddressFamily::INet)
Definition TCPSocket.cpp:30
Definition SecureSocket.cpp:39