aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/server
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-11-10 00:54:35 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2021-11-10 00:54:35 -0500
commit58fb7a0cee13d84170aac52f3f89d91888e1afe3 (patch)
tree1d6312ba15f9ece5a8031e5280dfb8b38be8dfa3 /src/lib/server
parent28db84b46139c9bb2bbcac8c6cc56e71d1e35629 (diff)
parentbeb08eb751fa8e1f72042f263316ab5e5ddb596d (diff)
Update upstream source from tag 'upstream/2.4.0+dfsg'
Update to upstream version '2.4.0+dfsg' with Debian dir 4b6668cc08c7b0e56b1e1f7b4e89ecdb316182a0
Diffstat (limited to 'src/lib/server')
-rw-r--r--src/lib/server/BaseClientProxy.cpp4
-rw-r--r--src/lib/server/BaseClientProxy.h4
-rw-r--r--src/lib/server/CMakeLists.txt4
-rw-r--r--src/lib/server/ClientListener.cpp37
-rw-r--r--src/lib/server/ClientListener.h13
-rw-r--r--src/lib/server/ClientProxy.cpp4
-rw-r--r--src/lib/server/ClientProxy.h4
-rw-r--r--src/lib/server/ClientProxy1_0.cpp27
-rw-r--r--src/lib/server/ClientProxy1_0.h4
-rw-r--r--src/lib/server/ClientProxy1_1.cpp4
-rw-r--r--src/lib/server/ClientProxy1_1.h4
-rw-r--r--src/lib/server/ClientProxy1_2.cpp4
-rw-r--r--src/lib/server/ClientProxy1_2.h4
-rw-r--r--src/lib/server/ClientProxy1_3.cpp4
-rw-r--r--src/lib/server/ClientProxy1_3.h4
-rw-r--r--src/lib/server/ClientProxy1_4.cpp4
-rw-r--r--src/lib/server/ClientProxy1_4.h4
-rw-r--r--src/lib/server/ClientProxy1_5.cpp8
-rw-r--r--src/lib/server/ClientProxy1_5.h4
-rw-r--r--src/lib/server/ClientProxy1_6.cpp6
-rw-r--r--src/lib/server/ClientProxy1_6.h4
-rw-r--r--src/lib/server/ClientProxyUnknown.cpp10
-rw-r--r--src/lib/server/ClientProxyUnknown.h4
-rw-r--r--src/lib/server/Config.cpp38
-rw-r--r--src/lib/server/Config.h6
-rw-r--r--src/lib/server/InputFilter.cpp16
-rw-r--r--src/lib/server/InputFilter.h18
-rw-r--r--src/lib/server/PrimaryClient.cpp4
-rw-r--r--src/lib/server/PrimaryClient.h10
-rw-r--r--src/lib/server/Server.cpp32
-rw-r--r--src/lib/server/Server.h26
31 files changed, 161 insertions, 158 deletions
diff --git a/src/lib/server/BaseClientProxy.cpp b/src/lib/server/BaseClientProxy.cpp
index 6ccd251..78c4220 100644
--- a/src/lib/server/BaseClientProxy.cpp
+++ b/src/lib/server/BaseClientProxy.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2006 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/BaseClientProxy.h b/src/lib/server/BaseClientProxy.h
index a2c9459..5d5dc06 100644
--- a/src/lib/server/BaseClientProxy.h
+++ b/src/lib/server/BaseClientProxy.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/CMakeLists.txt b/src/lib/server/CMakeLists.txt
index 5242d6d..e1ed692 100644
--- a/src/lib/server/CMakeLists.txt
+++ b/src/lib/server/CMakeLists.txt
@@ -1,11 +1,11 @@
# barrier -- mouse and keyboard sharing utility
# Copyright (C) 2012-2016 Symless Ltd.
# Copyright (C) 2009 Nick Bolton
-#
+#
# 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
diff --git a/src/lib/server/ClientListener.cpp b/src/lib/server/ClientListener.cpp
index 00067ba..75724bc 100644
--- a/src/lib/server/ClientListener.cpp
+++ b/src/lib/server/ClientListener.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2004 Chris Schoeneman
- *
+ *
* 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
@@ -36,25 +36,24 @@
ClientListener::ClientListener(const NetworkAddress& address,
ISocketFactory* socketFactory,
IEventQueue* events,
- bool enableCrypto) :
+ ConnectionSecurityLevel security_level) :
m_socketFactory(socketFactory),
m_server(NULL),
m_events(events),
- m_useSecureNetwork(enableCrypto)
+ security_level_{security_level}
{
assert(m_socketFactory != NULL);
try {
- m_listen = m_socketFactory->createListen(
- ARCH->getAddrFamily(address.getAddress()),
- m_useSecureNetwork);
+ m_listen = m_socketFactory->createListen(ARCH->getAddrFamily(address.getAddress()),
+ security_level);
// setup event handler
m_events->adoptHandler(m_events->forIListenSocket().connecting(),
m_listen,
new TMethodEventJob<ClientListener>(this,
&ClientListener::handleClientConnecting));
-
+
// bind listen address
LOG((CLOG_DEBUG1 "binding listen socket"));
m_listen->bind(address);
@@ -130,17 +129,17 @@ ClientListener::handleClientConnecting(const Event&, void*)
if (socket == NULL) {
return;
}
-
+
m_clientSockets.insert(socket);
m_events->adoptHandler(m_events->forClientListener().accepted(),
socket->getEventTarget(),
new TMethodEventJob<ClientListener>(this,
&ClientListener::handleClientAccepted, socket));
-
+
// When using non SSL, server accepts clients immediately, while SSL
// has to call secure accept which may require retry
- if (!m_useSecureNetwork) {
+ if (security_level_ == ConnectionSecurityLevel::PLAINTEXT) {
m_events->addEvent(Event(m_events->forClientListener().accepted(),
socket->getEventTarget()));
}
@@ -152,7 +151,7 @@ ClientListener::handleClientAccepted(const Event&, void* vsocket)
LOG((CLOG_NOTE "accepted client connection"));
IDataSocket* socket = static_cast<IDataSocket*>(vsocket);
-
+
// filter socket messages, including a packetizing filter
barrier::IStream* stream = new PacketStreamFilter(m_events, socket, false);
assert(m_server != NULL);
@@ -184,7 +183,6 @@ ClientListener::handleUnknownClient(const Event&, void* vclient)
// get the real client proxy and install it
ClientProxy* client = unknownClient->orphanClientProxy();
- bool handshakeOk = true;
if (client != NULL) {
// handshake was successful
m_waitingClients.push_back(client);
@@ -196,20 +194,17 @@ ClientListener::handleUnknownClient(const Event&, void* vclient)
new TMethodEventJob<ClientListener>(this,
&ClientListener::handleClientDisconnected,
client));
- }
- else {
- handshakeOk = false;
+ } else {
+ auto* stream = unknownClient->getStream();
+ if (stream) {
+ stream->close();
+ }
}
// now finished with unknown client
m_events->removeHandler(m_events->forClientProxyUnknown().success(), client);
m_events->removeHandler(m_events->forClientProxyUnknown().failure(), client);
m_newClients.erase(unknownClient);
- PacketStreamFilter* streamFileter = dynamic_cast<PacketStreamFilter*>(unknownClient->getStream());
- IDataSocket* socket = NULL;
- if (streamFileter != NULL) {
- socket = dynamic_cast<IDataSocket*>(streamFileter->getStream());
- }
delete unknownClient;
}
diff --git a/src/lib/server/ClientListener.h b/src/lib/server/ClientListener.h
index b02cbb1..1debc2b 100644
--- a/src/lib/server/ClientListener.h
+++ b/src/lib/server/ClientListener.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2004 Chris Schoeneman
- *
+ *
* 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
@@ -23,6 +23,7 @@
#include "base/Event.h"
#include "common/stddeque.h"
#include "common/stdset.h"
+#include "net/ConnectionSecurityLevel.h"
class ClientProxy;
class ClientProxyUnknown;
@@ -36,10 +37,8 @@ class IDataSocket;
class ClientListener {
public:
// The factories are adopted.
- ClientListener(const NetworkAddress&,
- ISocketFactory*,
- IEventQueue* events,
- bool enableCrypto);
+ ClientListener(const NetworkAddress&, ISocketFactory*, IEventQueue* events,
+ ConnectionSecurityLevel security_level);
~ClientListener();
//! @name manipulators
@@ -86,6 +85,6 @@ private:
WaitingClients m_waitingClients;
Server* m_server;
IEventQueue* m_events;
- bool m_useSecureNetwork;
+ ConnectionSecurityLevel security_level_;
ClientSockets m_clientSockets;
};
diff --git a/src/lib/server/ClientProxy.cpp b/src/lib/server/ClientProxy.cpp
index d91e186..76cdfa6 100644
--- a/src/lib/server/ClientProxy.cpp
+++ b/src/lib/server/ClientProxy.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy.h b/src/lib/server/ClientProxy.h
index a3d87cb..b641011 100644
--- a/src/lib/server/ClientProxy.h
+++ b/src/lib/server/ClientProxy.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_0.cpp b/src/lib/server/ClientProxy1_0.cpp
index 5cbaac2..33b0f15 100644
--- a/src/lib/server/ClientProxy1_0.cpp
+++ b/src/lib/server/ClientProxy1_0.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
@@ -51,6 +51,10 @@ ClientProxy1_0::ClientProxy1_0(const std::string& name, barrier::IStream* stream
stream->getEventTarget(),
new TMethodEventJob<ClientProxy1_0>(this,
&ClientProxy1_0::handleDisconnect, NULL));
+ m_events->adoptHandler(m_events->forIStream().inputFormatError(),
+ stream->getEventTarget(),
+ new TMethodEventJob<ClientProxy1_0>(this,
+ &ClientProxy1_0::handleDisconnect, NULL));
m_events->adoptHandler(m_events->forIStream().outputShutdown(),
stream->getEventTarget(),
new TMethodEventJob<ClientProxy1_0>(this,
@@ -90,6 +94,8 @@ ClientProxy1_0::removeHandlers()
getStream()->getEventTarget());
m_events->removeHandler(m_events->forIStream().outputShutdown(),
getStream()->getEventTarget());
+ m_events->removeHandler(m_events->forIStream().inputFormatError(),
+ getStream()->getEventTarget());
m_events->removeHandler(Event::kTimer, this);
// remove timer
@@ -148,9 +154,18 @@ ClientProxy1_0::handleData(const Event&, void*)
}
// parse message
- LOG((CLOG_DEBUG2 "msg from \"%s\": %c%c%c%c", getName().c_str(), code[0], code[1], code[2], code[3]));
- if (!(this->*m_parser)(code)) {
- LOG((CLOG_ERR "invalid message from client \"%s\": %c%c%c%c", getName().c_str(), code[0], code[1], code[2], code[3]));
+ try {
+ LOG((CLOG_DEBUG2 "msg from \"%s\": %c%c%c%c", getName().c_str(), code[0], code[1], code[2], code[3]));
+ if (!(this->*m_parser)(code)) {
+ LOG((CLOG_ERR "invalid message from client \"%s\": %c%c%c%c", getName().c_str(), code[0], code[1], code[2], code[3]));
+ disconnect();
+ return;
+ }
+ } catch (const XBadClient& e) {
+ // TODO: disconnect handling is currently dispersed across both parseMessage() and
+ // handleData() functions, we should collect that to a single place
+
+ LOG((CLOG_ERR "protocol error from client: %s", e.what()));
disconnect();
return;
}
@@ -173,6 +188,8 @@ ClientProxy1_0::parseHandshakeMessage(const UInt8* code)
}
else if (memcmp(code, kMsgDInfo, 4) == 0) {
// future messages get parsed by parseMessage
+ // NOTE: we're taking address of virtual function here,
+ // not ClientProxy1_0 implementation of it.
m_parser = &ClientProxy1_0::parseMessage;
if (recvInfo()) {
m_events->addEvent(Event(m_events->forClientProxy().ready(), getEventTarget()));
diff --git a/src/lib/server/ClientProxy1_0.h b/src/lib/server/ClientProxy1_0.h
index 98c68f3..45d7541 100644
--- a/src/lib/server/ClientProxy1_0.h
+++ b/src/lib/server/ClientProxy1_0.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_1.cpp b/src/lib/server/ClientProxy1_1.cpp
index bb33ac1..6d2e007 100644
--- a/src/lib/server/ClientProxy1_1.cpp
+++ b/src/lib/server/ClientProxy1_1.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_1.h b/src/lib/server/ClientProxy1_1.h
index ada4dcc..38fda52 100644
--- a/src/lib/server/ClientProxy1_1.h
+++ b/src/lib/server/ClientProxy1_1.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_2.cpp b/src/lib/server/ClientProxy1_2.cpp
index e9527ef..5457dc0 100644
--- a/src/lib/server/ClientProxy1_2.cpp
+++ b/src/lib/server/ClientProxy1_2.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_2.h b/src/lib/server/ClientProxy1_2.h
index 12d6b92..08b32fb 100644
--- a/src/lib/server/ClientProxy1_2.h
+++ b/src/lib/server/ClientProxy1_2.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2004 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_3.cpp b/src/lib/server/ClientProxy1_3.cpp
index d0031ce..5012a4e 100644
--- a/src/lib/server/ClientProxy1_3.cpp
+++ b/src/lib/server/ClientProxy1_3.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2006 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_3.h b/src/lib/server/ClientProxy1_3.h
index ad46cea..a459e1e 100644
--- a/src/lib/server/ClientProxy1_3.h
+++ b/src/lib/server/ClientProxy1_3.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2006 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_4.cpp b/src/lib/server/ClientProxy1_4.cpp
index 9b12976..bc58626 100644
--- a/src/lib/server/ClientProxy1_4.cpp
+++ b/src/lib/server/ClientProxy1_4.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2011 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_4.h b/src/lib/server/ClientProxy1_4.h
index cda090b..fa88234 100644
--- a/src/lib/server/ClientProxy1_4.h
+++ b/src/lib/server/ClientProxy1_4.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2011 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/ClientProxy1_5.cpp b/src/lib/server/ClientProxy1_5.cpp
index 40bba08..72c0bf8 100644
--- a/src/lib/server/ClientProxy1_5.cpp
+++ b/src/lib/server/ClientProxy1_5.cpp
@@ -1,11 +1,11 @@
/*
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2013-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
@@ -86,7 +86,7 @@ ClientProxy1_5::fileChunkReceived()
getStream(),
server->getReceivedFileData(),
server->getExpectedFileSize());
-
+
if (result == kFinish) {
m_events->addEvent(Event(m_events->forFile().fileRecieveCompleted(), server));
@@ -106,6 +106,6 @@ ClientProxy1_5::dragInfoReceived()
UInt32 fileNum = 0;
std::string content;
ProtocolUtil::readf(getStream(), kMsgDDragInfo + 4, &fileNum, &content);
-
+
m_server->dragInfoReceived(fileNum, content);
}
diff --git a/src/lib/server/ClientProxy1_5.h b/src/lib/server/ClientProxy1_5.h
index 4087730..2051f3c 100644
--- a/src/lib/server/ClientProxy1_5.h
+++ b/src/lib/server/ClientProxy1_5.h
@@ -1,11 +1,11 @@
/*
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2013-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
diff --git a/src/lib/server/ClientProxy1_6.cpp b/src/lib/server/ClientProxy1_6.cpp
index c829e84..29f3ce4 100644
--- a/src/lib/server/ClientProxy1_6.cpp
+++ b/src/lib/server/ClientProxy1_6.cpp
@@ -1,11 +1,11 @@
/*
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2015-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
@@ -88,7 +88,7 @@ ClientProxy1_6::recvClipboard()
// save clipboard
m_clipboard[id].m_clipboard.unmarshall(dataCached, 0);
m_clipboard[id].m_sequenceNumber = seq;
-
+
// notify
ClipboardInfo* info = new ClipboardInfo;
info->m_id = id;
diff --git a/src/lib/server/ClientProxy1_6.h b/src/lib/server/ClientProxy1_6.h
index 830696a..a4c2e5d 100644
--- a/src/lib/server/ClientProxy1_6.h
+++ b/src/lib/server/ClientProxy1_6.h
@@ -1,11 +1,11 @@
/*
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2015-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
diff --git a/src/lib/server/ClientProxyUnknown.cpp b/src/lib/server/ClientProxyUnknown.cpp
index dc79da7..f9da361 100644
--- a/src/lib/server/ClientProxyUnknown.cpp
+++ b/src/lib/server/ClientProxyUnknown.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2004 Chris Schoeneman
- *
+ *
* 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
@@ -118,6 +118,10 @@ ClientProxyUnknown::addStreamHandlers()
m_stream->getEventTarget(),
new TMethodEventJob<ClientProxyUnknown>(this,
&ClientProxyUnknown::handleDisconnect));
+ m_events->adoptHandler(m_events->forIStream().inputFormatError(),
+ m_stream->getEventTarget(),
+ new TMethodEventJob<ClientProxyUnknown>(this,
+ &ClientProxyUnknown::handleDisconnect));
m_events->adoptHandler(m_events->forIStream().outputShutdown(),
m_stream->getEventTarget(),
new TMethodEventJob<ClientProxyUnknown>(this,
@@ -149,6 +153,8 @@ ClientProxyUnknown::removeHandlers()
m_stream->getEventTarget());
m_events->removeHandler(m_events->forIStream().inputShutdown(),
m_stream->getEventTarget());
+ m_events->removeHandler(m_events->forIStream().inputFormatError(),
+ m_stream->getEventTarget());
m_events->removeHandler(m_events->forIStream().outputShutdown(),
m_stream->getEventTarget());
}
diff --git a/src/lib/server/ClientProxyUnknown.h b/src/lib/server/ClientProxyUnknown.h
index 5d59402..efb1b2b 100644
--- a/src/lib/server/ClientProxyUnknown.h
+++ b/src/lib/server/ClientProxyUnknown.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2004 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/Config.cpp b/src/lib/server/Config.cpp
index a47a391..bcdb88c 100644
--- a/src/lib/server/Config.cpp
+++ b/src/lib/server/Config.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
@@ -1748,10 +1748,10 @@ std::ostream&
operator<<(std::ostream& s, const Config& config)
{
// screens section
- s << "section: screens" << std::endl;
+ s << "section: screens\n";
for (Config::const_iterator screen = config.begin();
screen != config.end(); ++screen) {
- s << "\t" << screen->c_str() << ":" << std::endl;
+ s << "\t" << screen->c_str() << ":\n";
const Config::ScreenOptions* options = config.getOptions(*screen);
if (options != NULL && options->size() > 0) {
for (Config::ScreenOptions::const_iterator
@@ -1760,31 +1760,31 @@ operator<<(std::ostream& s, const Config& config)
const char* name = Config::getOptionName(option->first);
std::string value = Config::getOptionValue(option->first, option->second);
if (name != NULL && !value.empty()) {
- s << "\t\t" << name << " = " << value << std::endl;
+ s << "\t\t" << name << " = " << value << "\n";
}
}
}
}
- s << "end" << std::endl;
+ s << "end\n";
// links section
std::string neighbor;
- s << "section: links" << std::endl;
+ s << "section: links\n";
for (Config::const_iterator screen = config.begin();
screen != config.end(); ++screen) {
- s << "\t" << screen->c_str() << ":" << std::endl;
+ s << "\t" << screen->c_str() << ":\n";
for (Config::link_const_iterator
link = config.beginNeighbor(*screen),
- nend = config.endNeighbor(*screen); link != nend; ++link) {
+ nend = config.endNeighbor(*screen); link != nend; ++link) {
s << "\t\t" << Config::dirName(link->first.getSide()) <<
Config::formatInterval(link->first.getInterval()) <<
" = " << link->second.getName().c_str() <<
Config::formatInterval(link->second.getInterval()) <<
- std::endl;
+ "\n";
}
}
- s << "end" << std::endl;
+ s << "end\n";
// aliases section (if there are any)
if (config.m_map.size() != config.m_nameToCanonicalName.size()) {
@@ -1802,20 +1802,20 @@ operator<<(std::ostream& s, const Config& config)
// dump it
std::string screen;
- s << "section: aliases" << std::endl;
+ s << "section: aliases\n";
for (CMNameMap::const_iterator index = aliases.begin();
index != aliases.end(); ++index) {
if (index->first != screen) {
screen = index->first;
- s << "\t" << screen.c_str() << ":" << std::endl;
+ s << "\t" << screen.c_str() << ":\n";
}
- s << "\t\t" << index->second.c_str() << std::endl;
+ s << "\t\t" << index->second.c_str() << "\n";
}
- s << "end" << std::endl;
+ s << "end\n";
}
// options section
- s << "section: options" << std::endl;
+ s << "section: options\n";
const Config::ScreenOptions* options = config.getOptions("");
if (options != NULL && options->size() > 0) {
for (Config::ScreenOptions::const_iterator
@@ -1824,16 +1824,16 @@ operator<<(std::ostream& s, const Config& config)
const char* name = Config::getOptionName(option->first);
std::string value = Config::getOptionValue(option->first, option->second);
if (name != NULL && !value.empty()) {
- s << "\t" << name << " = " << value << std::endl;
+ s << "\t" << name << " = " << value << "\n";
}
}
}
if (config.m_barrierAddress.isValid()) {
s << "\taddress = " <<
- config.m_barrierAddress.getHostname().c_str() << std::endl;
+ config.m_barrierAddress.getHostname().c_str() << "\n";
}
s << config.m_inputFilter.format("\t");
- s << "end" << std::endl;
+ s << "end\n";
return s;
}
diff --git a/src/lib/server/Config.h b/src/lib/server/Config.h
index c459393..17756a0 100644
--- a/src/lib/server/Config.h
+++ b/src/lib/server/Config.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
@@ -174,7 +174,7 @@ public:
Config(IEventQueue* events);
virtual ~Config();
-#ifdef TEST_ENV
+#ifdef BARRIER_TEST_ENV
Config() : m_inputFilter(NULL) { }
#endif
diff --git a/src/lib/server/InputFilter.cpp b/src/lib/server/InputFilter.cpp
index 38d9a84..a0dce17 100644
--- a/src/lib/server/InputFilter.cpp
+++ b/src/lib/server/InputFilter.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2005 Chris Schoeneman
- *
+ *
* 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
@@ -191,7 +191,7 @@ std::string InputFilter::MouseButtonCondition::format() const
return barrier::string::sprintf("mousebutton(%s%d)", key.c_str(), m_button);
}
-InputFilter::EFilterStatus
+InputFilter::EFilterStatus
InputFilter::MouseButtonCondition::match(const Event& event)
{
static const KeyModifierMask s_ignoreMask =
@@ -252,7 +252,7 @@ InputFilter::EFilterStatus
InputFilter::ScreenConnectedCondition::match(const Event& event)
{
if (event.getType() == m_events->forServer().connected()) {
- Server::ScreenConnectedInfo* info =
+ Server::ScreenConnectedInfo* info =
static_cast<Server::ScreenConnectedInfo*>(event.getData());
if (m_screen == info->m_screen || m_screen.empty()) {
return kActivate;
@@ -312,7 +312,7 @@ InputFilter::LockCursorToScreenAction::perform(const Event& event)
};
// send event
- Server::LockCursorToScreenInfo* info =
+ Server::LockCursorToScreenInfo* info =
Server::LockCursorToScreenInfo::alloc(s_state[m_mode]);
m_events->addEvent(Event(m_events->forServer().lockCursorToScreen(),
event.getTarget(), info,
@@ -350,7 +350,7 @@ InputFilter::SwitchToScreenAction::perform(const Event& event)
// event if it has one.
std::string screen = m_screen;
if (screen.empty() && event.getType() == m_events->forServer().connected()) {
- Server::ScreenConnectedInfo* info =
+ Server::ScreenConnectedInfo* info =
static_cast<Server::ScreenConnectedInfo*>(event.getData());
screen = info->m_screen;
}
@@ -493,7 +493,7 @@ InputFilter::KeyboardBroadcastAction::perform(const Event& event)
};
// send event
- Server::KeyboardBroadcastInfo* info =
+ Server::KeyboardBroadcastInfo* info =
Server::KeyboardBroadcastInfo::alloc(s_state[m_mode], m_screens);
m_events->addEvent(Event(m_events->forServer().keyboardBroadcast(),
event.getTarget(), info,
@@ -569,7 +569,7 @@ InputFilter::KeystrokeAction::perform(const Event& event)
Event::Type type = m_press ?
m_events->forIKeyState().keyDown() :
m_events->forIKeyState().keyUp();
-
+
m_events->addEvent(Event(m_events->forIPrimaryScreen().fakeInputBegin(),
event.getTarget(), NULL,
Event::kDeliverImmediately));
diff --git a/src/lib/server/InputFilter.h b/src/lib/server/InputFilter.h
index 0cb99da..5e6ef9c 100644
--- a/src/lib/server/InputFilter.h
+++ b/src/lib/server/InputFilter.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2005 Chris Schoeneman
- *
+ *
* 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
@@ -53,7 +53,7 @@ public:
virtual void enablePrimary(PrimaryClient*);
virtual void disablePrimary(PrimaryClient*);
};
-
+
// KeystrokeCondition
class KeystrokeCondition : public Condition {
public:
@@ -118,7 +118,7 @@ public:
// -------------------------------------------------------------------------
// Input Filter Action Classes
// -------------------------------------------------------------------------
-
+
class Action {
public:
Action();
@@ -129,7 +129,7 @@ public:
virtual void perform(const Event&) = 0;
};
-
+
// LockCursorToScreenAction
class LockCursorToScreenAction : public Action {
public:
@@ -148,7 +148,7 @@ public:
Mode m_mode;
IEventQueue* m_events;
};
-
+
// SwitchToScreenAction
class SwitchToScreenAction : public Action {
public:
@@ -165,7 +165,7 @@ public:
std::string m_screen;
IEventQueue* m_events;
};
-
+
// ToggleScreenAction
class ToggleScreenAction : public Action {
public:
@@ -196,7 +196,7 @@ public:
EDirection m_direction;
IEventQueue* m_events;
};
-
+
// KeyboardBroadcastAction
class KeyboardBroadcastAction : public Action {
public:
@@ -333,7 +333,7 @@ public:
InputFilter(const InputFilter&);
virtual ~InputFilter();
-#ifdef TEST_ENV
+#ifdef BARRIER_TEST_ENV
InputFilter() : m_primaryClient(NULL) { }
#endif
diff --git a/src/lib/server/PrimaryClient.cpp b/src/lib/server/PrimaryClient.cpp
index 04ae86c..6583e5d 100644
--- a/src/lib/server/PrimaryClient.cpp
+++ b/src/lib/server/PrimaryClient.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/server/PrimaryClient.h b/src/lib/server/PrimaryClient.h
index 68b91e3..13be838 100644
--- a/src/lib/server/PrimaryClient.h
+++ b/src/lib/server/PrimaryClient.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
@@ -37,7 +37,7 @@ public:
PrimaryClient(const std::string& name, barrier::Screen* screen);
~PrimaryClient();
-#ifdef TEST_ENV
+#ifdef BARRIER_TEST_ENV
PrimaryClient() : BaseClientProxy("") { }
#endif
@@ -96,12 +96,12 @@ public:
the edges of the screen, typically the center.
*/
void getCursorCenter(SInt32& x, SInt32& y) const;
-
+
//! Get toggle key state
/*!
Returns the primary screen's current toggle modifier key state.
*/
- virtual KeyModifierMask
+ virtual KeyModifierMask
getToggleMask() const;
//! Get screen lock state
diff --git a/src/lib/server/Server.cpp b/src/lib/server/Server.cpp
index 334049c..a169db1 100644
--- a/src/lib/server/Server.cpp
+++ b/src/lib/server/Server.cpp
@@ -39,7 +39,6 @@
#include "net/XSocket.h"
#include "mt/Thread.h"
#include "arch/Arch.h"
-#include "base/TMethodJob.h"
#include "base/IEventQueue.h"
#include "base/Log.h"
#include "base/TMethodEventJob.h"
@@ -1136,9 +1135,9 @@ Server::processOptions()
return;
}
- m_switchNeedsShift = false; // it seems if i don't add these
+ m_switchNeedsShift = false; // it seems if I don't add these
m_switchNeedsControl = false; // lines, the 'reload config' option
- m_switchNeedsAlt = false; // doesnt' work correct.
+ m_switchNeedsAlt = false; // doesn't work correct.
bool newRelativeMoves = m_relativeMoves;
for (Config::ScreenOptions::const_iterator index = options->begin();
@@ -1824,10 +1823,8 @@ Server::onMouseMovePrimary(SInt32 x, SInt32 y)
&& m_active != newScreen
&& m_waitDragInfoThread) {
if (m_sendDragInfoThread == NULL) {
- m_sendDragInfoThread = new Thread(
- new TMethodJob<Server>(
- this,
- &Server::sendDragInfoThread, newScreen));
+ m_sendDragInfoThread = new Thread([this, newScreen]()
+ { send_drag_info_thread(newScreen); });
}
return false;
@@ -1843,11 +1840,8 @@ Server::onMouseMovePrimary(SInt32 x, SInt32 y)
return false;
}
-void
-Server::sendDragInfoThread(void* arg)
+void Server::send_drag_info_thread(BaseClientProxy* newScreen)
{
- BaseClientProxy* newScreen = static_cast<BaseClientProxy*>(arg);
-
m_dragFileList.clear();
std::string& dragFileList = m_screen->getDraggingFilename();
if (!dragFileList.empty()) {
@@ -2087,14 +2081,11 @@ void
Server::onFileRecieveCompleted()
{
if (isReceivedFileSizeValid()) {
- m_writeToDropDirThread = new Thread(
- new TMethodJob<Server>(
- this, &Server::writeToDropDirThread));
+ m_writeToDropDirThread = new Thread([this]() { write_to_drop_dir_thread(); });
}
}
-void
-Server::writeToDropDirThread(void*)
+void Server::write_to_drop_dir_thread()
{
LOG((CLOG_DEBUG "starting write to drop dir thread"));
@@ -2394,17 +2385,12 @@ Server::sendFileToClient(const char* filename)
StreamChunker::interruptFile();
}
- m_sendFileThread = new Thread(
- new TMethodJob<Server>(
- this, &Server::sendFileThread,
- static_cast<void*>(const_cast<char*>(filename))));
+ m_sendFileThread = new Thread([this, filename]() { send_file_thread(filename); });
}
-void
-Server::sendFileThread(void* data)
+void Server::send_file_thread(const char* filename)
{
try {
- char* filename = static_cast<char*>(data);
LOG((CLOG_DEBUG "sending file to client, filename=%s", filename));
StreamChunker::sendFile(filename, m_events, this);
}
diff --git a/src/lib/server/Server.h b/src/lib/server/Server.h
index bfd0a7d..ae8b2bd 100644
--- a/src/lib/server/Server.h
+++ b/src/lib/server/Server.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
@@ -110,7 +110,7 @@ public:
barrier::Screen* screen, IEventQueue* events, ServerArgs const& args);
~Server();
-#ifdef TEST_ENV
+#ifdef BARRIER_TEST_ENV
Server() : m_mock(true), m_config(NULL) { }
void setActive(BaseClientProxy* active) { m_active = active; }
#endif
@@ -150,7 +150,7 @@ public:
//! Store ClientListener pointer
void setListener(ClientListener* p) { m_clientListener = p; }
-
+
//@}
//! @name accessors
//@{
@@ -166,8 +166,8 @@ public:
Set the \c list to the names of the currently connected clients.
*/
void getClients(std::vector<std::string>& list) const;
-
- //! Return true if recieved file size is valid
+
+ //! Return true if received file size is valid
bool isReceivedFileSizeValid();
//! Return expected file data size
@@ -356,15 +356,15 @@ private:
// force the cursor off of \p client
void forceLeaveClient(BaseClientProxy* client);
-
- // thread funciton for sending file
- void sendFileThread(void*);
-
+
+ // thread function for sending file
+ void send_file_thread(const char* filename);
+
// thread function for writing file to drop directory
- void writeToDropDirThread(void*);
+ void write_to_drop_dir_thread();
// thread function for sending drag information
- void sendDragInfoThread(void*);
+ void send_drag_info_thread(BaseClientProxy* newScreen);
// send drag info to new client screen
void sendDragInfo(BaseClientProxy* newScreen);
@@ -448,7 +448,7 @@ private:
bool m_switchNeedsShift;
bool m_switchNeedsControl;
bool m_switchNeedsAlt;
-
+
// relative mouse move option
bool m_relativeMoves;