diff options
author | Max Kellermann <max@duempel.org> | 2014-01-18 16:08:30 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-01-18 16:08:30 +0100 |
commit | 7d696a7063c7510485f2fbf315731212d28e49e0 (patch) | |
tree | d10dcbaea5ae2a5896086da142b6bed06acd5e26 /src/db/upnp | |
parent | 53573e950f74f482bbbb594aa4516de050dc4e34 (diff) | |
download | mpd-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 '')
-rw-r--r-- | src/db/upnp/Discovery.cxx | 35 | ||||
-rw-r--r-- | src/db/upnp/Discovery.hxx | 23 |
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 |