db/upnp/Util: handle absolute URI paths properly in caturl()
Fixes problems with some UPnP servers.
This commit is contained in:
parent
9aeb23dfe9
commit
9fb5134f64
|
@ -45,14 +45,27 @@ trimstring(std::string &s, const char *ws)
|
||||||
std::string
|
std::string
|
||||||
caturl(const std::string &s1, const std::string &s2)
|
caturl(const std::string &s1, const std::string &s2)
|
||||||
{
|
{
|
||||||
std::string out(s1);
|
if (s2.front() == '/') {
|
||||||
if (out.back() == '/') {
|
/* absolute path: replace the whole URI path in s1 */
|
||||||
if (s2.front() == '/')
|
|
||||||
out.erase(out.size()-1);
|
auto i = s1.find("://");
|
||||||
} else {
|
if (i == s1.npos)
|
||||||
if (s2.front() != '/')
|
/* no scheme: override s1 completely */
|
||||||
out.push_back('/');
|
return s2;
|
||||||
|
|
||||||
|
/* find the first slash after the host part */
|
||||||
|
i = s1.find('/', i + 3);
|
||||||
|
if (i == s1.npos)
|
||||||
|
/* there's no URI path - simply append s2 */
|
||||||
|
i = s1.length();
|
||||||
|
|
||||||
|
return s1.substr(0, i) + s2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string out(s1);
|
||||||
|
if (out.back() != '/')
|
||||||
|
out.push_back('/');
|
||||||
|
|
||||||
out += s2;
|
out += s2;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue