diff --git a/src/lib/base/EventTypes.cpp b/src/lib/base/EventTypes.cpp index afa51900..d30ae209 100644 --- a/src/lib/base/EventTypes.cpp +++ b/src/lib/base/EventTypes.cpp @@ -198,4 +198,3 @@ REGISTER_EVENT(Clipboard, clipboardSending) REGISTER_EVENT(File, fileChunkSending) REGISTER_EVENT(File, fileRecieveCompleted) -REGISTER_EVENT(File, keepAlive) diff --git a/src/lib/base/EventTypes.h b/src/lib/base/EventTypes.h index b10fb6b8..d885adcd 100644 --- a/src/lib/base/EventTypes.h +++ b/src/lib/base/EventTypes.h @@ -712,8 +712,7 @@ class FileEvents : public EventTypes { public: FileEvents() : m_fileChunkSending(Event::kUnknown), - m_fileRecieveCompleted(Event::kUnknown), - m_keepAlive(Event::kUnknown) { } + m_fileRecieveCompleted(Event::kUnknown) { } //! @name accessors //@{ @@ -724,13 +723,9 @@ public: //! Completed receiving a file Event::Type fileRecieveCompleted(); - //! Send a keep alive - Event::Type keepAlive(); - //@} private: Event::Type m_fileChunkSending; Event::Type m_fileRecieveCompleted; - Event::Type m_keepAlive; }; diff --git a/src/lib/client/ServerProxy.cpp b/src/lib/client/ServerProxy.cpp index 9c2b9c75..615931d1 100644 --- a/src/lib/client/ServerProxy.cpp +++ b/src/lib/client/ServerProxy.cpp @@ -252,9 +252,7 @@ ServerProxy::parseMessage(const UInt8* code) } else if (memcmp(code, kMsgCKeepAlive, 4) == 0) { - // echo keep alives and reset alarm - ProtocolUtil::writef(m_stream, kMsgCKeepAlive); - resetKeepAliveAlarm(); + keepAlive(); } else if (memcmp(code, kMsgCNoop, 4) == 0) { @@ -892,12 +890,21 @@ ServerProxy::dragInfoReceived() void ServerProxy::handleClipboardSendingEvent(const Event& event, void*) { + keepAlive(); ClipboardChunk::send(m_stream, event.getData()); } +void ServerProxy::keepAlive() +{ + // echo keep alives and reset alarm + ProtocolUtil::writef(m_stream, kMsgCKeepAlive); + resetKeepAliveAlarm(); +} + void ServerProxy::fileChunkSending(UInt8 mark, char* data, size_t dataSize) { + keepAlive(); FileChunk::send(m_stream, mark, data, dataSize); } diff --git a/src/lib/client/ServerProxy.h b/src/lib/client/ServerProxy.h index 144fd000..5133af50 100644 --- a/src/lib/client/ServerProxy.h +++ b/src/lib/client/ServerProxy.h @@ -107,6 +107,7 @@ private: void fileChunkReceived(); void dragInfoReceived(); void handleClipboardSendingEvent(const Event&, void*); + void keepAlive(); private: typedef EResult (ServerProxy::*MessageParser)(const UInt8*); diff --git a/src/lib/server/ClientProxy1_5.cpp b/src/lib/server/ClientProxy1_5.cpp index 2cdceb40..e07c8187 100644 --- a/src/lib/server/ClientProxy1_5.cpp +++ b/src/lib/server/ClientProxy1_5.cpp @@ -35,16 +35,10 @@ ClientProxy1_5::ClientProxy1_5(const String& name, synergy::IStream* stream, Ser ClientProxy1_4(name, stream, server, events), m_events(events) { - - m_events->adoptHandler(m_events->forFile().keepAlive(), - this, - new TMethodEventJob(this, - &ClientProxy1_3::handleKeepAlive, NULL)); } ClientProxy1_5::~ClientProxy1_5() { - m_events->removeHandler(m_events->forFile().keepAlive(), this); } void @@ -58,6 +52,7 @@ ClientProxy1_5::sendDragInfo(UInt32 fileCount, const char* info, size_t size) void ClientProxy1_5::fileChunkSending(UInt8 mark, char* data, size_t dataSize) { + keepAlive(); FileChunk::send(getStream(), mark, data, dataSize); } diff --git a/src/lib/server/ClientProxy1_6.cpp b/src/lib/server/ClientProxy1_6.cpp index bdd0f23f..cdfef01d 100644 --- a/src/lib/server/ClientProxy1_6.cpp +++ b/src/lib/server/ClientProxy1_6.cpp @@ -50,6 +50,12 @@ ClientProxy1_6::setClipboard(ClipboardID id, const IClipboard* clipboard) if (m_clipboard[id].m_dirty) { // this clipboard is now clean m_clipboard[id].m_dirty = false; + + // add keep alive message before we do clipboard copy + // in case there is a big data inside and time that would + // comsume will cause connecton being dropped + keepAlive(); + Clipboard::copy(&m_clipboard[id].m_clipboard, clipboard); String data = m_clipboard[id].m_clipboard.marshall(); @@ -66,6 +72,9 @@ ClientProxy1_6::setClipboard(ClipboardID id, const IClipboard* clipboard) void ClientProxy1_6::handleClipboardSendingEvent(const Event& event, void*) { + // add keep alive message before we send each clipboard data + keepAlive(); + ClipboardChunk::send(getStream(), event.getData()); } diff --git a/src/lib/synergy/StreamChunker.cpp b/src/lib/synergy/StreamChunker.cpp index 380a37a3..bcf4a712 100644 --- a/src/lib/synergy/StreamChunker.cpp +++ b/src/lib/synergy/StreamChunker.cpp @@ -84,8 +84,6 @@ StreamChunker::sendFile( } if (sendStopwatch.getTime() > SEND_THRESHOLD) { - events->addEvent(Event(events->forFile().keepAlive(), eventTarget)); - // make sure we don't read too much from the mock data. if (sentLength + chunkSize > size) { chunkSize = size - sentLength; @@ -151,8 +149,6 @@ StreamChunker::sendClipboard( } if (sendStopwatch.getTime() > SEND_THRESHOLD) { - events->addEvent(Event(events->forFile().keepAlive(), eventTarget)); - // make sure we don't read too much from the mock data. if (sentLength + chunkSize > size) { chunkSize = size - sentLength;