diff --git a/CMakeLists.txt b/CMakeLists.txt index aa939f41..cc976737 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 2a499bf3..59ffe4c9 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 6593a238..2d094d38 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 afbb310b..487a9e9a 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 86ae3bd5..3284b992 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 a1d40d0b..48953775 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) {