summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/FileTransfer')
-rw-r--r--Swiften/FileTransfer/ConnectivityManager.cpp28
-rw-r--r--Swiften/FileTransfer/ConnectivityManager.h11
-rw-r--r--Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.cpp4
-rw-r--r--Swiften/FileTransfer/FileTransferManagerImpl.cpp2
4 files changed, 26 insertions, 19 deletions
diff --git a/Swiften/FileTransfer/ConnectivityManager.cpp b/Swiften/FileTransfer/ConnectivityManager.cpp
index de5eccb..f4e7e96 100644
--- a/Swiften/FileTransfer/ConnectivityManager.cpp
+++ b/Swiften/FileTransfer/ConnectivityManager.cpp
@@ -23,39 +23,44 @@ ConnectivityManager::ConnectivityManager(NATTraverser* worker) : natTraversalWor
}
ConnectivityManager::~ConnectivityManager() {
- std::set<int> leftOpenPorts = ports;
- foreach(int port, leftOpenPorts) {
- removeListeningPort(port);
+ std::set<int> leftOpenUDPPorts = udpPorts;
+ foreach(int port, leftOpenUDPPorts) {
+ removeListeningPort(port, NATPortMapping::UDP);
+ }
+ std::set<int> leftOpenTCPPorts = tcpPorts;
+ foreach(int port, leftOpenTCPPorts) {
+ removeListeningPort(port, NATPortMapping::TCP);
}
}
-void ConnectivityManager::addListeningPort(int port) {
- ports.insert(port);
+void ConnectivityManager::addListeningPort(int port, NATPortMapping::Protocol protocol) {
+ udpPorts.insert(port);
boost::shared_ptr<NATTraversalGetPublicIPRequest> getIPRequest = natTraversalWorker->createGetPublicIPRequest();
if (getIPRequest) {
getIPRequest->onResult.connect(boost::bind(&ConnectivityManager::natTraversalGetPublicIPResult, this, _1));
getIPRequest->run();
}
- boost::shared_ptr<NATTraversalForwardPortRequest> forwardPortRequest = natTraversalWorker->createForwardPortRequest(port, port);
+ boost::shared_ptr<NATTraversalForwardPortRequest> forwardPortRequest = natTraversalWorker->createForwardPortRequest(port, port, protocol);
if (forwardPortRequest) {
forwardPortRequest->onResult.connect(boost::bind(&ConnectivityManager::natTraversalForwardPortResult, this, _1));
forwardPortRequest->run();
}
}
-void ConnectivityManager::removeListeningPort(int port) {
+void ConnectivityManager::removeListeningPort(int port, NATPortMapping::Protocol protocol) {
SWIFT_LOG(debug) << "remove listening port " << port << std::endl;
- ports.erase(port);
- boost::shared_ptr<NATTraversalRemovePortForwardingRequest> removePortForwardingRequest = natTraversalWorker->createRemovePortForwardingRequest(port, port);
+ udpPorts.erase(port);
+ boost::shared_ptr<NATTraversalRemovePortForwardingRequest> removePortForwardingRequest = natTraversalWorker->createRemovePortForwardingRequest(port, port, protocol);
if (removePortForwardingRequest) {
removePortForwardingRequest->run();
}
}
-std::vector<HostAddressPort> ConnectivityManager::getHostAddressPorts() const {
+std::vector<HostAddressPort> ConnectivityManager::getHostAddressPorts(NATPortMapping::Protocol protocol) const {
PlatformNetworkEnvironment env;
std::vector<HostAddressPort> results;
+ const std::set<int>& ports = (protocol == NATPortMapping::TCP ? udpPorts : tcpPorts);
//std::vector<HostAddress> addresses;
@@ -71,10 +76,11 @@ std::vector<HostAddressPort> ConnectivityManager::getHostAddressPorts() const {
return results;
}
-std::vector<HostAddressPort> ConnectivityManager::getAssistedHostAddressPorts() const {
+std::vector<HostAddressPort> ConnectivityManager::getAssistedHostAddressPorts(NATPortMapping::Protocol protocol) const {
std::vector<HostAddressPort> results;
if (publicAddress) {
+ const std::set<int>& ports = (protocol == NATPortMapping::TCP ? udpPorts : tcpPorts);
foreach (int port, ports) {
results.push_back(HostAddressPort(publicAddress.get(), port));
}
diff --git a/Swiften/FileTransfer/ConnectivityManager.h b/Swiften/FileTransfer/ConnectivityManager.h
index c094c02..c70cb5a 100644
--- a/Swiften/FileTransfer/ConnectivityManager.h
+++ b/Swiften/FileTransfer/ConnectivityManager.h
@@ -25,11 +25,11 @@ public:
ConnectivityManager(NATTraverser*);
~ConnectivityManager();
public:
- void addListeningPort(int port);
- void removeListeningPort(int port);
+ void addListeningPort(int port, NATPortMapping::Protocol protocol);
+ void removeListeningPort(int port, NATPortMapping::Protocol protocol);
- std::vector<HostAddressPort> getHostAddressPorts() const;
- std::vector<HostAddressPort> getAssistedHostAddressPorts() const;
+ std::vector<HostAddressPort> getHostAddressPorts(NATPortMapping::Protocol protocol) const;
+ std::vector<HostAddressPort> getAssistedHostAddressPorts(NATPortMapping::Protocol protocol) const;
private:
void natTraversalGetPublicIPResult(boost::optional<HostAddress> address);
@@ -38,7 +38,8 @@ private:
private:
NATTraverser* natTraversalWorker;
- std::set<int> ports;
+ std::set<int> udpPorts;
+ std::set<int> tcpPorts;
boost::optional<HostAddress> publicAddress;
};
diff --git a/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.cpp b/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.cpp
index 4b205cb..c3921bc 100644
--- a/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.cpp
+++ b/Swiften/FileTransfer/DefaultLocalJingleTransportCandidateGenerator.cpp
@@ -41,7 +41,7 @@ void DefaultLocalJingleTransportCandidateGenerator::generateLocalTransportCandid
const unsigned long localPreference = 0;
// get direct candidates
- std::vector<HostAddressPort> directCandidates = connectivityManager->getHostAddressPorts();
+ std::vector<HostAddressPort> directCandidates = connectivityManager->getHostAddressPorts(NATPortMapping::TCP);
foreach(HostAddressPort addressPort, directCandidates) {
JingleS5BTransportPayload::Candidate candidate;
candidate.type = JingleS5BTransportPayload::Candidate::DirectType;
@@ -53,7 +53,7 @@ void DefaultLocalJingleTransportCandidateGenerator::generateLocalTransportCandid
}
// get assissted candidates
- std::vector<HostAddressPort> assisstedCandidates = connectivityManager->getAssistedHostAddressPorts();
+ std::vector<HostAddressPort> assisstedCandidates = connectivityManager->getAssistedHostAddressPorts(NATPortMapping::TCP);
foreach(HostAddressPort addressPort, assisstedCandidates) {
JingleS5BTransportPayload::Candidate candidate;
candidate.type = JingleS5BTransportPayload::Candidate::AssistedType;
diff --git a/Swiften/FileTransfer/FileTransferManagerImpl.cpp b/Swiften/FileTransfer/FileTransferManagerImpl.cpp
index 7fd8b07..22dc681 100644
--- a/Swiften/FileTransfer/FileTransferManagerImpl.cpp
+++ b/Swiften/FileTransfer/FileTransferManagerImpl.cpp
@@ -68,7 +68,7 @@ void FileTransferManagerImpl::startListeningOnPort(int port) {
server->start();
bytestreamServer = new SOCKS5BytestreamServer(server, bytestreamRegistry);
bytestreamServer->start();
- connectivityManager->addListeningPort(port);
+ connectivityManager->addListeningPort(port, NATPortMapping::TCP);
s5bProxyFinder = new SOCKS5BytestreamProxyFinder(ownJID.getDomain(), iqRouter);
s5bProxyFinder->onProxyFound.connect(boost::bind(&FileTransferManagerImpl::addS5BProxy, this, _1));