From 972450e7661569538b344c713d2ea8cf03d4922b Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Wed, 29 Oct 2008 01:17:19 +0000 Subject: [PATCH] support for UPnP routers that don't provide a urlbase --- src/upnp.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/upnp.cpp b/src/upnp.cpp index 29aef8bde..59fa94cda 100644 --- a/src/upnp.cpp +++ b/src/upnp.cpp @@ -853,14 +853,22 @@ void upnp::on_upnp_xml(error_code const& e if (s.url_base.empty()) d.control_url = s.control_url; else d.control_url = s.url_base + s.control_url; - std::stringstream msg; - msg << "found control URL: " << s.control_url << " namespace: " - << d.service_namespace << " in response from " << d.url; - log(msg.str()); - std::string protocol; std::string auth; char const* error; + if (!d.control_url.empty() && d.control_url[0] == '/') + { + boost::tie(protocol, auth, d.hostname, d.port, d.path, error) + = parse_url_components(d.url); + d.control_url = protocol + "://" + d.hostname + ":" + + boost::lexical_cast(d.port) + s.control_url; + } + + std::stringstream msg; + msg << "found control URL: " << d.control_url << " namespace: " + << d.service_namespace << " urlbase: " << s.url_base << " in response from " << d.url; + log(msg.str()); + boost::tie(protocol, auth, d.hostname, d.port, d.path, error) = parse_url_components(d.control_url);