summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swiften/Elements/JingleS5BTransportPayload.h11
-rw-r--r--Swiften/Parser/PayloadParsers/JingleS5BTransportMethodPayloadParser.cpp3
-rw-r--r--Swiften/Parser/PayloadParsers/UnitTest/JingleParserTest.cpp8
-rw-r--r--Swiften/Serializer/PayloadSerializers/JingleS5BTransportPayloadSerializer.cpp9
-rw-r--r--Swiften/Serializer/PayloadSerializers/UnitTest/JingleSerializersTest.cpp2
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");