summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin Mons <edwin.mons@isode.com>2018-11-09 08:51:10 (GMT)
committerEdwin Mons <edwin.mons@isode.com>2018-11-09 10:05:12 (GMT)
commita45eed2d826f60a20dfd1f4f06df37d1f83263f8 (patch)
tree7593509f9b89630ff70d5c9e1d14966435a4ab8a
parent644db9fce94670e610db46bdd28eb9d1e658a798 (diff)
downloadswift-a45eed2d826f60a20dfd1f4f06df37d1f83263f8.zip
swift-a45eed2d826f60a20dfd1f4f06df37d1f83263f8.tar.bz2
Store NATPortMapping lifetime as uint32_t
The NAT-PMP RFC specifies lifetime as an unsigned, 32 bit integer, so using this internally makes sense. This also removes the need for casts in interface code. A slight bug in the NATPMPInterface implementation to remove a mapping has been addressed. Test-Information: Unit tests pass on macOS 10.13 Change-Id: I06687fd2735a8706f339f85d6c957ad7aadaaf02
-rw-r--r--Swiften/Network/MiniUPnPInterface.cpp2
-rw-r--r--Swiften/Network/NATPMPInterface.cpp8
-rw-r--r--Swiften/Network/NATPortMapping.h8
3 files changed, 7 insertions, 11 deletions
diff --git a/Swiften/Network/MiniUPnPInterface.cpp b/Swiften/Network/MiniUPnPInterface.cpp
index af3b67c..8425c77 100644
--- a/Swiften/Network/MiniUPnPInterface.cpp
+++ b/Swiften/Network/MiniUPnPInterface.cpp
@@ -8,20 +8,18 @@
* Copyright (c) 2015-2018 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#include <Swiften/Network/MiniUPnPInterface.h>
#include <memory>
-#include <boost/lexical_cast.hpp>
-
#include <miniupnpc.h>
#include <upnpcommands.h>
#include <upnperrors.h>
#include <Swiften/Base/Log.h>
namespace Swift {
struct MiniUPnPInterface::Private {
diff --git a/Swiften/Network/NATPMPInterface.cpp b/Swiften/Network/NATPMPInterface.cpp
index 8ab26d4..0c33c1f 100644
--- a/Swiften/Network/NATPMPInterface.cpp
+++ b/Swiften/Network/NATPMPInterface.cpp
@@ -8,20 +8,18 @@
* Copyright (c) 2014-2018 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#include <Swiften/Network/NATPMPInterface.h>
#include <memory>
-#include <boost/numeric/conversion/cast.hpp>
-
#include <Swiften/Base/Log.h>
// This has to be included after the previous headers, because of WIN32 macro
// being defined somewhere.
#include <natpmp.h>
#pragma GCC diagnostic ignored "-Wold-style-cast"
namespace Swift {
@@ -75,19 +73,19 @@ boost::optional<HostAddress> NATPMPInterface::getPublicIP() {
}
boost::optional<NATPortMapping> NATPMPInterface::addPortForward(unsigned short localPort, unsigned short publicPort) {
NATPortMapping mapping(localPort, publicPort, NATPortMapping::TCP);
if (sendnewportmappingrequest(
&p->natpmp,
mapping.getProtocol() == NATPortMapping::TCP ? NATPMP_PROTOCOL_TCP : NATPMP_PROTOCOL_UDP,
mapping.getLocalPort(),
mapping.getPublicPort(),
- boost::numeric_cast<uint32_t>(mapping.getLeaseInSeconds())) < 0) {
+ mapping.getLeaseInSeconds()) < 0) {
SWIFT_LOG(debug) << "Failed to send NAT-PMP port forwarding request!" << std::endl;
return boost::optional<NATPortMapping>();
}
int r = 0;
natpmpresp_t response;
do {
fd_set fds;
struct timeval timeout;
@@ -98,29 +96,29 @@ boost::optional<NATPortMapping> NATPMPInterface::addPortForward(unsigned short l
// Limit NAT-PMP timeout to ten seconds.
timeout.tv_sec = 10;
timeout.tv_usec = 0;
select(FD_SETSIZE, &fds, nullptr, nullptr, &timeout);
r = readnatpmpresponseorretry(&p->natpmp, &response);
} while(false /*r == NATPMP_TRYAGAIN*/);
if (r == 0) {
- NATPortMapping result(response.pnu.newportmapping.privateport, response.pnu.newportmapping.mappedpublicport, NATPortMapping::TCP, boost::numeric_cast<int>(response.pnu.newportmapping.lifetime));
+ 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;
return boost::optional<NATPortMapping>();
}
}
bool NATPMPInterface::removePortForward(const NATPortMapping& mapping) {
- if (sendnewportmappingrequest(&p->natpmp, mapping.getProtocol() == NATPortMapping::TCP ? NATPMP_PROTOCOL_TCP : NATPMP_PROTOCOL_UDP, 0, 0, boost::numeric_cast<uint32_t>(mapping.getLocalPort())) < 0) {
+ if (sendnewportmappingrequest(&p->natpmp, mapping.getProtocol() == NATPortMapping::TCP ? NATPMP_PROTOCOL_TCP : NATPMP_PROTOCOL_UDP, mapping.getLocalPort(), 0, 0) < 0) {
SWIFT_LOG(debug) << "Failed to send NAT-PMP remove forwarding request!" << std::endl;
return false;
}
int r = 0;
natpmpresp_t response;
do {
fd_set fds;
struct timeval timeout;
diff --git a/Swiften/Network/NATPortMapping.h b/Swiften/Network/NATPortMapping.h
index b68052d..bf0fb1c 100644
--- a/Swiften/Network/NATPortMapping.h
+++ b/Swiften/Network/NATPortMapping.h
@@ -1,53 +1,53 @@
/*
* 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.
+ * Copyright (c) 2015-2018 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
#include <Swiften/Base/API.h>
#include <Swiften/Network/HostAddress.h>
namespace Swift {
class SWIFTEN_API NATPortMapping {
public:
enum Protocol {
TCP,
UDP
};
- NATPortMapping(unsigned short localPort, unsigned short publicPort, Protocol protocol = TCP, int leaseInSeconds = 60 * 60 * 24) :
+ NATPortMapping(unsigned short localPort, unsigned short publicPort, Protocol protocol = TCP, uint32_t leaseInSeconds = 60 * 60 * 24) :
publicPort(publicPort), localPort(localPort), protocol(protocol), leaseInSeconds(leaseInSeconds) {
}
unsigned short getPublicPort() const {
return publicPort;
}
unsigned short getLocalPort() const {
return localPort;
}
Protocol getProtocol() const {
return protocol;
}
- int getLeaseInSeconds() const {
+ uint32_t getLeaseInSeconds() const {
return leaseInSeconds;
}
private:
unsigned short publicPort;
unsigned short localPort;
Protocol protocol;
- int leaseInSeconds;
+ uint32_t leaseInSeconds;
};
}