diff options
Diffstat (limited to 'Swiften/FileTransfer')
| -rw-r--r-- | Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp | 6 | ||||
| -rw-r--r-- | Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp | 32 |
2 files changed, 35 insertions, 3 deletions
diff --git a/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp b/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp index 5c18b13..f9441cd 100644 --- a/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp +++ b/Swiften/FileTransfer/OutgoingJingleFileTransfer.cpp | |||
| @@ -136,9 +136,12 @@ void OutgoingJingleFileTransfer::handleSessionTerminateReceived(boost::optional< | |||
| 136 | if (reason && reason->type == JinglePayload::Reason::Cancel) { | 136 | if (reason && reason->type == JinglePayload::Reason::Cancel) { |
| 137 | setFinishedState(FileTransfer::State::Canceled, FileTransferError(FileTransferError::PeerError)); | 137 | setFinishedState(FileTransfer::State::Canceled, FileTransferError(FileTransferError::PeerError)); |
| 138 | } | 138 | } |
| 139 | else if (reason && reason->type == JinglePayload::Reason::Decline) { | ||
| 140 | setFinishedState(FileTransfer::State::Canceled, boost::optional<FileTransferError>()); | ||
| 141 | } | ||
| 139 | else if (reason && reason->type == JinglePayload::Reason::Success) { | 142 | else if (reason && reason->type == JinglePayload::Reason::Success) { |
| 140 | setFinishedState(FileTransfer::State::Finished, boost::optional<FileTransferError>()); | 143 | setFinishedState(FileTransfer::State::Finished, boost::optional<FileTransferError>()); |
| 141 | } | 144 | } |
| 142 | else { | 145 | else { |
| 143 | setFinishedState(FileTransfer::State::Failed, FileTransferError(FileTransferError::PeerError)); | 146 | setFinishedState(FileTransfer::State::Failed, FileTransferError(FileTransferError::PeerError)); |
| 144 | } | 147 | } |
| @@ -190,6 +193,7 @@ void OutgoingJingleFileTransfer::handleLocalTransportCandidatesGenerated( | |||
| 190 | transport->setDstAddr(dstAddr); | 193 | transport->setDstAddr(dstAddr); |
| 191 | foreach(JingleS5BTransportPayload::Candidate candidate, candidates) { | 194 | foreach(JingleS5BTransportPayload::Candidate candidate, candidates) { |
| 192 | transport->addCandidate(candidate); | 195 | transport->addCandidate(candidate); |
| 196 | SWIFT_LOG(debug) << "\t" << "S5B candidate: " << candidate.hostPort.toString() << std::endl; | ||
| 193 | } | 197 | } |
| 194 | setState(WaitingForAccept); | 198 | setState(WaitingForAccept); |
| 195 | session->sendInitiate(contentID, description, transport); | 199 | session->sendInitiate(contentID, description, transport); |
diff --git a/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp b/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp index 40e7233..4b2fb50 100644 --- a/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp +++ b/Swiften/FileTransfer/UnitTest/OutgoingJingleFileTransferTest.cpp | |||
| @@ -56,17 +56,29 @@ class OutgoingJingleFileTransferTest : public CppUnit::TestFixture { | |||
| 56 | CPPUNIT_TEST(test_SendSessionInitiateOnStart); | 56 | CPPUNIT_TEST(test_SendSessionInitiateOnStart); |
| 57 | CPPUNIT_TEST(test_FallbackToIBBAfterFailingS5B); | 57 | CPPUNIT_TEST(test_FallbackToIBBAfterFailingS5B); |
| 58 | CPPUNIT_TEST(test_ReceiveSessionTerminateAfterSessionInitiate); | 58 | CPPUNIT_TEST(test_ReceiveSessionTerminateAfterSessionInitiate); |
| 59 | CPPUNIT_TEST(test_DeclineEmitsFinishedStateCanceled); | ||
| 59 | CPPUNIT_TEST_SUITE_END(); | 60 | CPPUNIT_TEST_SUITE_END(); |
| 60 | 61 | ||
| 61 | class FTStatusHelper { | 62 | class FTStatusHelper { |
| 62 | public: | 63 | public: |
| 63 | bool finishedCalled; | 64 | FTStatusHelper() : finishedCalled(false), error(FileTransferError::UnknownError) { |
| 64 | FileTransferError::Type error; | 65 | } |
| 66 | |||
| 65 | void handleFileTransferFinished(boost::optional<FileTransferError> error) { | 67 | void handleFileTransferFinished(boost::optional<FileTransferError> error) { |
| 66 | finishedCalled = true; | 68 | finishedCalled = true; |
| 67 | if (error.is_initialized()) this->error = error.get().getType(); | 69 | if (error.is_initialized()) this->error = error.get().getType(); |
| 68 | } | 70 | } |
| 71 | |||
| 72 | void handleFileTransferStatusChanged(FileTransfer::State fileTransferSTate) { | ||
| 73 | state = fileTransferSTate; | ||
| 74 | } | ||
| 75 | |||
| 76 | public: | ||
| 77 | bool finishedCalled; | ||
| 78 | FileTransferError::Type error; | ||
| 79 | boost::optional<FileTransfer::State> state; | ||
| 69 | }; | 80 | }; |
| 81 | |||
| 70 | public: | 82 | public: |
| 71 | 83 | ||
| 72 | boost::shared_ptr<OutgoingJingleFileTransfer> createTestling() { | 84 | boost::shared_ptr<OutgoingJingleFileTransfer> createTestling() { |
| @@ -193,6 +205,22 @@ public: | |||
| 193 | CPPUNIT_ASSERT(FileTransferError::PeerError == helper.error); | 205 | CPPUNIT_ASSERT(FileTransferError::PeerError == helper.error); |
| 194 | } | 206 | } |
| 195 | 207 | ||
| 208 | void test_DeclineEmitsFinishedStateCanceled() { | ||
| 209 | boost::shared_ptr<OutgoingJingleFileTransfer> transfer = createTestling(); | ||
| 210 | transfer->start(); | ||
| 211 | |||
| 212 | getCall<FakeJingleSession::InitiateCall>(0); | ||
| 213 | |||
| 214 | FTStatusHelper helper; | ||
| 215 | helper.finishedCalled = false; | ||
| 216 | transfer->onFinished.connect(bind(&FTStatusHelper::handleFileTransferFinished, &helper, _1)); | ||
| 217 | transfer->onStateChanged.connect(bind(&FTStatusHelper::handleFileTransferStatusChanged, &helper, _1)); | ||
| 218 | fakeJingleSession->handleSessionTerminateReceived(JinglePayload::Reason(JinglePayload::Reason::Decline)); | ||
| 219 | CPPUNIT_ASSERT_EQUAL(true, helper.finishedCalled); | ||
| 220 | CPPUNIT_ASSERT(FileTransferError::UnknownError == helper.error); | ||
| 221 | CPPUNIT_ASSERT_EQUAL(true, helper.state.is_initialized()); | ||
| 222 | CPPUNIT_ASSERT(FileTransfer::State::Canceled == helper.state.get().type); | ||
| 223 | } | ||
| 196 | 224 | ||
| 197 | //TODO: some more testcases | 225 | //TODO: some more testcases |
| 198 | 226 | ||
Swift