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
No related merge requests found
...@@ -483,7 +483,7 @@ UPnPContext::getAvailablePortNumber(PortType type) ...@@ -483,7 +483,7 @@ UPnPContext::getAvailablePortNumber(PortType type)
} }
// Very unlikely to get here. // 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; return 0;
} }
...@@ -530,6 +530,7 @@ UPnPContext::provisionNewMappings(PortType type, int portCount) ...@@ -530,6 +530,7 @@ UPnPContext::provisionNewMappings(PortType type, int portCount)
} else { } else {
// Very unlikely to get here! // Very unlikely to get here!
if (logger_) logger_->error("Cannot provision port: no available port number"); if (logger_) logger_->error("Cannot provision port: no available port number");
return;
} }
} }
} }
...@@ -1145,9 +1146,14 @@ UPnPContext::setIgdDiscoveryTimeout(std::chrono::milliseconds timeout) ...@@ -1145,9 +1146,14 @@ UPnPContext::setIgdDiscoveryTimeout(std::chrono::milliseconds timeout)
Mapping::sharedPtr_t Mapping::sharedPtr_t
UPnPContext::registerMapping(Mapping& map) UPnPContext::registerMapping(Mapping& map)
{ {
Mapping::sharedPtr_t mapPtr;
if (map.getExternalPort() == 0) { if (map.getExternalPort() == 0) {
// JAMI_DBG("Port number not set. Will set a random port number");
auto port = getAvailablePortNumber(map.getType()); 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.setExternalPort(port);
map.setInternalPort(port); map.setInternalPort(port);
} }
...@@ -1155,8 +1161,6 @@ UPnPContext::registerMapping(Mapping& map) ...@@ -1155,8 +1161,6 @@ UPnPContext::registerMapping(Mapping& map)
// Newly added mapping must be in pending state by default. // Newly added mapping must be in pending state by default.
map.setState(MappingState::PENDING); map.setState(MappingState::PENDING);
Mapping::sharedPtr_t mapPtr;
{ {
std::lock_guard lock(mappingMutex_); std::lock_guard lock(mappingMutex_);
auto& mappingList = getMappingList(map.getType()); auto& mappingList = getMappingList(map.getType());
...@@ -1175,7 +1179,7 @@ UPnPContext::registerMapping(Mapping& map) ...@@ -1175,7 +1179,7 @@ UPnPContext::registerMapping(Mapping& map)
std::lock_guard lock(igdDiscoveryMutex_); std::lock_guard lock(igdDiscoveryMutex_);
// IGD discovery is in progress, the mapping request will be made once an IGD becomes available // IGD discovery is in progress, the mapping request will be made once an IGD becomes available
if (igdDiscoveryInProgress_) { 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()); map.toString());
} else { } else {
// it's not in the IGD discovery phase, the mapping request will fail // 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