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