Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
TCPSocket.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
4 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include "arch/IArchNetwork.h"
11#include "io/StreamBuffer.h"
12#include "mt/CondVar.h"
13#include "mt/Mutex.h"
14#include "net/IDataSocket.h"
15
16class Mutex;
17class Thread;
19class IEventQueue;
21
23
26class TCPSocket : public IDataSocket
27{
28public:
30 IEventQueue *events, SocketMultiplexer *socketMultiplexer,
32 );
33 TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket);
34 TCPSocket(TCPSocket const &) = delete;
35 TCPSocket(TCPSocket &&) = delete;
36 ~TCPSocket() override;
37
38 TCPSocket &operator=(TCPSocket const &) = delete;
40
41 // ISocket overrides
42 void bind(const NetworkAddress &) override;
43 void close() override;
44 void *getEventTarget() const override;
45
46 // IStream overrides
47 uint32_t read(void *buffer, uint32_t n) override;
48 void write(const void *buffer, uint32_t n) override;
49 void flush() override;
50 void shutdownInput() override;
51 void shutdownOutput() override;
52 bool isReady() const override;
53 bool isFatal() const override;
54 uint32_t getSize() const override;
55
56 // IDataSocket overrides
57 void connect(const NetworkAddress &) override;
58
60
61protected:
62 enum class JobResult
63 {
64 Break = -1,
67 };
68
70 {
71 return m_socket;
72 }
74 {
75 return m_events;
76 }
77 virtual JobResult doRead();
78 virtual JobResult doWrite();
79
81
82 bool isConnected() const
83 {
84 return m_connected;
85 }
86
87 void setConnected(bool connected)
88 {
89 if (m_connected == connected)
90 return;
91 m_connected = connected;
92 }
93
94 bool isReadable() const
95 {
96 return m_readable;
97 }
98
99 void setReadable(bool readable)
100 {
101 if (m_readable == readable)
102 return;
103 m_readable = readable;
104 }
105
106 bool isWritable() const
107 {
108 return m_writable;
109 }
110
111 void setWritable(bool canWrite)
112 {
113 if (canWrite == m_writable)
114 return;
115 m_writable = canWrite;
116 }
117
119 {
120 return m_mutex;
121 }
122
123 void sendEvent(EventTypes);
124 void discardWrittenData(int bytesWrote);
125
129
130private:
131 void init();
132
133 void sendConnectionFailedEvent(const char *);
134 void onConnected();
135 void onInputShutdown();
136 void onOutputShutdown();
137 void onDisconnected();
138
139 ISocketMultiplexerJob *serviceConnecting(ISocketMultiplexerJob *, bool, bool, bool);
140 ISocketMultiplexerJob *serviceConnected(ISocketMultiplexerJob *, bool, bool, bool);
141
142 bool m_readable;
143 bool m_writable;
144 bool m_connected;
145 Mutex m_mutex;
146 ArchSocket m_socket;
147 CondVar<bool> m_flushed;
148 SocketMultiplexer *m_socketMultiplexer;
149};
ArchSocketImpl * ArchSocket
Opaque socket type. An opaque type representing a socket.
Definition IArchNetwork.h:30
Condition variable.
Definition CondVar.h:122
AddressFamily
Supported address families.
Definition IArchNetwork.h:57
@ INet
Definition IArchNetwork.h:59
IDataSocket(const IEventQueue *events)
Definition IDataSocket.h:32
Event queue interface.
Definition IEventQueue.h:32
Socket multiplexer job.
Definition ISocketMultiplexerJob.h:18
Mutual exclusion.
Definition Mutex.h:22
Network address type.
Definition NetworkAddress.h:18
Socket multiplexer.
Definition SocketMultiplexer.h:26
FIFO of bytes.
Definition StreamBuffer.h:20
JobResult
Definition TCPSocket.h:63
@ New
Require a new job.
Definition TCPSocket.h:66
@ Retry
Retry the same job.
Definition TCPSocket.h:65
@ Break
Break the Job chain.
Definition TCPSocket.h:64
Mutex & getMutex()
Definition TCPSocket.h:118
void shutdownInput() override
Shutdown input.
Definition TCPSocket.cpp:178
bool isFatal() const override
Definition TCPSocket.cpp:236
~TCPSocket() override
Definition TCPSocket.cpp:64
void close() override
Close socket.
Definition TCPSocket.cpp:85
IEventQueue * m_events
Definition TCPSocket.h:126
void flush() override
Flush the stream.
Definition TCPSocket.cpp:170
void sendEvent(EventTypes)
Definition TCPSocket.cpp:401
TCPSocket & operator=(TCPSocket &&)=delete
void discardWrittenData(int bytesWrote)
Definition TCPSocket.cpp:406
uint32_t getSize() const override
Get bytes available to read.
Definition TCPSocket.cpp:243
virtual ISocketMultiplexerJob * newJob()
Definition TCPSocket.cpp:369
TCPSocket(TCPSocket const &)=delete
ArchSocket getSocket()
Definition TCPSocket.h:69
TCPSocket & operator=(TCPSocket const &)=delete
void connect(const NetworkAddress &) override
Connect socket.
Definition TCPSocket.cpp:249
void bind(const NetworkAddress &) override
Bind socket to address.
Definition TCPSocket.cpp:74
TCPSocket(TCPSocket &&)=delete
virtual JobResult doWrite()
Definition TCPSocket.cpp:341
void setReadable(bool readable)
Definition TCPSocket.h:99
uint32_t read(void *buffer, uint32_t n) override
Read from stream.
Definition TCPSocket.cpp:118
void setWritable(bool canWrite)
Definition TCPSocket.h:111
void setJob(ISocketMultiplexerJob *)
Definition TCPSocket.cpp:359
void write(const void *buffer, uint32_t n) override
Write to stream.
Definition TCPSocket.cpp:139
StreamBuffer m_outputBuffer
Definition TCPSocket.h:128
virtual JobResult doRead()
Definition TCPSocket.cpp:299
StreamBuffer m_inputBuffer
Definition TCPSocket.h:127
void setConnected(bool connected)
Definition TCPSocket.h:87
void shutdownOutput() override
Shutdown output.
Definition TCPSocket.cpp:204
bool isReady() const override
Test if read() will succeed.
Definition TCPSocket.cpp:230
void * getEventTarget() const override
Get event target.
Definition TCPSocket.cpp:113
bool isWritable() const
Definition TCPSocket.h:106
bool isReadable() const
Definition TCPSocket.h:94
IEventQueue * getEvents()
Definition TCPSocket.h:73
bool isConnected() const
Definition TCPSocket.h:82
TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family=IArchNetwork::AddressFamily::INet)
Definition TCPSocket.cpp:30
Thread handle.
Definition Thread.h:33
EventTypes
Definition EventTypes.h:13