39 #ifndef _PLT_CONTROL_POINT_H_
40 #define _PLT_CONTROL_POINT_H_
73 virtual NPT_Result OnDeviceAdded(PLT_DeviceDataReference& device) = 0;
74 virtual NPT_Result OnDeviceRemoved(PLT_DeviceDataReference& device) = 0;
75 virtual NPT_Result OnActionResponse(NPT_Result res, PLT_ActionReference& action,
void* userdata) = 0;
76 virtual NPT_Result OnEventNotify(
PLT_Service* service, NPT_List<PLT_StateVariable*>* vars) = 0;
79 typedef NPT_List<PLT_CtrlPointListener*> PLT_CtrlPointListenerList;
91 public NPT_HttpRequestHandler
94 PLT_CtrlPoint(
const char* search_criteria =
"upnp:rootdevice");
101 virtual NPT_Result
GetPort(NPT_UInt16& port);
108 virtual void IgnoreUUID(
const char* uuid);
109 virtual NPT_Result Search(
const NPT_HttpUrl& url = NPT_HttpUrl(
"239.255.255.250", 1900,
"*"),
110 const char* target =
"upnp:rootdevice",
112 NPT_TimeInterval frequency = NPT_TimeInterval(50.),
113 NPT_TimeInterval initial_delay = NPT_TimeInterval(0.));
114 virtual NPT_Result Discover(
const NPT_HttpUrl& url = NPT_HttpUrl(
"239.255.255.250", 1900,
"*"),
115 const char* target =
"ssdp:all",
117 NPT_TimeInterval frequency = NPT_TimeInterval(50.),
118 NPT_TimeInterval initial_delay = NPT_TimeInterval(0.));
119 virtual NPT_Result InspectDevice(
const NPT_HttpUrl& location,
121 NPT_TimeInterval leasetime = *PLT_Constants::GetInstance().GetDefaultDeviceLease());
124 virtual NPT_Result FindActionDesc(PLT_DeviceDataReference& device,
125 const char* service_type,
126 const char* action_name,
128 virtual NPT_Result CreateAction(PLT_DeviceDataReference& device,
129 const char* service_type,
130 const char* action_name,
131 PLT_ActionReference& action);
132 virtual NPT_Result InvokeAction(PLT_ActionReference& action,
133 void* userdata = NULL);
138 void* userdata = NULL);
141 virtual NPT_Result SetupResponse(NPT_HttpRequest& request,
142 const NPT_HttpRequestContext& context,
143 NPT_HttpResponse& response);
146 virtual NPT_Result ProcessSsdpSearchResponse(NPT_Result res,
147 const NPT_HttpRequestContext& context,
148 NPT_HttpResponse* response);
150 virtual NPT_Result OnSsdpPacket(
const NPT_HttpRequest& request,
151 const NPT_HttpRequestContext& context);
156 virtual NPT_Result DecomposeLastChangeVar(NPT_List<PLT_StateVariable*>& vars);
163 virtual NPT_Result ProcessSsdpNotify(
const NPT_HttpRequest& request,
164 const NPT_HttpRequestContext& context);
165 virtual NPT_Result ProcessSsdpMessage(
const NPT_HttpMessage& message,
166 const NPT_HttpRequestContext& context,
168 virtual NPT_Result ProcessGetDescriptionResponse(NPT_Result res,
169 const NPT_HttpRequest& request,
170 const NPT_HttpRequestContext& context,
171 NPT_HttpResponse* response,
172 NPT_TimeInterval leasetime,
174 virtual NPT_Result ProcessGetSCPDResponse(NPT_Result res,
175 const NPT_HttpRequest& request,
176 const NPT_HttpRequestContext& context,
177 NPT_HttpResponse* response,
178 PLT_DeviceDataReference& device);
179 virtual NPT_Result ProcessActionResponse(NPT_Result res,
180 const NPT_HttpRequest& request,
181 const NPT_HttpRequestContext& context,
182 NPT_HttpResponse* response,
183 PLT_ActionReference& action,
185 virtual NPT_Result ProcessSubscribeResponse(NPT_Result res,
186 const NPT_HttpRequest& request,
187 const NPT_HttpRequestContext& context,
188 NPT_HttpResponse* response,
191 virtual NPT_Result ProcessHttpNotify(
const NPT_HttpRequest& request,
192 const NPT_HttpRequestContext& context,
193 NPT_HttpResponse& response);
196 virtual NPT_Result AddDevice(PLT_DeviceDataReference& data);
197 virtual NPT_Result RemoveDevice(PLT_DeviceDataReference& data);
201 PLT_ThreadTask* RenewSubscriber(PLT_EventSubscriberReference subscriber);
204 NPT_Result ProcessPendingEventNotifications();
205 NPT_Result ProcessEventNotification(PLT_EventSubscriberReference subscriber,
207 NPT_List<PLT_StateVariable*> &vars);
209 NPT_Result DoHouseKeeping();
211 PLT_DeviceDataReference& device,
215 NPT_Result FindDevice(
const char* uuid, PLT_DeviceDataReference& device,
bool return_root =
false);
216 NPT_Result NotifyDeviceReady(PLT_DeviceDataReference& data);
217 NPT_Result NotifyDeviceRemoved(PLT_DeviceDataReference& data);
218 NPT_Result CleanupDevice(PLT_DeviceDataReference& data);
220 NPT_Result ParseFault(PLT_ActionReference& action, NPT_XmlElementNode* fault);
224 NPT_TimeInterval frequency,
225 const NPT_IpAddress& address);
228 friend class NPT_Reference<PLT_CtrlPoint>;
230 friend class PLT_UPnP_CtrlPointStartIterator;
231 friend class PLT_UPnP_CtrlPointStopIterator;
232 friend class PLT_EventSubscriberRemoverIterator;
239 NPT_List<NPT_String> m_UUIDsToIgnore;
240 PLT_CtrlPointListenerList m_ListenerList;
241 PLT_HttpServerReference m_EventHttpServer;
242 PLT_TaskManagerReference m_TaskManager;
244 NPT_List<PLT_DeviceDataReference> m_RootDevices;
245 NPT_List<PLT_EventSubscriberReference> m_Subscribers;
246 NPT_String m_SearchCriteria;
248 NPT_List<PLT_EventNotification *> m_PendingNotifications;
249 NPT_List<NPT_String> m_PendingInspections;
252 typedef NPT_Reference<PLT_CtrlPoint> PLT_CtrlPointReference;
The PLT_CtrlPointHouseKeepingTask class is used by a PLT_CtrlPoint to keep track of expired devices a...
Definition: PltCtrlPointTask.h:177
The PLT_ActionDesc class provides information about a UPnP Service given action.
Definition: PltAction.h:61
The PLT_UPnP class maintains a list of devices (PLT_DeviceHost) to advertise and/or control points (P...
Definition: PltUPnP.h:68
The PLT_SsdpListenTask class is used to listen for incoming SSDP packets and keep track of a list of ...
Definition: PltSsdp.h:310
UPnP Service.
Definition: PltService.h:67
The PLT_SsdpSearchResponseListener class is an interface for handling SSDP M-SEARCH responses...
Definition: PltSsdp.h:85
The PLT_EventNotification class represents an event notification for a given service to a given subsc...
Definition: PltEvent.h:64
The PLT_CtrlPointListener class is an interface used to receive notifications when devices are found ...
Definition: PltCtrlPoint.h:68
The PLT_SsdpPacketListener class is an interface for handling SSDP packets (M-SEARCH and NOTIFY)...
Definition: PltSsdp.h:70
The PLT_CtrlPointSubscribeEventTask class is used to subscribe, renew or cancel a subscription for a ...
Definition: PltCtrlPointTask.h:201
The PLT_CtrlPointInvokeActionTask class is used by a PLT_CtrlPoint to invoke a specific action of a g...
Definition: PltCtrlPointTask.h:148
The PLT_CtrlPointGetSCPDRequest class is used by a PLT_CtrlPointGetSCPDsTask task to fetch a specific...
Definition: PltCtrlPointTask.h:92
The PLT_CtrlPointGetDescriptionTask class fetches the description xml document from a UPnP device...
Definition: PltCtrlPointTask.h:63
The PLT_SsdpSearchTask class is a task used by a PLT_CtrlPoint to issue a SSDP M-SEARCH request...
Definition: PltSsdp.h:361
virtual NPT_Result GetPort(NPT_UInt16 &port)
Returns the port used by the internal HTTP server for all incoming event notifications.
The PLT_CtrlPointGetSCPDsTask class fetches the SCPD xml document of one or more services for a given...
Definition: PltCtrlPointTask.h:113
The PLT_ThreadTask class is a base class for executing a given task in a worker thread.
Definition: PltThreadTask.h:56
The PLT_CtrlPoint class implements the base functionality of a UPnP ControlPoint. ...
Definition: PltCtrlPoint.h:89