Merge pull request #6826 from symless/SYNERGY-509-sonarcloud-critical-bugs-in-synergy-core
SonarCloud Critical bugs
This commit is contained in:
commit
20c830afb0
46 changed files with 263 additions and 11 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,3 +1,4 @@
|
|||
.vscode
|
||||
config.h
|
||||
.DS_Store
|
||||
*.pyc
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ Bug fixes:
|
|||
- #6660 + #6582 Add missing XAtom for utf-8 handling with Xorg
|
||||
- #6814 The system asks to save twice.
|
||||
- #6817 Configure requires dns_sd.h for enterprise version
|
||||
- #6826 SonarCloud Critical bugs
|
||||
- #6821 Blocker bugs found by sonar in synergy and in tests
|
||||
- #6825 The system requires google test even when tests are disabled with BUILD_TESTS=OFF
|
||||
|
||||
|
|
|
|||
|
|
@ -28,8 +28,13 @@ class CXWindowsClientTaskBarReceiver : public ClientTaskBarReceiver {
|
|||
public:
|
||||
CXWindowsClientTaskBarReceiver(
|
||||
const BufferedLogOutputter*, IEventQueue* events);
|
||||
CXWindowsClientTaskBarReceiver(const CXWindowsClientTaskBarReceiver &) =delete;
|
||||
CXWindowsClientTaskBarReceiver(CXWindowsClientTaskBarReceiver &&) =delete;
|
||||
virtual ~CXWindowsClientTaskBarReceiver();
|
||||
|
||||
CXWindowsClientTaskBarReceiver& operator=(const CXWindowsClientTaskBarReceiver &) =delete;
|
||||
CXWindowsClientTaskBarReceiver& operator=(CXWindowsClientTaskBarReceiver &&) =delete;
|
||||
|
||||
// IArchTaskBarReceiver overrides
|
||||
virtual void showStatus();
|
||||
virtual void runMenu(int x, int y);
|
||||
|
|
|
|||
|
|
@ -28,7 +28,12 @@ class CXWindowsServerTaskBarReceiver : public ServerTaskBarReceiver {
|
|||
public:
|
||||
CXWindowsServerTaskBarReceiver(
|
||||
const BufferedLogOutputter*, IEventQueue* events);
|
||||
CXWindowsServerTaskBarReceiver(const CXWindowsServerTaskBarReceiver&) =delete;
|
||||
CXWindowsServerTaskBarReceiver(CXWindowsServerTaskBarReceiver&&) =delete;
|
||||
virtual ~CXWindowsServerTaskBarReceiver();
|
||||
|
||||
CXWindowsServerTaskBarReceiver& operator=(const CXWindowsServerTaskBarReceiver&) =delete;
|
||||
CXWindowsServerTaskBarReceiver& operator=(const CXWindowsServerTaskBarReceiver&&) =delete;
|
||||
|
||||
// IArchTaskBarReceiver overrides
|
||||
virtual void showStatus();
|
||||
|
|
|
|||
|
|
@ -43,7 +43,12 @@ class ServerConfig : public BaseConfig, public GUI::Config::ConfigBase
|
|||
public:
|
||||
ServerConfig(int numColumns, int numRows,
|
||||
QString serverName, MainWindow* mainWindow);
|
||||
|
||||
ServerConfig(const ServerConfig &src) =default;
|
||||
ServerConfig(ServerConfig &&) =default;
|
||||
~ServerConfig();
|
||||
ServerConfig& operator=(const ServerConfig &src) =default;
|
||||
ServerConfig& operator=(ServerConfig &&) =delete;
|
||||
|
||||
public:
|
||||
const ScreenList& screens() const { return m_Screens; }
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ public:
|
|||
//! Call init on other arch classes.
|
||||
/*!
|
||||
Some arch classes depend on others to exist first. When init is called
|
||||
these clases will have ARCH available for use.
|
||||
these classes will have ARCH available for use.
|
||||
*/
|
||||
virtual void init();
|
||||
|
||||
|
|
@ -129,11 +129,16 @@ public:
|
|||
{
|
||||
ARCH->lockMutex(m_mutex);
|
||||
}
|
||||
ArchMutexLock(ArchMutexLock const &) =delete;
|
||||
ArchMutexLock(ArchMutexLock &&) =delete;
|
||||
~ArchMutexLock()
|
||||
{
|
||||
ARCH->unlockMutex(m_mutex);
|
||||
}
|
||||
|
||||
ArchMutexLock& operator=(ArchMutexLock const &) =delete;
|
||||
ArchMutexLock& operator=(ArchMutexLock &&) =delete;
|
||||
|
||||
private:
|
||||
ArchMutex m_mutex;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -30,8 +30,14 @@ synergy. Each architecture must implement this interface.
|
|||
*/
|
||||
class IArchString : public IInterface {
|
||||
public:
|
||||
IArchString() =default;
|
||||
IArchString(const IArchString &) =delete;
|
||||
IArchString(IArchString &&) =delete;
|
||||
virtual ~IArchString();
|
||||
|
||||
IArchString& operator=(const IArchString &) =delete;
|
||||
IArchString& operator=(IArchString &&) =delete;
|
||||
|
||||
//! Wide character encodings
|
||||
/*!
|
||||
The known wide character encodings
|
||||
|
|
|
|||
|
|
@ -39,8 +39,13 @@ public:
|
|||
class ArchMultithreadPosix : public IArchMultithread {
|
||||
public:
|
||||
ArchMultithreadPosix();
|
||||
ArchMultithreadPosix(ArchMultithreadPosix const &) =delete;
|
||||
ArchMultithreadPosix(ArchMultithreadPosix &&) =delete;
|
||||
virtual ~ArchMultithreadPosix();
|
||||
|
||||
ArchMultithreadPosix& operator=(ArchMultithreadPosix const &) =delete;
|
||||
ArchMultithreadPosix& operator=(ArchMultithreadPosix &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
|
|||
|
|
@ -59,13 +59,19 @@ public:
|
|||
class ArchNetworkBSD : public IArchNetwork {
|
||||
public:
|
||||
ArchNetworkBSD();
|
||||
ArchNetworkBSD(ArchNetworkBSD const &) =delete;
|
||||
ArchNetworkBSD(ArchNetworkBSD &&) =delete;
|
||||
virtual ~ArchNetworkBSD();
|
||||
|
||||
ArchNetworkBSD& operator=(ArchNetworkBSD const &) =delete;
|
||||
ArchNetworkBSD& operator=(ArchNetworkBSD &&) =delete;
|
||||
|
||||
virtual void init();
|
||||
|
||||
// IArchNetwork overrides
|
||||
virtual ArchSocket newSocket(EAddressFamily, ESocketType);
|
||||
virtual ArchSocket copySocket(ArchSocket s); virtual void closeSocket(ArchSocket s);
|
||||
virtual ArchSocket copySocket(ArchSocket s);
|
||||
virtual void closeSocket(ArchSocket s);
|
||||
virtual void closeSocketForRead(ArchSocket s);
|
||||
virtual void closeSocketForWrite(ArchSocket s);
|
||||
virtual void bindSocket(ArchSocket s, ArchNetAddress addr);
|
||||
|
|
|
|||
|
|
@ -39,7 +39,11 @@ delegates the platform dependent parts to a subclass.
|
|||
class EventQueue : public IEventQueue {
|
||||
public:
|
||||
EventQueue();
|
||||
EventQueue(EventQueue const &) =delete;
|
||||
EventQueue(EventQueue &&) =delete;
|
||||
virtual ~EventQueue();
|
||||
EventQueue& operator=(EventQueue const &) =delete;
|
||||
EventQueue& operator=(EventQueue &&) =delete;
|
||||
|
||||
// IEventQueue overrides
|
||||
virtual void loop();
|
||||
|
|
|
|||
|
|
@ -42,8 +42,13 @@ class Log {
|
|||
public:
|
||||
Log();
|
||||
Log(Log* src);
|
||||
Log(Log const &) =delete;
|
||||
Log(Log &&) =delete;
|
||||
~Log();
|
||||
|
||||
Log& operator=(Log const &) =delete;
|
||||
Log& operator=(Log &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
@ -154,7 +159,7 @@ not be filtered and is never prefixed by the filename and line number.
|
|||
|
||||
If \c NOLOGGING is defined during the build then this macro expands to
|
||||
nothing. If \c NDEBUG is defined during the build then it expands to a
|
||||
call to Log::print. Otherwise it expands to a call to Log::printt,
|
||||
call to Log::print. Otherwise it expands to a call to Log::print,
|
||||
which includes the filename and line number.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -28,9 +28,14 @@ An event queue buffer provides a queue of events for an IEventQueue.
|
|||
*/
|
||||
class SimpleEventQueueBuffer : public IEventQueueBuffer {
|
||||
public:
|
||||
SimpleEventQueueBuffer();
|
||||
SimpleEventQueueBuffer();
|
||||
SimpleEventQueueBuffer(SimpleEventQueueBuffer const &) = delete;
|
||||
SimpleEventQueueBuffer(SimpleEventQueueBuffer &&) = delete;
|
||||
~SimpleEventQueueBuffer();
|
||||
|
||||
SimpleEventQueueBuffer& operator=(SimpleEventQueueBuffer const &) = delete;
|
||||
SimpleEventQueueBuffer& operator=(SimpleEventQueueBuffer &&) = delete;
|
||||
|
||||
// IEventQueueBuffer overrides
|
||||
void init() { }
|
||||
virtual void waitForEvent(double timeout);
|
||||
|
|
|
|||
|
|
@ -113,8 +113,13 @@ the scope.
|
|||
class SystemLogger {
|
||||
public:
|
||||
SystemLogger(const char* title, bool blockConsole);
|
||||
SystemLogger(SystemLogger const &) =delete;
|
||||
SystemLogger(SystemLogger &&) =delete;
|
||||
~SystemLogger();
|
||||
|
||||
SystemLogger& operator=(SystemLogger const &) =delete;
|
||||
SystemLogger& operator=(SystemLogger &&) =delete;
|
||||
|
||||
private:
|
||||
ILogOutputter* m_syslog;
|
||||
ILogOutputter* m_stop;
|
||||
|
|
|
|||
|
|
@ -60,9 +60,13 @@ public:
|
|||
Client(IEventQueue* events, const String& name,
|
||||
const NetworkAddress& address, ISocketFactory* socketFactory,
|
||||
synergy::Screen* screen, lib::synergy::ClientArgs const& args);
|
||||
|
||||
Client(Client const &) =delete;
|
||||
Client(Client &&) =delete;
|
||||
~Client();
|
||||
|
||||
Client& operator=(Client const &) =delete;
|
||||
Client& operator=(Client &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
@ -119,7 +123,7 @@ public:
|
|||
*/
|
||||
NetworkAddress getServerAddress() const;
|
||||
|
||||
//! Return true if recieved file size is valid
|
||||
//! Return true if received file size is valid
|
||||
bool isReceivedFileSizeValid();
|
||||
|
||||
//! Return expected file size
|
||||
|
|
|
|||
|
|
@ -43,8 +43,13 @@ public:
|
|||
\p client.
|
||||
*/
|
||||
ServerProxy(Client* client, synergy::IStream* stream, IEventQueue* events);
|
||||
ServerProxy(ServerProxy const &) =delete;
|
||||
ServerProxy(ServerProxy &&) =delete;
|
||||
~ServerProxy();
|
||||
|
||||
ServerProxy& operator=(ServerProxy const &) =delete;
|
||||
ServerProxy& operator=(ServerProxy &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
|
|||
|
|
@ -34,8 +34,13 @@ public:
|
|||
d'tor.
|
||||
*/
|
||||
StreamFilter(IEventQueue* events, synergy::IStream* stream, bool adoptStream = true);
|
||||
StreamFilter(StreamFilter const &) =delete;
|
||||
StreamFilter(StreamFilter &&) =delete;
|
||||
virtual ~StreamFilter();
|
||||
|
||||
StreamFilter& operator=(StreamFilter const &) =delete;
|
||||
StreamFilter& operator=(StreamFilter &&) =delete;
|
||||
|
||||
// IStream overrides
|
||||
// These all just forward to the underlying stream except getEventTarget.
|
||||
// Override as necessary. getEventTarget returns a pointer to this.
|
||||
|
|
|
|||
|
|
@ -34,8 +34,13 @@ class IpcClientProxy {
|
|||
|
||||
public:
|
||||
IpcClientProxy(synergy::IStream& stream, IEventQueue* events);
|
||||
IpcClientProxy(IpcClientProxy const &) =delete;
|
||||
IpcClientProxy(IpcClientProxy &&) =delete;
|
||||
virtual ~IpcClientProxy();
|
||||
|
||||
IpcClientProxy& operator=(IpcClientProxy const &) =delete;
|
||||
IpcClientProxy& operator=(IpcClientProxy &&) =delete;
|
||||
|
||||
private:
|
||||
void send(const IpcMessage& message);
|
||||
void handleData(const Event&, void*);
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ public:
|
|||
using the \c sendBuffer() function.
|
||||
*/
|
||||
IpcLogOutputter(IpcServer& ipcServer, EIpcClientType clientType, bool useThread);
|
||||
IpcLogOutputter(IpcLogOutputter const &) =delete;
|
||||
virtual ~IpcLogOutputter();
|
||||
|
||||
// ILogOutputter overrides
|
||||
|
|
|
|||
|
|
@ -43,8 +43,13 @@ class IpcServer {
|
|||
public:
|
||||
IpcServer(IEventQueue* events, SocketMultiplexer* socketMultiplexer);
|
||||
IpcServer(IEventQueue* events, SocketMultiplexer* socketMultiplexer, int port);
|
||||
IpcServer(IpcServer const &) =delete;
|
||||
IpcServer(IpcServer &&) =delete;
|
||||
virtual ~IpcServer();
|
||||
|
||||
IpcServer& operator=(IpcServer const &) =delete;
|
||||
IpcServer& operator=(IpcServer &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ class IpcServerProxy {
|
|||
|
||||
public:
|
||||
IpcServerProxy(synergy::IStream& stream, IEventQueue* events);
|
||||
IpcServerProxy(IpcServerProxy const &) =delete;
|
||||
virtual ~IpcServerProxy();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -36,8 +36,13 @@ public:
|
|||
SecureSocket(IEventQueue* events,
|
||||
SocketMultiplexer* socketMultiplexer,
|
||||
ArchSocket socket);
|
||||
SecureSocket(SecureSocket const &) =delete;
|
||||
SecureSocket(SecureSocket &&) =delete;
|
||||
~SecureSocket();
|
||||
|
||||
SecureSocket& operator=(SecureSocket const &) =delete;
|
||||
SecureSocket& operator=(SecureSocket &&) =delete;
|
||||
|
||||
// ISocket overrides
|
||||
void close();
|
||||
|
||||
|
|
|
|||
|
|
@ -36,8 +36,13 @@ A socket multiplexer services multiple sockets simultaneously.
|
|||
class SocketMultiplexer {
|
||||
public:
|
||||
SocketMultiplexer();
|
||||
SocketMultiplexer(SocketMultiplexer const &) =delete;
|
||||
SocketMultiplexer(SocketMultiplexer &&) =delete;
|
||||
~SocketMultiplexer();
|
||||
|
||||
SocketMultiplexer& operator=(SocketMultiplexer const &) =delete;
|
||||
SocketMultiplexer& operator=(SocketMultiplexer &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
|
|||
|
|
@ -33,8 +33,13 @@ A listen socket using TCP.
|
|||
class TCPListenSocket : public IListenSocket {
|
||||
public:
|
||||
TCPListenSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer, IArchNetwork::EAddressFamily family);
|
||||
TCPListenSocket(TCPListenSocket const &) =delete;
|
||||
TCPListenSocket(TCPListenSocket &&) =delete;
|
||||
virtual ~TCPListenSocket();
|
||||
|
||||
TCPListenSocket& operator=(TCPListenSocket const &) =delete;
|
||||
TCPListenSocket& operator=(TCPListenSocket &&) =delete;
|
||||
|
||||
// ISocket overrides
|
||||
virtual void bind(const NetworkAddress&);
|
||||
virtual void close();
|
||||
|
|
|
|||
|
|
@ -38,8 +38,13 @@ class TCPSocket : public IDataSocket {
|
|||
public:
|
||||
TCPSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer, IArchNetwork::EAddressFamily family = IArchNetwork::kINET);
|
||||
TCPSocket(IEventQueue* events, SocketMultiplexer* socketMultiplexer, ArchSocket socket);
|
||||
TCPSocket(TCPSocket const &) =delete;
|
||||
TCPSocket(TCPSocket &&) =delete;
|
||||
virtual ~TCPSocket();
|
||||
|
||||
TCPSocket& operator=(TCPSocket const &) =delete;
|
||||
TCPSocket& operator=(TCPSocket &&) =delete;
|
||||
|
||||
// ISocket overrides
|
||||
virtual void bind(const NetworkAddress&);
|
||||
virtual void close();
|
||||
|
|
|
|||
|
|
@ -34,8 +34,13 @@ public:
|
|||
//! run() invokes \c object->method(arg)
|
||||
TSocketMultiplexerMethodJob(T* object, Method method,
|
||||
ArchSocket socket, bool readable, bool writeable);
|
||||
TSocketMultiplexerMethodJob(TSocketMultiplexerMethodJob const &) =delete;
|
||||
TSocketMultiplexerMethodJob(TSocketMultiplexerMethodJob &&) =delete;
|
||||
virtual ~TSocketMultiplexerMethodJob();
|
||||
|
||||
TSocketMultiplexerMethodJob& operator=(TSocketMultiplexerMethodJob const &) =delete;
|
||||
TSocketMultiplexerMethodJob& operator=(TSocketMultiplexerMethodJob &&) =delete;
|
||||
|
||||
// IJob overrides
|
||||
virtual ISocketMultiplexerJob*
|
||||
run(bool readable, bool writable, bool error);
|
||||
|
|
|
|||
|
|
@ -40,8 +40,13 @@ public:
|
|||
clipboard identified by \c id.
|
||||
*/
|
||||
XWindowsClipboard(Display*, Window window, ClipboardID id);
|
||||
XWindowsClipboard(XWindowsClipboard const &) =delete;
|
||||
XWindowsClipboard(XWindowsClipboard &&) =delete;
|
||||
virtual ~XWindowsClipboard();
|
||||
|
||||
XWindowsClipboard& operator=(XWindowsClipboard const &) =delete;
|
||||
XWindowsClipboard& operator=(XWindowsClipboard &&) =delete;
|
||||
|
||||
//! Notify clipboard was lost
|
||||
/*!
|
||||
Tells clipboard it lost ownership at the given time.
|
||||
|
|
|
|||
|
|
@ -34,8 +34,13 @@ class IEventQueue;
|
|||
class XWindowsEventQueueBuffer : public IEventQueueBuffer {
|
||||
public:
|
||||
XWindowsEventQueueBuffer(Display*, Window, IEventQueue* events);
|
||||
XWindowsEventQueueBuffer(XWindowsEventQueueBuffer const &) =delete;
|
||||
XWindowsEventQueueBuffer(XWindowsEventQueueBuffer &&) =delete;
|
||||
virtual ~XWindowsEventQueueBuffer();
|
||||
|
||||
XWindowsEventQueueBuffer& operator=(XWindowsEventQueueBuffer const &) =delete;
|
||||
XWindowsEventQueueBuffer& operator=(XWindowsEventQueueBuffer &&) =delete;
|
||||
|
||||
// IEventQueueBuffer overrides
|
||||
virtual void init() { }
|
||||
virtual void waitForEvent(double timeout);
|
||||
|
|
|
|||
|
|
@ -35,8 +35,13 @@ class EventQueueTimer;
|
|||
class XWindowsScreenSaver : public IScreenSaver {
|
||||
public:
|
||||
XWindowsScreenSaver(Display*, Window, void* eventTarget, IEventQueue* events);
|
||||
XWindowsScreenSaver(XWindowsScreenSaver const &) =delete;
|
||||
XWindowsScreenSaver(XWindowsScreenSaver &&) =delete;
|
||||
virtual ~XWindowsScreenSaver();
|
||||
|
||||
XWindowsScreenSaver& operator=(XWindowsScreenSaver const &) =delete;
|
||||
XWindowsScreenSaver& operator=(XWindowsScreenSaver &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
@ -115,7 +120,7 @@ private:
|
|||
// the X display
|
||||
Display* m_display;
|
||||
|
||||
// window to receive xscreensaver repsonses
|
||||
// window to receive xscreensaver responses
|
||||
Window m_xscreensaverSink;
|
||||
|
||||
// the target for the events we generate
|
||||
|
|
|
|||
|
|
@ -138,6 +138,11 @@ public:
|
|||
Ignore X11 errors.
|
||||
*/
|
||||
ErrorLock(Display*);
|
||||
ErrorLock(ErrorLock const &) =delete;
|
||||
ErrorLock(ErrorLock &&) =delete;
|
||||
|
||||
ErrorLock& operator=(ErrorLock const &) =delete;
|
||||
ErrorLock& operator=(ErrorLock &&) =delete;
|
||||
|
||||
/*!
|
||||
Set \c *errorFlag if any error occurs.
|
||||
|
|
|
|||
|
|
@ -40,8 +40,13 @@ public:
|
|||
ISocketFactory*,
|
||||
IEventQueue* events,
|
||||
bool enableCrypto);
|
||||
ClientListener(ClientListener const &) =delete;
|
||||
ClientListener(ClientListener &&) =delete;
|
||||
~ClientListener();
|
||||
|
||||
ClientListener& operator=(ClientListener const &) =delete;
|
||||
ClientListener& operator=(ClientListener &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
|
|||
|
|
@ -32,8 +32,13 @@ public:
|
|||
\c name is the name of the client.
|
||||
*/
|
||||
ClientProxy(const String& name, synergy::IStream* adoptedStream);
|
||||
ClientProxy(ClientProxy const &) =delete;
|
||||
ClientProxy(ClientProxy &&) =delete;
|
||||
~ClientProxy();
|
||||
|
||||
ClientProxy& operator=(ClientProxy const &) =delete;
|
||||
ClientProxy& operator=(ClientProxy &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
|
|||
|
|
@ -30,8 +30,13 @@ class IEventQueue;
|
|||
class ClientProxy1_0 : public ClientProxy {
|
||||
public:
|
||||
ClientProxy1_0(const String& name, synergy::IStream* adoptedStream, IEventQueue* events);
|
||||
ClientProxy1_0(ClientProxy1_0 const &) =delete;
|
||||
ClientProxy1_0(ClientProxy1_0 &&) =delete;
|
||||
~ClientProxy1_0();
|
||||
|
||||
ClientProxy1_0& operator=(ClientProxy1_0 const &) =delete;
|
||||
ClientProxy1_0& operator=(ClientProxy1_0 &&) =delete;
|
||||
|
||||
// IScreen
|
||||
virtual bool getClipboard(ClipboardID id, IClipboard*) const;
|
||||
virtual void getShape(SInt32& x, SInt32& y,
|
||||
|
|
|
|||
|
|
@ -24,8 +24,13 @@
|
|||
class ClientProxy1_3 : public ClientProxy1_2 {
|
||||
public:
|
||||
ClientProxy1_3(const String& name, synergy::IStream* adoptedStream, IEventQueue* events);
|
||||
ClientProxy1_3(ClientProxy1_3 const &) =delete;
|
||||
ClientProxy1_3(ClientProxy1_3 &&) =delete;
|
||||
~ClientProxy1_3();
|
||||
|
||||
ClientProxy1_3& operator=(ClientProxy1_3 const &) =delete;
|
||||
ClientProxy1_3& operator=(ClientProxy1_3 &&) =delete;
|
||||
|
||||
// IClient overrides
|
||||
virtual void mouseWheel(SInt32 xDelta, SInt32 yDelta);
|
||||
|
||||
|
|
|
|||
|
|
@ -28,8 +28,13 @@ class IEventQueue;
|
|||
class ClientProxy1_5 : public ClientProxy1_4 {
|
||||
public:
|
||||
ClientProxy1_5(const String& name, synergy::IStream* adoptedStream, Server* server, IEventQueue* events);
|
||||
ClientProxy1_5(ClientProxy1_5 const &) =delete;
|
||||
ClientProxy1_5(ClientProxy1_5 &&) =delete;
|
||||
~ClientProxy1_5();
|
||||
|
||||
ClientProxy1_5& operator=(ClientProxy1_5 const &) =delete;
|
||||
ClientProxy1_5& operator=(ClientProxy1_5 &&) =delete;
|
||||
|
||||
virtual void sendDragInfo(UInt32 fileCount, const char* info, size_t size);
|
||||
virtual void fileChunkSending(UInt8 mark, char* data, size_t dataSize);
|
||||
virtual bool parseMessage(const UInt8* code);
|
||||
|
|
|
|||
|
|
@ -30,8 +30,13 @@ class IEventQueue;
|
|||
class ClientProxyUnknown {
|
||||
public:
|
||||
ClientProxyUnknown(synergy::IStream* stream, double timeout, Server* server, IEventQueue* events);
|
||||
ClientProxyUnknown(ClientProxyUnknown const &) =delete;
|
||||
ClientProxyUnknown(ClientProxyUnknown &&) =delete;
|
||||
~ClientProxyUnknown();
|
||||
|
||||
ClientProxyUnknown& operator=(ClientProxyUnknown const &) =delete;
|
||||
ClientProxyUnknown& operator=(ClientProxyUnknown &&) =delete;
|
||||
|
||||
//! @name manipulators
|
||||
//@{
|
||||
|
||||
|
|
|
|||
|
|
@ -151,6 +151,8 @@ public:
|
|||
public:
|
||||
explicit const_iterator() : m_i() { }
|
||||
explicit const_iterator(const internal_const_iterator& i) : m_i(i) { }
|
||||
const_iterator(const const_iterator &src) =default;
|
||||
~const_iterator() =default;
|
||||
|
||||
const_iterator& operator=(const const_iterator& i) {
|
||||
m_i = i.m_i;
|
||||
|
|
|
|||
|
|
@ -228,8 +228,13 @@ public:
|
|||
class KeystrokeAction : public Action {
|
||||
public:
|
||||
KeystrokeAction(IEventQueue* events, IPlatformScreen::KeyInfo* adoptedInfo, bool press);
|
||||
KeystrokeAction(KeystrokeAction const &) =delete;
|
||||
KeystrokeAction(KeystrokeAction &&) =delete;
|
||||
~KeystrokeAction();
|
||||
|
||||
KeystrokeAction& operator=(KeystrokeAction const &) =delete;
|
||||
KeystrokeAction& operator=(KeystrokeAction &&) =delete;
|
||||
|
||||
void adoptInfo(IPlatformScreen::KeyInfo*);
|
||||
const IPlatformScreen::KeyInfo*
|
||||
getInfo() const;
|
||||
|
|
@ -255,8 +260,13 @@ public:
|
|||
MouseButtonAction(IEventQueue* events,
|
||||
IPlatformScreen::ButtonInfo* adoptedInfo,
|
||||
bool press);
|
||||
MouseButtonAction(MouseButtonAction const &) =delete;
|
||||
MouseButtonAction(MouseButtonAction &&) =delete;
|
||||
~MouseButtonAction();
|
||||
|
||||
MouseButtonAction& operator=(MouseButtonAction const &) =delete;
|
||||
MouseButtonAction& operator=(MouseButtonAction &&) =delete;
|
||||
|
||||
const IPlatformScreen::ButtonInfo*
|
||||
getInfo() const;
|
||||
bool isOnPress() const;
|
||||
|
|
|
|||
|
|
@ -108,8 +108,13 @@ public:
|
|||
*/
|
||||
Server(Config& config, PrimaryClient* primaryClient,
|
||||
synergy::Screen* screen, IEventQueue* events, lib::synergy::ServerArgs const& args);
|
||||
Server(Server const &) =delete;
|
||||
Server(Server &&) =delete;
|
||||
~Server();
|
||||
|
||||
Server& operator=(Server const &) =delete;
|
||||
Server& operator=(Server &&) =delete;
|
||||
|
||||
#ifdef TEST_ENV
|
||||
Server() : m_mock(true), m_config(NULL) { }
|
||||
void setActive(BaseClientProxy* active) { m_active = active; }
|
||||
|
|
|
|||
|
|
@ -44,8 +44,13 @@ typedef IArchTaskBarReceiver* (*CreateTaskBarReceiverFunc)(const BufferedLogOutp
|
|||
class App : public IApp {
|
||||
public:
|
||||
App(IEventQueue* events, CreateTaskBarReceiverFunc createTaskBarReceiver, lib::synergy::ArgsBase* args);
|
||||
App(App const &) =delete;
|
||||
App(App &&) =delete;
|
||||
virtual ~App();
|
||||
|
||||
App& operator=(App const &) =delete;
|
||||
App& operator=(App &&) =delete;
|
||||
|
||||
// Returns args that are common between server and client.
|
||||
lib::synergy::ArgsBase& argsBase() const { return *m_args; }
|
||||
|
||||
|
|
|
|||
|
|
@ -22,8 +22,13 @@
|
|||
class Chunk {
|
||||
public:
|
||||
Chunk(size_t size);
|
||||
Chunk(Chunk const &) =delete;
|
||||
Chunk(Chunk &&) =delete;
|
||||
~Chunk();
|
||||
|
||||
Chunk& operator=(Chunk const &) =delete;
|
||||
Chunk& operator=(Chunk &&) =delete;
|
||||
|
||||
public:
|
||||
size_t m_dataSize;
|
||||
char* m_chunk;
|
||||
|
|
|
|||
|
|
@ -40,8 +40,13 @@ primary or secondary screen.
|
|||
class Screen : public IScreen {
|
||||
public:
|
||||
Screen(IPlatformScreen* platformScreen, IEventQueue* events);
|
||||
Screen(Screen const &) =delete;
|
||||
Screen(Screen &&) =delete;
|
||||
virtual ~Screen();
|
||||
|
||||
Screen& operator&(Screen const &) =delete;
|
||||
Screen& operator&(Screen &&) =delete;
|
||||
|
||||
#ifdef TEST_ENV
|
||||
Screen() : m_mock(true) { }
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -789,7 +789,7 @@ ServerApp::runInner(int argc, char** argv, ILogOutputter* outputter, StartupFunc
|
|||
{
|
||||
// general initialization
|
||||
m_synergyAddress = new NetworkAddress;
|
||||
args().m_config = new Config(m_events);
|
||||
args().m_config = std::make_shared<Config>(m_events);
|
||||
args().m_pname = ARCH->getBasename(argv[0]);
|
||||
|
||||
// install caller's output filter
|
||||
|
|
@ -806,7 +806,6 @@ ServerApp::runInner(int argc, char** argv, ILogOutputter* outputter, StartupFunc
|
|||
delete m_taskBarReceiver;
|
||||
}
|
||||
|
||||
delete args().m_config;
|
||||
delete m_synergyAddress;
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ namespace lib {
|
|||
namespace synergy {
|
||||
|
||||
ServerArgs::~ServerArgs() {
|
||||
destroy(m_config);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#ifndef SYNERGY_CORE_SERVERARGS_H
|
||||
#define SYNERGY_CORE_SERVERARGS_H
|
||||
|
||||
#include <memory>
|
||||
#include "ArgsBase.h"
|
||||
#include "shared/SerialKey.h"
|
||||
#include "server/Config.h"
|
||||
|
|
@ -28,13 +29,18 @@ namespace lib {
|
|||
/// Public Functions
|
||||
public:
|
||||
ServerArgs();
|
||||
ServerArgs(ServerArgs const &src) =default;
|
||||
ServerArgs(ServerArgs &&) =default;
|
||||
~ServerArgs() override;
|
||||
|
||||
ServerArgs& operator=(ServerArgs const &) =default;
|
||||
ServerArgs& operator=(ServerArgs &&) =default;
|
||||
|
||||
/// Public variables
|
||||
public:
|
||||
String m_configFile = ""; /// @brief Contains the path to the config file
|
||||
SerialKey m_serial; /// @brief Contains the serial number and license info
|
||||
Config* m_config = nullptr; /// @brief Contains the Parsed Configuration settings
|
||||
std::shared_ptr<Config> m_config; /// @brief Contains the Parsed Configuration settings
|
||||
|
||||
/// Private Functions
|
||||
private:
|
||||
|
|
|
|||
49
src/test/unittests/synergy/ServerAppTests.cpp
Normal file
49
src/test/unittests/synergy/ServerAppTests.cpp
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* synergy -- mouse and keyboard sharing utility
|
||||
* Copyright (C) 2014-2016 Symless Ltd.
|
||||
*
|
||||
* This package is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* found in the file LICENSE that should have accompanied this file.
|
||||
*
|
||||
* This package is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "synergy/ArgParser.h"
|
||||
#include "synergy/ServerArgs.h"
|
||||
|
||||
#define TEST_ENV
|
||||
|
||||
#include "synergy/ServerApp.h"
|
||||
|
||||
#include "test/global/gmock.h"
|
||||
|
||||
class MockServerApp : public ServerApp
|
||||
{
|
||||
public:
|
||||
MockServerApp() : ServerApp(nullptr, nullptr) { }
|
||||
};
|
||||
|
||||
#include "test/global/gtest.h"
|
||||
|
||||
// using ::testing::_;
|
||||
// using ::testing::Invoke;
|
||||
using ::testing::NiceMock;
|
||||
|
||||
TEST(ServerAppTests, runInner_will_handle_configuration_lifetime)
|
||||
{
|
||||
NiceMock<MockServerApp> app;
|
||||
|
||||
EXPECT_FALSE(app.args().m_config);
|
||||
|
||||
const char *argv[] {"synergyc"};
|
||||
app.runInner(1, const_cast<char **>(argv), nullptr, [](int,char**){ return 0; });
|
||||
|
||||
EXPECT_TRUE(app.args().m_config);
|
||||
}
|
||||
|
|
@ -37,6 +37,14 @@ server_stubCheckUnexpectedArgs()
|
|||
return false;
|
||||
}
|
||||
|
||||
TEST(ServerArgs, ServerArgs_will_construct_from_copy)
|
||||
{
|
||||
lib::synergy::ServerArgs serverArgs;
|
||||
serverArgs.m_display = "display0";
|
||||
auto serverArgs2 {serverArgs};
|
||||
EXPECT_EQ(serverArgs.m_display, serverArgs2.m_display);
|
||||
}
|
||||
|
||||
TEST(ServerArgsParsingTests, parseServerArgs_addressArg_setSynergyAddress)
|
||||
{
|
||||
NiceMock<MockArgParser> argParser;
|
||||
|
|
|
|||
Loading…
Reference in a new issue