diff options
author | Tobias Markmann <tm@ayena.de> | 2015-01-08 15:36:30 (GMT) |
---|---|---|
committer | Swift Review <review@swift.im> | 2015-02-03 11:45:21 (GMT) |
commit | c09a8453114e7525d7f2efd220ee94f13716d73e (patch) | |
tree | 34a89163bae62114db5786e0aee65f2f1df293e3 | |
parent | 6cdd1ba4513bec0e192b5735d5476ed9f0bb8c3f (diff) | |
download | swift-c09a8453114e7525d7f2efd220ee94f13716d73e.zip swift-c09a8453114e7525d7f2efd220ee94f13716d73e.tar.bz2 |
Added support for dstaddr attribute for SOCKS5 bytestream jingle
transport method element, parser and serializer.
Test-Information:
Adjusted parser and serializer tests to cover this feature.
Change-Id: I660ef8d292a0fe09f80c042bc6df417b0e7525b1
5 files changed, 31 insertions, 2 deletions
diff --git a/Swiften/Elements/JingleS5BTransportPayload.h b/Swiften/Elements/JingleS5BTransportPayload.h index 0a40d31..f6132a1 100644 --- a/Swiften/Elements/JingleS5BTransportPayload.h +++ b/Swiften/Elements/JingleS5BTransportPayload.h @@ -1,8 +1,8 @@ /* - * Copyright (c) 2011 Isode Limited. + * Copyright (c) 2011-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once @@ -79,12 +79,20 @@ namespace Swift { } const std::string& getActivated() const { return activatedCID; } + void setDstAddr(const std::string& addr) { + dstAddr = addr; + } + + const std::string& getDstAddr() const { + return dstAddr; + } + void setCandidateError(bool hasError) { candidateError = hasError; } bool hasCandidateError() const { return candidateError; @@ -103,10 +111,11 @@ namespace Swift { private: Mode mode; std::vector<Candidate> candidates; std::string candidateUsedCID; std::string activatedCID; + std::string dstAddr; bool candidateError; bool proxyError; }; } diff --git a/Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.cpp b/Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.cpp index d7b5bb0..dc05352 100644 --- a/Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.cpp +++ b/Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.cpp @@ -2,13 +2,13 @@ * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ /* -* Copyright (c) 2014 Isode Limited. +* Copyright (c) 2014-2015 Isode Limited. * All rights reserved.v3. * See the COPYING file for more information. */ #include <boost/lexical_cast.hpp> #include <boost/optional.hpp> @@ -31,12 +31,13 @@ namespace Swift { } else if(mode == "udp") { getPayloadInternal()->setMode(JingleS5BTransportPayload::UDPMode); } else { SWIFT_LOG(warning) << "Unknown S5B mode; falling back to defaul!"; getPayloadInternal()->setMode(JingleS5BTransportPayload::TCPMode); } + getPayloadInternal()->setDstAddr(attributes.getAttributeValue("dstaddr").get_value_or("")); } else if (level == 1) { if (element == "candidate") { JingleS5BTransportPayload::Candidate candidate; candidate.cid = attributes.getAttributeValue("cid").get_value_or(""); int port = -1; diff --git a/Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp b/Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp index a6be599..9c166b2 100644 --- a/Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp +++ b/Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp @@ -1,12 +1,18 @@ /* * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ +/* + * Copyright (c) 2015 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + #include <cppunit/extensions/HelperMacros.h> #include <cppunit/extensions/TestFactoryRegistry.h> #include <Swiften/Parser/PayloadParsers/UnitTest/PayloadsParserTester.h> #include <Swiften/Elements/JinglePayload.h> #include <Swiften/Elements/JingleIBBTransportPayload.h> @@ -537,12 +543,13 @@ class JingleParserTest : public CppUnit::TestFixture { " action='session-accept'\n" " initiator='romeo@montague.lit/orchard'\n" " sid='a73sjjvkla37jfea'>\n" " <content creator='initiator' name='ex'>\n" " <description xmlns='urn:xmpp:example'/>\n" " <transport xmlns='urn:xmpp:jingle:transports:s5b:1'\n" + " dstaddr='1a12fb7bc625e55f3ed5b29a53dbe0e4aa7d80ba'\n" " mode='tcp'\n" " sid='vj3hs98y'>\n" " <candidate cid='ht567dq'\n" " host='192.169.1.10'\n" " jid='juliet@capulet.lit/balcony'\n" " port='6539'\n" @@ -576,12 +583,13 @@ class JingleParserTest : public CppUnit::TestFixture { JingleS5BTransportPayload::ref s5bPayload = content->getTransport<JingleS5BTransportPayload>(); CPPUNIT_ASSERT(s5bPayload); CPPUNIT_ASSERT_EQUAL(std::string("vj3hs98y"), s5bPayload->getSessionID()); CPPUNIT_ASSERT_EQUAL(JingleS5BTransportPayload::TCPMode, s5bPayload->getMode()); + CPPUNIT_ASSERT_EQUAL(std::string("1a12fb7bc625e55f3ed5b29a53dbe0e4aa7d80ba"), s5bPayload->getDstAddr()); CPPUNIT_ASSERT_EQUAL(false, s5bPayload->hasCandidateError()); CPPUNIT_ASSERT_EQUAL(false, s5bPayload->hasProxyError()); CPPUNIT_ASSERT_EQUAL(std::string(), s5bPayload->getActivated()); CPPUNIT_ASSERT_EQUAL(std::string(), s5bPayload->getCandidateUsed()); CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), s5bPayload->getCandidates().size()); diff --git a/Swiften/Serializer/PayloadSerializers/JingleS5BTransportPayloadSerializer.cpp b/Swiften/Serializer/PayloadSerializers/JingleS5BTransportPayloadSerializer.cpp index c753839..220d8dd 100644 --- a/Swiften/Serializer/PayloadSerializers/JingleS5BTransportPayloadSerializer.cpp +++ b/Swiften/Serializer/PayloadSerializers/JingleS5BTransportPayloadSerializer.cpp @@ -1,12 +1,18 @@ /* * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ +/* + * Copyright (c) 2015 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + #include <Swiften/Serializer/PayloadSerializers/JingleS5BTransportPayloadSerializer.h> #include <boost/shared_ptr.hpp> #include <boost/smart_ptr/make_shared.hpp> #include <boost/lexical_cast.hpp> @@ -22,12 +28,15 @@ JingleS5BTransportPayloadSerializer::JingleS5BTransportPayloadSerializer() { } std::string JingleS5BTransportPayloadSerializer::serializePayload(boost::shared_ptr<JingleS5BTransportPayload> payload) const { XMLElement payloadXML("transport", "urn:xmpp:jingle:transports:s5b:1"); payloadXML.setAttribute("sid", payload->getSessionID()); payloadXML.setAttribute("mode", modeToString(payload->getMode())); + if (!payload->getDstAddr().empty()) { + payloadXML.setAttribute("dstaddr", payload->getDstAddr()); + } foreach(JingleS5BTransportPayload::Candidate candidate, payload->getCandidates()) { boost::shared_ptr<XMLElement> candidateXML = boost::make_shared<XMLElement>("candidate"); candidateXML->setAttribute("cid", candidate.cid); candidateXML->setAttribute("host", candidate.hostPort.getAddress().toString()); candidateXML->setAttribute("jid", candidate.jid.toString()); diff --git a/Swiften/Serializer/PayloadSerializers/UnitTest/JingleSerializersTest.cpp b/Swiften/Serializer/PayloadSerializers/UnitTest/JingleSerializersTest.cpp index 722c039..8d5bcb7 100644 --- a/Swiften/Serializer/PayloadSerializers/UnitTest/JingleSerializersTest.cpp +++ b/Swiften/Serializer/PayloadSerializers/UnitTest/JingleSerializersTest.cpp @@ -374,12 +374,13 @@ class JingleSerializersTest : public CppUnit::TestFixture { " action=\"session-initiate\"" " initiator=\"romeo@montague.lit/orchard\"" " sid=\"a73sjjvkla37jfea\"" " xmlns=\"urn:xmpp:jingle:1\">" "<content creator=\"initiator\" name=\"ex\">" "<transport" + " dstaddr=\"1a12fb7bc625e55f3ed5b29a53dbe0e4aa7d80ba\"" " mode=\"tcp\"" " sid=\"vj3hs98y\"" " xmlns=\"urn:xmpp:jingle:transports:s5b:1\">" "<candidate cid=\"hft54dqy\"" " host=\"192.168.4.1\"" " jid=\"romeo@montague.lit/orchard\"" @@ -404,12 +405,13 @@ class JingleSerializersTest : public CppUnit::TestFixture { JingleContentPayload::ref content = boost::make_shared<JingleContentPayload>(); content->setCreator(JingleContentPayload::InitiatorCreator); content->setName("ex"); JingleS5BTransportPayload::ref transport = boost::make_shared<JingleS5BTransportPayload>(); transport->setMode(JingleS5BTransportPayload::TCPMode); + transport->setDstAddr("1a12fb7bc625e55f3ed5b29a53dbe0e4aa7d80ba"); transport->setSessionID("vj3hs98y"); JingleS5BTransportPayload::Candidate candidate1; candidate1.cid = "hft54dqy"; candidate1.hostPort = HostAddressPort(HostAddress("192.168.4.1"), 5086); candidate1.jid = JID("romeo@montague.lit/orchard"); |