From a45eed2d826f60a20dfd1f4f06df37d1f83263f8 Mon Sep 17 00:00:00 2001
From: Edwin Mons <edwin.mons@isode.com>
Date: Fri, 9 Nov 2018 09:51:10 +0100
Subject: 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

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
@@ -14,8 +14,6 @@
 
 #include <memory>
 
-#include <boost/lexical_cast.hpp>
-
 #include <miniupnpc.h>
 #include <upnpcommands.h>
 #include <upnperrors.h>
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
@@ -14,8 +14,6 @@
 
 #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
@@ -81,7 +79,7 @@ boost::optional<NATPortMapping> NATPMPInterface::addPortForward(unsigned short l
                 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>();
     }
@@ -104,7 +102,7 @@ boost::optional<NATPortMapping> NATPMPInterface::addPortForward(unsigned short l
     } 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 {
@@ -114,7 +112,7 @@ boost::optional<NATPortMapping> NATPMPInterface::addPortForward(unsigned short l
 }
 
 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;
     }
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
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (c) 2015 Isode Limited.
+ * Copyright (c) 2015-2018 Isode Limited.
  * All rights reserved.
  * See the COPYING file for more information.
  */
@@ -23,7 +23,7 @@ namespace Swift {
             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) {
 
         }
@@ -40,7 +40,7 @@ namespace Swift {
             return protocol;
         }
 
-        int getLeaseInSeconds() const {
+        uint32_t getLeaseInSeconds() const {
             return leaseInSeconds;
         }
 
@@ -48,6 +48,6 @@ namespace Swift {
         unsigned short publicPort;
         unsigned short localPort;
         Protocol protocol;
-        int leaseInSeconds;
+        uint32_t leaseInSeconds;
     };
 }
-- 
cgit v0.10.2-6-g49f6