UPNP - Post merge bug fixes and improvements
- PUPNP: perform all requests asynchronously to prevent blocking the daemon shared (main) thread.
- PUPNP: use the device ID and the URL as an identifier (currently only device ID is used).
- PUPNP: Add search retry mechanism to improve resilience (as done with NAT-PMP)
- Do not search for IGD or perform requests if the host (local) address is not valid.
- ICE: allocated mappings will be used only if they have a valid host address.