upnp_context: handle failure to get available port

GitLab: #42
Change-Id: I0d51ee475d98bb1cf1b2b92e4fb9642bcb3e51da
diff --git a/src/upnp/upnp_context.cpp b/src/upnp/upnp_context.cpp
index 47ff9d9..777f459 100644
--- a/src/upnp/upnp_context.cpp
+++ b/src/upnp/upnp_context.cpp
@@ -483,7 +483,7 @@
     }
 
     // Very unlikely to get here.
-    if (logger_) logger_->error("Could not find an available port after %i trials", MAX_REQUEST_RETRIES);
+    if (logger_) logger_->error("Could not find an available port after {} trials", MAX_REQUEST_RETRIES);
     return 0;
 }
 
@@ -530,6 +530,7 @@
         } else {
             // Very unlikely to get here!
             if (logger_) logger_->error("Cannot provision port: no available port number");
+            return;
         }
     }
 }
@@ -1145,9 +1146,14 @@
 Mapping::sharedPtr_t
 UPnPContext::registerMapping(Mapping& map)
 {
+    Mapping::sharedPtr_t mapPtr;
+
     if (map.getExternalPort() == 0) {
-        // JAMI_DBG("Port number not set. Will set a random port number");
         auto port = getAvailablePortNumber(map.getType());
+        if (port == 0) {
+            if (logger_) logger_->error("Unable to register mapping: no available port number");
+            return mapPtr;
+        }
         map.setExternalPort(port);
         map.setInternalPort(port);
     }
@@ -1155,8 +1161,6 @@
     // Newly added mapping must be in pending state by default.
     map.setState(MappingState::PENDING);
 
-    Mapping::sharedPtr_t mapPtr;
-
     {
         std::lock_guard lock(mappingMutex_);
         auto& mappingList = getMappingList(map.getType());
@@ -1175,7 +1179,7 @@
         std::lock_guard lock(igdDiscoveryMutex_);
         // IGD discovery is in progress, the mapping request will be made once an IGD becomes available
         if (igdDiscoveryInProgress_) {
-            if (logger_) logger_->debug("Request for mapping {} will be requested when an IGD becomes available",
+            if (logger_) logger_->debug("Mapping {} will be requested when an IGD becomes available",
                                         map.toString());
         } else {
             // it's not in the IGD discovery phase, the mapping request will fail