diff options
-rw-r--r-- | Swiften/Network/MiniUPnPInterface.cpp | 16 | ||||
-rw-r--r-- | Swiften/Network/NATPMPInterface.cpp | 10 | ||||
-rw-r--r-- | Swiften/Network/NATPortMapping.h | 20 |
3 files changed, 31 insertions, 15 deletions
diff --git a/Swiften/Network/MiniUPnPInterface.cpp b/Swiften/Network/MiniUPnPInterface.cpp index f6e3b5d..c9f682f 100644 --- a/Swiften/Network/MiniUPnPInterface.cpp +++ b/Swiften/Network/MiniUPnPInterface.cpp @@ -57,11 +57,11 @@ boost::optional<NATPortMapping> MiniUPnPInterface::addPortForward(int actualLoca NATPortMapping mapping(actualLocalPort, actualPublicPort, NATPortMapping::TCP); - std::string publicPort = boost::lexical_cast<std::string>(mapping.publicPort); - std::string localPort = boost::lexical_cast<std::string>(mapping.localPort); - std::string leaseSeconds = boost::lexical_cast<std::string>(mapping.leaseInSeconds); + std::string publicPort = boost::lexical_cast<std::string>(mapping.getPublicPort()); + std::string localPort = boost::lexical_cast<std::string>(mapping.getLocalPort()); + std::string leaseSeconds = boost::lexical_cast<std::string>(mapping.getLeaseInSeconds()); - int ret = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, publicPort.c_str(), localPort.c_str(), localAddress.c_str(), 0, mapping.protocol == NATPortMapping::TCP ? "TCP" : "UDP", 0, leaseSeconds.c_str()); + int ret = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, publicPort.c_str(), localPort.c_str(), localAddress.c_str(), 0, mapping.getPublicPort() == NATPortMapping::TCP ? "TCP" : "UDP", 0, leaseSeconds.c_str()); if (ret == UPNPCOMMAND_SUCCESS) { return mapping; } @@ -75,11 +75,11 @@ bool MiniUPnPInterface::removePortForward(const NATPortMapping& mapping) { return false; } - std::string publicPort = boost::lexical_cast<std::string>(mapping.publicPort); - std::string localPort = boost::lexical_cast<std::string>(mapping.localPort); - std::string leaseSeconds = boost::lexical_cast<std::string>(mapping.leaseInSeconds); + std::string publicPort = boost::lexical_cast<std::string>(mapping.getPublicPort()); + std::string localPort = boost::lexical_cast<std::string>(mapping.getLocalPort()); + std::string leaseSeconds = boost::lexical_cast<std::string>(mapping.getLeaseInSeconds()); - int ret = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, publicPort.c_str(), mapping.protocol == NATPortMapping::TCP ? "TCP" : "UDP", 0); + int ret = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, publicPort.c_str(), mapping.getProtocol() == NATPortMapping::TCP ? "TCP" : "UDP", 0); return ret == UPNPCOMMAND_SUCCESS; } diff --git a/Swiften/Network/NATPMPInterface.cpp b/Swiften/Network/NATPMPInterface.cpp index 298240a..36553ed 100644 --- a/Swiften/Network/NATPMPInterface.cpp +++ b/Swiften/Network/NATPMPInterface.cpp @@ -53,7 +53,7 @@ boost::optional<HostAddress> NATPMPInterface::getPublicIP() { boost::optional<NATPortMapping> NATPMPInterface::addPortForward(int localPort, int publicPort) { NATPortMapping mapping(localPort, publicPort, NATPortMapping::TCP); - if (sendnewportmappingrequest(&natpmp, mapping.protocol == NATPortMapping::TCP ? NATPMP_PROTOCOL_TCP : NATPMP_PROTOCOL_UDP, mapping.leaseInSeconds, mapping.publicPort, mapping.localPort) < 0) { + if (sendnewportmappingrequest(&natpmp, mapping.getProtocol() == NATPortMapping::TCP ? NATPMP_PROTOCOL_TCP : NATPMP_PROTOCOL_UDP, mapping.getLeaseInSeconds(), mapping.getPublicPort(), mapping.getLocalPort()) < 0) { SWIFT_LOG(debug) << "Failed to send NAT-PMP port forwarding request!" << std::endl; return boost::optional<NATPortMapping>(); } @@ -71,10 +71,8 @@ boost::optional<NATPortMapping> NATPMPInterface::addPortForward(int localPort, i } while(r == NATPMP_TRYAGAIN); if (r == 0) { - mapping.localPort = response.pnu.newportmapping.privateport; - mapping.publicPort = response.pnu.newportmapping.mappedpublicport; - mapping.leaseInSeconds = response.pnu.newportmapping.lifetime; - return mapping; + NATPortMapping result(response.pnu.newportmapping.privateport, response.pnu.newportmapping.mappedpublicport, NATPortMapping::TCP, response.pnu.newportmapping.lifetime); + return result; } else { SWIFT_LOG(debug) << "Invalid NAT-PMP response." << std::endl; @@ -83,7 +81,7 @@ boost::optional<NATPortMapping> NATPMPInterface::addPortForward(int localPort, i } bool NATPMPInterface::removePortForward(const NATPortMapping& mapping) { - if (sendnewportmappingrequest(&natpmp, mapping.protocol == NATPortMapping::TCP ? NATPMP_PROTOCOL_TCP : NATPMP_PROTOCOL_UDP, 0, 0, mapping.localPort) < 0) { + if (sendnewportmappingrequest(&natpmp, mapping.getProtocol() == NATPortMapping::TCP ? NATPMP_PROTOCOL_TCP : NATPMP_PROTOCOL_UDP, 0, 0, mapping.getLocalPort()) < 0) { SWIFT_LOG(debug) << "Failed to send NAT-PMP remove forwarding request!" << std::endl; return false; } diff --git a/Swiften/Network/NATPortMapping.h b/Swiften/Network/NATPortMapping.h index 82f62bb..db14500 100644 --- a/Swiften/Network/NATPortMapping.h +++ b/Swiften/Network/NATPortMapping.h @@ -9,7 +9,8 @@ #include <Swiften/Network/HostAddress.h> namespace Swift { - struct NATPortMapping { + class NATPortMapping { + public: enum Protocol { TCP, UDP, @@ -19,6 +20,23 @@ namespace Swift { } + int getPublicPort() const { + return publicPort; + } + + int getLocalPort() const { + return localPort; + } + + Protocol getProtocol() const { + return protocol; + } + + int getLeaseInSeconds() const { + return leaseInSeconds; + } + + private: int publicPort; int localPort; Protocol protocol; |