Deskflow 1.24.0.365
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 "base/Event.h"
12#include "io/StreamBuffer.h"
13#include "mt/CondVar.h"
14#include "mt/Mutex.h"
15#include "net/IDataSocket.h"
16
17class Mutex;
18class Thread;
20class IEventQueue;
22
24
27class TCPSocket : public IDataSocket
28{
29public:
31 IEventQueue *events, SocketMultiplexer *socketMultiplexer,
33 );
34 TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, ArchSocket socket);
35 TCPSocket(TCPSocket const &) = delete;
36 TCPSocket(TCPSocket &&) = delete;
37 ~TCPSocket() override;
38
39 TCPSocket &operator=(TCPSocket const &) = delete;
41
42 // ISocket overrides
43 void bind(const NetworkAddress &) override;
44 void close() override;
45 void *getEventTarget() const override;
46
47 // IStream overrides
48 uint32_t read(void *buffer, uint32_t n) override;
49 void write(const void *buffer, uint32_t n) override;
50 void flush() override;
51 void shutdownInput() override;
52 void shutdownOutput() override;
53 bool isReady() const override;
54 bool isFatal() const override;
55 uint32_t getSize() const override;
56
57 // IDataSocket overrides
58 void connect(const NetworkAddress &) override;
59
61
62protected:
63 enum class JobResult
64 {
65 Break = -1,
68 };
69
71 {
72 return m_socket;
73 }
75 {
76 return m_events;
77 }
78 virtual JobResult doRead();
79 virtual JobResult doWrite();
80
82
83 bool isConnected() const
84 {
85 return m_connected;
86 }
87
88 void setConnected(bool connected)
89 {
90 if (m_connected == connected)
91 return;
92 m_connected = connected;
93 }
94
95 bool isReadable() const
96 {
97 return m_readable;
98 }
99
100 void setReadable(bool readable)
101 {
102 if (m_readable == readable)
103 return;
104 m_readable = readable;
105 }
106
107 bool isWritable() const
108 {
109 return m_writable;
110 }
111
112 void setWritable(bool canWrite)
113 {
114 if (canWrite == m_writable)
115 return;
116 m_writable = canWrite;
117 }
118
120 {
121 return m_mutex;
122 }
123
124 void sendEvent(EventTypes);
125 void discardWrittenData(int bytesWrote);
126
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 IEventQueue *m_events;
148 CondVar<bool> m_flushed;
149 SocketMultiplexer *m_socketMultiplexer;
150};
ArchSocketImpl * ArchSocket
Opaque socket type. An opaque type representing a socket.
Definition IArchNetwork.h:30
Condition variable.
Definition CondVar.h:121
AddressFamily
Supported address families.
Definition IArchNetwork.h:58
@ INet
Definition IArchNetwork.h:60
IDataSocket(const IEventQueue *events)
Definition IDataSocket.h:33
Event queue interface.
Definition IEventQueue.h:29
Socket multiplexer job.
Definition ISocketMultiplexerJob.h:18
Mutual exclusion.
Definition Mutex.h:22
Network address type.
Definition NetworkAddress.h:17
Socket multiplexer.
Definition SocketMultiplexer.h:24
FIFO of bytes.
Definition StreamBuffer.h:19
JobResult
Definition TCPSocket.h:64
@ New
Require a new job.
Definition TCPSocket.h:67
@ Retry
Retry the same job.
Definition TCPSocket.h:66
@ Break
Break the Job chain.
Definition TCPSocket.h:65
Mutex & getMutex()
Definition TCPSocket.h:119
void shutdownInput() override
Shutdown input.
Definition TCPSocket.cpp:177
bool isFatal() const override
Definition TCPSocket.cpp:235
~TCPSocket() override
Definition TCPSocket.cpp:63
void close() override
Close socket.
Definition TCPSocket.cpp:84
void flush() override
Flush the stream.
Definition TCPSocket.cpp:169
void sendEvent(EventTypes)
Definition TCPSocket.cpp:400
TCPSocket & operator=(TCPSocket &&)=delete
void discardWrittenData(int bytesWrote)
Definition TCPSocket.cpp:405
uint32_t getSize() const override
Get bytes available to read.
Definition TCPSocket.cpp:242
virtual ISocketMultiplexerJob * newJob()
Definition TCPSocket.cpp:368
TCPSocket(TCPSocket const &)=delete
ArchSocket getSocket()
Definition TCPSocket.h:70
TCPSocket & operator=(TCPSocket const &)=delete
void connect(const NetworkAddress &) override
Connect socket.
Definition TCPSocket.cpp:248
void bind(const NetworkAddress &) override
Bind socket to address.
Definition TCPSocket.cpp:73
TCPSocket(TCPSocket &&)=delete
virtual JobResult doWrite()
Definition TCPSocket.cpp:340
void setReadable(bool readable)
Definition TCPSocket.h:100
uint32_t read(void *buffer, uint32_t n) override
Read from stream.
Definition TCPSocket.cpp:117
void setWritable(bool canWrite)
Definition TCPSocket.h:112
void setJob(ISocketMultiplexerJob *)
Definition TCPSocket.cpp:358
void write(const void *buffer, uint32_t n) override
Write to stream.
Definition TCPSocket.cpp:138
StreamBuffer m_outputBuffer
Definition TCPSocket.h:128
virtual JobResult doRead()
Definition TCPSocket.cpp:298
StreamBuffer m_inputBuffer
Definition TCPSocket.h:127
void setConnected(bool connected)
Definition TCPSocket.h:88
void shutdownOutput() override
Shutdown output.
Definition TCPSocket.cpp:203
bool isReady() const override
Test if read() will succeed.
Definition TCPSocket.cpp:229
void * getEventTarget() const override
Get event target.
Definition TCPSocket.cpp:112
bool isWritable() const
Definition TCPSocket.h:107
bool isReadable() const
Definition TCPSocket.h:95
IEventQueue * getEvents()
Definition TCPSocket.h:74
bool isConnected() const
Definition TCPSocket.h:83
TCPSocket(IEventQueue *events, SocketMultiplexer *socketMultiplexer, IArchNetwork::AddressFamily family=IArchNetwork::AddressFamily::INet)
Definition TCPSocket.cpp:29
Thread handle.
Definition Thread.h:33
EventTypes
Definition EventTypes.h:13