20 #ifndef _UPNPPDISC_H_X_INCLUDED_
21 #define _UPNPPDISC_H_X_INCLUDED_
29 #include <upnp/upnp.h>
57 struct DiscoveredTask {
59 std::string device_id;
60 std::chrono::steady_clock::duration expires;
62 DiscoveredTask(
const Upnp_Discovery *disco)
63 :url(disco->Location),
64 device_id(disco->DeviceId),
65 expires(std::chrono::seconds(disco->Expires)) {}
72 class ContentDirectoryDescriptor {
81 std::chrono::steady_clock::time_point expires;
83 ContentDirectoryDescriptor() =
default;
85 ContentDirectoryDescriptor(std::string &&_id,
86 std::chrono::steady_clock::time_point last,
87 std::chrono::steady_clock::duration exp)
89 expires(last + exp + std::chrono::seconds(20)) {}
91 void Parse(
const std::string &url,
const char *description) {
92 device.
Parse(url, description);
96 const UpnpClient_Handle handle;
100 std::list<ContentDirectoryDescriptor> directories;
108 int search_timeout = 2;
113 std::chrono::steady_clock::time_point last_search = std::chrono::steady_clock::time_point();
143 void ExpireDevices();
145 void LockAdd(ContentDirectoryDescriptor &&d);
146 void LockRemove(
const std::string &
id);
153 static void *Explore(
void *);
156 int OnAlive(Upnp_Discovery *disco);
157 int OnByeBye(Upnp_Discovery *disco);
160 virtual int Invoke(Upnp_EventType et,
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.
std::vector< ContentDirectoryService > GetDirectories()
Retrieve the directory services currently seen on the network.
virtual void FoundUPnP(const ContentDirectoryService &service)=0
Content Directory Service class.
UPnPDeviceDirectory(UpnpClient_Handle _handle, UPnPDiscoveryListener *_listener=nullptr)