db/upnp/Util: move caturl() to util/UriUtil.cxx
This commit is contained in:
parent
a9c3ca8606
commit
464767c5fd
@ -24,6 +24,7 @@
|
||||
#include "lib/upnp/Action.hxx"
|
||||
#include "Directory.hxx"
|
||||
#include "util/NumberParser.hxx"
|
||||
#include "util/UriUtil.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -24,11 +24,12 @@
|
||||
#include "ixmlwrap.hxx"
|
||||
#include "Util.hxx"
|
||||
#include "Action.hxx"
|
||||
#include "util/UriUtil.hxx"
|
||||
#include "util/Error.hxx"
|
||||
|
||||
ContentDirectoryService::ContentDirectoryService(const UPnPDevice &device,
|
||||
const UPnPService &service)
|
||||
:m_actionURL(caturl(device.URLBase, service.controlURL)),
|
||||
:m_actionURL(uri_apply_base(device.URLBase, service.controlURL)),
|
||||
m_serviceType(service.serviceType),
|
||||
m_deviceId(device.UDN),
|
||||
m_friendlyName(device.friendlyName),
|
||||
|
@ -39,34 +39,6 @@ trimstring(std::string &s, const char *ws)
|
||||
s.replace(pos + 1, std::string::npos, std::string());
|
||||
}
|
||||
|
||||
std::string
|
||||
caturl(const std::string &s1, const std::string &s2)
|
||||
{
|
||||
if (s2.front() == '/') {
|
||||
/* absolute path: replace the whole URI path in s1 */
|
||||
|
||||
auto i = s1.find("://");
|
||||
if (i == s1.npos)
|
||||
/* no scheme: override s1 completely */
|
||||
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;
|
||||
return out;
|
||||
}
|
||||
|
||||
static void
|
||||
path_catslash(std::string &s)
|
||||
{
|
||||
|
@ -25,9 +25,6 @@
|
||||
#include <string>
|
||||
#include <list>
|
||||
|
||||
std::string
|
||||
caturl(const std::string& s1, const std::string& s2);
|
||||
|
||||
void
|
||||
trimstring(std::string &s, const char *ws = " \t\n");
|
||||
|
||||
|
@ -137,3 +137,31 @@ uri_is_child_or_same(const char *parent, const char *child)
|
||||
{
|
||||
return strcmp(parent, child) == 0 || uri_is_child(parent, child);
|
||||
}
|
||||
|
||||
std::string
|
||||
uri_apply_base(const std::string &uri, const std::string &base)
|
||||
{
|
||||
if (uri.front() == '/') {
|
||||
/* absolute path: replace the whole URI path in base */
|
||||
|
||||
auto i = base.find("://");
|
||||
if (i == base.npos)
|
||||
/* no scheme: override base completely */
|
||||
return uri;
|
||||
|
||||
/* find the first slash after the host part */
|
||||
i = base.find('/', i + 3);
|
||||
if (i == base.npos)
|
||||
/* there's no URI path - simply append uri */
|
||||
i = base.length();
|
||||
|
||||
return base.substr(0, i) + uri;
|
||||
}
|
||||
|
||||
std::string out(base);
|
||||
if (out.back() != '/')
|
||||
out.push_back('/');
|
||||
|
||||
out += uri;
|
||||
return out;
|
||||
}
|
||||
|
@ -77,4 +77,12 @@ gcc_pure gcc_nonnull_all
|
||||
bool
|
||||
uri_is_child_or_same(const char *parent, const char *child);
|
||||
|
||||
/**
|
||||
* Translate the given URI in the context of #base. For example,
|
||||
* uri_apply_base("foo", "http://bar/a/")=="http://bar/a/foo".
|
||||
*/
|
||||
gcc_pure
|
||||
std::string
|
||||
uri_apply_base(const std::string &uri, const std::string &base);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user