20 #ifndef _UPNPPDISC_H_X_INCLUDED_ 21 #define _UPNPPDISC_H_X_INCLUDED_ 38 #if UPNP_VERSION < 10800 39 #define UpnpDiscovery Upnp_Discovery 62 struct DiscoveredTask {
64 std::string device_id;
65 std::chrono::steady_clock::duration expires;
77 class ContentDirectoryDescriptor {
86 std::chrono::steady_clock::time_point expires;
88 ContentDirectoryDescriptor() =
default;
90 ContentDirectoryDescriptor(std::string &&_id,
91 std::chrono::steady_clock::time_point last,
92 std::chrono::steady_clock::duration exp)
94 expires(last + exp + std::chrono::seconds(20)) {}
96 void Parse(
const std::string &url,
const char *description) {
97 device.
Parse(url, description);
101 const UpnpClient_Handle handle;
105 std::list<ContentDirectoryDescriptor> directories;
113 int search_timeout = 2;
118 std::chrono::steady_clock::time_point last_search = std::chrono::steady_clock::time_point();
148 void ExpireDevices();
150 void LockAdd(ContentDirectoryDescriptor &&d);
151 void LockRemove(
const std::string &
id);
158 static void *Explore(
void *);
165 virtual int Invoke(Upnp_EventType et,
const void *evp)
override;
virtual void LostUPnP(const ContentDirectoryService &service)=0
UPnPDeviceDirectory & operator=(const UPnPDeviceDirectory &)=delete
A WorkQueue manages the synchronisation around a queue of work items, where a number of client thread...
A class that is supposed to be used for libupnp asynchronous callbacks.
ContentDirectoryService GetServer(const char *friendly_name)
Get server by friendly name.
void Parse(const std::string &url, const char *description)
Build device from xml description downloaded from discovery.
Data holder for a UPnP device, parsed from the XML description obtained during discovery.
Manage UPnP discovery and maintain a directory of active devices.
Upnp_Discovery UpnpDiscovery
std::vector< ContentDirectoryService > GetDirectories()
Retrieve the directory services currently seen on the network.
virtual void FoundUPnP(const ContentDirectoryService &service)=0
Content Directory Service class.
static gcc_pure int UpnpDiscovery_get_Expires(const UpnpDiscovery *disco) noexcept
UPnPDeviceDirectory(UpnpClient_Handle _handle, UPnPDiscoveryListener *_listener=nullptr)
static gcc_pure const char * UpnpDiscovery_get_DeviceID_cstr(const UpnpDiscovery *disco) noexcept
static gcc_pure const char * UpnpDiscovery_get_Location_cstr(const UpnpDiscovery *disco) noexcept