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 "lib/upnp/Action.hxx"
|
||||||
#include "Directory.hxx"
|
#include "Directory.hxx"
|
||||||
#include "util/NumberParser.hxx"
|
#include "util/NumberParser.hxx"
|
||||||
|
#include "util/UriUtil.hxx"
|
||||||
#include "util/Error.hxx"
|
#include "util/Error.hxx"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -24,11 +24,12 @@
|
|||||||
#include "ixmlwrap.hxx"
|
#include "ixmlwrap.hxx"
|
||||||
#include "Util.hxx"
|
#include "Util.hxx"
|
||||||
#include "Action.hxx"
|
#include "Action.hxx"
|
||||||
|
#include "util/UriUtil.hxx"
|
||||||
#include "util/Error.hxx"
|
#include "util/Error.hxx"
|
||||||
|
|
||||||
ContentDirectoryService::ContentDirectoryService(const UPnPDevice &device,
|
ContentDirectoryService::ContentDirectoryService(const UPnPDevice &device,
|
||||||
const UPnPService &service)
|
const UPnPService &service)
|
||||||
:m_actionURL(caturl(device.URLBase, service.controlURL)),
|
:m_actionURL(uri_apply_base(device.URLBase, service.controlURL)),
|
||||||
m_serviceType(service.serviceType),
|
m_serviceType(service.serviceType),
|
||||||
m_deviceId(device.UDN),
|
m_deviceId(device.UDN),
|
||||||
m_friendlyName(device.friendlyName),
|
m_friendlyName(device.friendlyName),
|
||||||
|
@ -39,34 +39,6 @@ trimstring(std::string &s, const char *ws)
|
|||||||
s.replace(pos + 1, std::string::npos, std::string());
|
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
|
static void
|
||||||
path_catslash(std::string &s)
|
path_catslash(std::string &s)
|
||||||
{
|
{
|
||||||
|
@ -25,9 +25,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
std::string
|
|
||||||
caturl(const std::string& s1, const std::string& s2);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
trimstring(std::string &s, const char *ws = " \t\n");
|
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);
|
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
|
bool
|
||||||
uri_is_child_or_same(const char *parent, const char *child);
|
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
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user