Skip to content
Snippets Groups Projects
Commit 872e82fb authored by François-Simon Fauteux-Chapleau's avatar François-Simon Fauteux-Chapleau
Browse files

upnp_context: handle failure to get available port

GitLab: #42
Change-Id: I0d51ee475d98bb1cf1b2b92e4fb9642bcb3e51da
parent 9e064bf9
No related branches found
No related tags found
Loading
......@@ -483,7 +483,7 @@ UPnPContext::getAvailablePortNumber(PortType type)
}
// 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 @@ UPnPContext::provisionNewMappings(PortType type, int portCount)
} else {
// Very unlikely to get here!
if (logger_) logger_->error("Cannot provision port: no available port number");
return;
}
}
}
......@@ -1145,9 +1146,14 @@ UPnPContext::setIgdDiscoveryTimeout(std::chrono::milliseconds timeout)
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 @@ UPnPContext::registerMapping(Mapping& map)
// 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 @@ UPnPContext::registerMapping(Mapping& map)
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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment