From 46f5c51d006f8c9576af7ad664a38c2674cc5bf0 2011-10-02 11:11:08 From: HanzZ Date: 2011-10-02 11:11:08 Subject: [PATCH] Working FT rejecting --- diff --git a/CMakeLists.txt b/CMakeLists.txt index aa939f41f7d6bce55fbb4229830abbe48f4b5f37..cc976737cdce30e7b5a8a9ed433814dc9c18cfbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,7 +108,7 @@ else() endif() if(CMAKE_BUILD_TYPE MATCHES Debug) - ADD_DEFINITIONS(-O3) + ADD_DEFINITIONS(-O0) ADD_DEFINITIONS(-ggdb) ADD_DEFINITIONS(-DDEBUG) ADD_DEFINITIONS(-Wall) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 2a499bf3dc00273b280437fa3e77100f1ae17a8a..59ffe4c9977854809f829a59f8c70ace041b3b96 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -829,6 +829,14 @@ class SpectrumNetworkPlugin : public NetworkPlugin { } } + void handleFTFinishRequest(const std::string &user, const std::string &buddyName, const std::string &fileName, unsigned long size, unsigned long ftID) { + PurpleXfer *xfer = m_unhandledXfers[user + fileName + buddyName]; + if (xfer) { + m_unhandledXfers.erase(user + fileName + buddyName); + purple_xfer_request_denied(xfer); + } + } + void handleFTPauseRequest(unsigned long ftID) { PurpleXfer *xfer = m_xfers[ftID]; if (!xfer) diff --git a/include/Swiften/FileTransfer/MyOutgoingSIFileTransfer.cpp b/include/Swiften/FileTransfer/MyOutgoingSIFileTransfer.cpp index 6593a238874c06e827cb71ba832d67907b070b48..2d094d386dc790a4718b7d2a217001d38ce62ef0 100644 --- a/include/Swiften/FileTransfer/MyOutgoingSIFileTransfer.cpp +++ b/include/Swiften/FileTransfer/MyOutgoingSIFileTransfer.cpp @@ -80,6 +80,7 @@ void MyOutgoingSIFileTransfer::finish(boost::optional error) ibbSession.reset(); } socksServer->removeReadBytestream(id, from, to); + onStateChange(FileTransfer::State(FileTransfer::State::Canceled)); onFinished(error); } diff --git a/include/transport/networkplugin.h b/include/transport/networkplugin.h index afbb310b5484779b09d8cd35090eb50e5c5c6b74..487a9e9a0a8757afbe10023e702dd5866e2eb9ac 100644 --- a/include/transport/networkplugin.h +++ b/include/transport/networkplugin.h @@ -216,6 +216,7 @@ class NetworkPlugin { virtual void handleAttentionRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*message*/) {} virtual void handleFTStartRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*fileName*/, unsigned long size, unsigned long ftID) {} + virtual void handleFTFinishRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*fileName*/, unsigned long size, unsigned long ftID) {} virtual void handleFTPauseRequest(unsigned long ftID) {} virtual void handleFTContinueRequest(unsigned long ftID) {} @@ -236,6 +237,7 @@ class NetworkPlugin { void handleChatStatePayload(const std::string &payload, Swift::ChatState::ChatStateType type); void handleAttentionPayload(const std::string &payload); void handleFTStartPayload(const std::string &payload); + void handleFTFinishPayload(const std::string &payload); void handleFTPausePayload(const std::string &payload); void handleFTContinuePayload(const std::string &payload); void handleDataRead(boost::shared_ptr data); diff --git a/src/networkplugin.cpp b/src/networkplugin.cpp index 86ae3bd5ecae9b089b9fa6d045861c770107eca2..3284b99287ab25fdc04591a2f221cc191b96ddc6 100644 --- a/src/networkplugin.cpp +++ b/src/networkplugin.cpp @@ -373,6 +373,16 @@ void NetworkPlugin::handleFTStartPayload(const std::string &data) { handleFTStartRequest(payload.username(), payload.buddyname(), payload.filename(), payload.size(), payload.ftid()); } +void NetworkPlugin::handleFTFinishPayload(const std::string &data) { + pbnetwork::File payload; + if (payload.ParseFromString(data) == false) { + // TODO: ERROR + return; + } + + handleFTFinishRequest(payload.username(), payload.buddyname(), payload.filename(), payload.size(), payload.ftid()); +} + void NetworkPlugin::handleFTPausePayload(const std::string &data) { pbnetwork::FileTransferData payload; if (payload.ParseFromString(data) == false) { @@ -543,6 +553,9 @@ void NetworkPlugin::handleDataRead(boost::shared_ptr data) case pbnetwork::WrapperMessage_Type_TYPE_FT_START: handleFTStartPayload(wrapper.payload()); break; + case pbnetwork::WrapperMessage_Type_TYPE_FT_FINISH: + handleFTFinishPayload(wrapper.payload()); + break; case pbnetwork::WrapperMessage_Type_TYPE_FT_PAUSE: handleFTPausePayload(wrapper.payload()); break; diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index a1d40d0b79037e28a359e3a6a58ebb2878cd8315..48953775e9c951035f52c03d7a1aa6c1508a715e 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -1252,6 +1252,7 @@ void NetworkPluginServer::handleFTRejected(User *user, const std::string &buddyN f.set_buddyname(buddyName); f.set_filename(fileName); f.set_size(size); + f.set_ftid(0); std::string message; f.SerializeToString(&message); @@ -1273,6 +1274,9 @@ void NetworkPluginServer::handleFTStateChanged(Swift::FileTransfer::State state, if (state.state == Swift::FileTransfer::State::Transferring) { handleFTAccepted(user, buddyName, fileName, size, id); } + else if (state.state == Swift::FileTransfer::State::Canceled) { + handleFTRejected(user, buddyName, fileName, size); + } } void NetworkPluginServer::sendPing(Backend *c) {