aboutsummaryrefslogtreecommitdiffstats
path: root/src/db/upnp
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-01-18 16:08:30 +0100
committerMax Kellermann <max@duempel.org>2014-01-18 16:08:30 +0100
commit7d696a7063c7510485f2fbf315731212d28e49e0 (patch)
treed10dcbaea5ae2a5896086da142b6bed06acd5e26 /src/db/upnp
parent53573e950f74f482bbbb594aa4516de050dc4e34 (diff)
downloadmpd-7d696a7063c7510485f2fbf315731212d28e49e0.tar.gz
mpd-7d696a7063c7510485f2fbf315731212d28e49e0.tar.xz
mpd-7d696a7063c7510485f2fbf315731212d28e49e0.zip
db/upnp/Discovery: eliminate Error attribute
Move code to method Start() and add Error& parameters to several methods.
Diffstat (limited to 'src/db/upnp')
-rw-r--r--src/db/upnp/Discovery.cxx35
-rw-r--r--src/db/upnp/Discovery.hxx23
2 files changed, 28 insertions, 30 deletions
diff --git a/src/db/upnp/Discovery.cxx b/src/db/upnp/Discovery.cxx
index 5e6479b3d..f47741240 100644
--- a/src/db/upnp/Discovery.cxx
+++ b/src/db/upnp/Discovery.cxx
@@ -160,8 +160,8 @@ UPnPDeviceDirectory::cluCallBack(Upnp_EventType et, void *evp)
return UPNP_E_SUCCESS;
}
-void
-UPnPDeviceDirectory::expireDevices()
+bool
+UPnPDeviceDirectory::expireDevices(Error &error)
{
const ScopeLock protect(mutex);
time_t now = time(0);
@@ -178,7 +178,9 @@ UPnPDeviceDirectory::expireDevices()
}
if (didsomething)
- search();
+ return search(error);
+
+ return true;
}
UPnPDeviceDirectory::UPnPDeviceDirectory(LibUPnP *_lib)
@@ -186,20 +188,25 @@ UPnPDeviceDirectory::UPnPDeviceDirectory(LibUPnP *_lib)
discoveredQueue("DiscoveredQueue"),
m_searchTimeout(2), m_lastSearch(0)
{
+}
+
+bool
+UPnPDeviceDirectory::Start(Error &error)
+{
if (!discoveredQueue.start(1, discoExplorer, this)) {
error.Set(upnp_domain, "Discover work queue start failed");
- return;
+ return false;
}
lib->SetHandler([this](Upnp_EventType type, void *event){
cluCallBack(type, event);
});
- search();
+ return search(error);
}
bool
-UPnPDeviceDirectory::search()
+UPnPDeviceDirectory::search(Error &error)
{
time_t now = time(0);
if (now - m_lastSearch < 10)
@@ -229,13 +236,12 @@ UPnPDeviceDirectory::search()
}
bool
-UPnPDeviceDirectory::getDirServices(std::vector<ContentDirectoryService> &out)
+UPnPDeviceDirectory::getDirServices(std::vector<ContentDirectoryService> &out,
+ Error &error)
{
- if (!ok())
- return false;
-
// Has locking, do it before our own lock
- expireDevices();
+ if (!expireDevices(error))
+ return false;
const ScopeLock protect(mutex);
@@ -253,12 +259,12 @@ UPnPDeviceDirectory::getDirServices(std::vector<ContentDirectoryService> &out)
bool
UPnPDeviceDirectory::getServer(const char *friendlyName,
- ContentDirectoryService &server)
+ ContentDirectoryService &server,
+ Error &error)
{
std::vector<ContentDirectoryService> ds;
- if (!getDirServices(ds)) {
+ if (!getDirServices(ds, error))
return false;
- }
for (const auto &i : ds) {
if (strcmp(friendlyName, i.getFriendlyName()) == 0) {
@@ -267,5 +273,6 @@ UPnPDeviceDirectory::getServer(const char *friendlyName,
}
}
+ error.Set(upnp_domain, "Server not found");
return false;
}
diff --git a/src/db/upnp/Discovery.hxx b/src/db/upnp/Discovery.hxx
index edda3a8de..59eed9331 100644
--- a/src/db/upnp/Discovery.hxx
+++ b/src/db/upnp/Discovery.hxx
@@ -82,8 +82,6 @@ class UPnPDeviceDirectory {
LibUPnP *const lib;
- Error error;
-
Mutex mutex;
std::map<std::string, ContentDirectoryDescriptor> directories;
WorkQueue<DiscoveredTask *> discoveredQueue;
@@ -103,8 +101,10 @@ public:
UPnPDeviceDirectory(const UPnPDeviceDirectory &) = delete;
UPnPDeviceDirectory& operator=(const UPnPDeviceDirectory &) = delete;
+ bool Start(Error &error);
+
/** Retrieve the directory services currently seen on the network */
- bool getDirServices(std::vector<ContentDirectoryService> &);
+ bool getDirServices(std::vector<ContentDirectoryService> &, Error &);
/**
* Get server by friendly name. It's a bit wasteful to copy
@@ -112,27 +112,18 @@ public:
* there isn't going to be millions...
*/
bool getServer(const char *friendlyName,
- ContentDirectoryService &server);
-
- /** My health */
- bool ok() const {
- return !error.IsDefined();
- }
-
- /** My diagnostic if health is bad */
- const Error &GetError() const {
- return error;
- }
+ ContentDirectoryService &server,
+ Error &error);
private:
- bool search();
+ bool search(Error &error);
/**
* Look at the devices and get rid of those which have not
* been seen for too long. We do this when listing the top
* directory.
*/
- void expireDevices();
+ bool expireDevices(Error &error);
/**
* Worker routine for the discovery queue. Get messages about