tools: add upnp

dnc: upnp can be disabled via dnc.yaml only
dsh and dvpn : upnp cannot be disabled

Change-Id: Ic1a53b049eace145ebdc7ac186ab92a4a0df3635
diff --git a/tools/dnc/main.cpp b/tools/dnc/main.cpp
index 2e4d1bf..f759ff5 100644
--- a/tools/dnc/main.cpp
+++ b/tools/dnc/main.cpp
@@ -51,6 +51,7 @@
     bool anonymous_cnx {false};
     bool verbose {false};
     std::map<std::string, std::vector<int>> authorizedServices {};
+    bool enable_upnp {true};
 };
 
 static const constexpr struct option long_options[]
@@ -201,6 +202,9 @@
                     params.authorizedServices[ip].push_back(port);
                 }
             }
+            if (config["enable_upnp"]) {
+                params.enable_upnp = config["enable_upnp"].as<bool>();
+            }
         }
     }
     return params;
@@ -272,7 +276,8 @@
                                               params.turn_realm,
                                               params.anonymous_cnx,
                                               params.verbose,
-                                              params.authorizedServices);
+                                              params.authorizedServices,
+                                              params.enable_upnp);
     } else {
         dhtnc = std::make_unique<dhtnet::Dnc>(identity,
                                               params.bootstrap,
@@ -283,7 +288,8 @@
                                               params.turn_user,
                                               params.turn_pass,
                                               params.turn_realm,
-                                              params.verbose);
+                                              params.verbose,
+                                              params.enable_upnp);
     }
     dhtnc->run();
     return EXIT_SUCCESS;