58 PLT_ANNOUNCETYPE_BYEBYE,
59 PLT_ANNOUNCETYPE_ALIVE,
60 PLT_ANNOUNCETYPE_UPDATE
61 } PLT_SsdpAnnounceType;
74 virtual NPT_Result OnSsdpPacket(
const NPT_HttpRequest& request,
75 const NPT_HttpRequestContext& context) = 0;
89 virtual NPT_Result ProcessSsdpSearchResponse(NPT_Result res,
90 const NPT_HttpRequestContext& context,
91 NPT_HttpResponse* response) = 0;
103 static NPT_Result SendSsdp(NPT_HttpRequest& request,
106 NPT_UdpSocket& socket,
108 const NPT_SocketAddress* addr = NULL);
110 static NPT_Result SendSsdp(NPT_HttpResponse& response,
113 NPT_UdpSocket& socket,
115 const NPT_SocketAddress* addr = NULL);
118 static NPT_Result FormatPacket(NPT_HttpMessage& message,
121 NPT_UdpSocket& socket,
136 NPT_SocketAddress remote_addr,
138 m_Device(device), m_RemoteAddr(remote_addr), m_ST(st) {}
141 NPT_Result operator()(NPT_NetworkInterface*& if_addr)
const;
145 NPT_SocketAddress m_RemoteAddr;
160 NPT_SocketAddress remote_addr,
162 m_Device(device), m_RemoteAddr(remote_addr), m_ST(st) {}
168 virtual void DoRun();
172 NPT_SocketAddress m_RemoteAddr;
187 m_Device(device), m_Type(type), m_Broadcast(broadcast) {}
189 NPT_Result operator()(NPT_NetworkInterface*& if_addr)
const;
193 PLT_SsdpAnnounceType m_Type;
210 NPT_Result operator()(NPT_IpAddress& if_addr)
const {
212 addr.ResolveName(
"239.255.255.250");
215 m_Socket->LeaveGroup(addr, if_addr);
216 return m_Socket->JoinGroup(addr, if_addr);
220 NPT_UdpMulticastSocket* m_Socket;
234 NPT_TimeInterval repeat,
235 bool is_byebye_first =
false,
236 bool extra_broadcast =
false) :
239 m_IsByeByeFirst(is_byebye_first),
240 m_ExtraBroadcast(extra_broadcast) {}
246 virtual void DoRun();
250 NPT_TimeInterval m_Repeat;
251 bool m_IsByeByeFirst;
252 bool m_ExtraBroadcast;
268 NPT_Result operator()(NPT_NetworkInterface*& addr)
const {
269 NPT_List<NPT_NetworkInterfaceAddress>::Iterator niaddr = addr->GetAddresses().GetFirstItem();
270 if (!niaddr)
return NPT_FAILURE;
272 return (m_Ip.Compare((*niaddr).GetPrimaryAddress().ToString(),
true) == 0) ? NPT_SUCCESS : NPT_FAILURE;
290 const NPT_HttpRequestContext& context) :
291 m_Request(request), m_Context(context) {}
294 return listener->OnSsdpPacket(m_Request, m_Context);
298 NPT_HttpRequest& m_Request;
299 const NPT_HttpRequestContext& m_Context;
318 #if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
319 m_Socket->SetReadTimeout(10000);
324 NPT_AutoLock lock(m_Mutex);
325 m_Listeners.Add(listener);
330 NPT_AutoLock lock(m_Mutex);
331 m_Listeners.Remove(listener);
342 NPT_Result GetInputStream(NPT_InputStreamReference& stream);
343 NPT_Result GetInfo(NPT_SocketInfo& info);
344 NPT_Result SetupResponse(NPT_HttpRequest& request,
345 const NPT_HttpRequestContext& context,
346 NPT_HttpResponse& response);
349 PLT_InputDatagramStreamReference m_Datagram;
350 NPT_List<PLT_SsdpPacketListener*> m_Listeners;
366 NPT_HttpRequest* request,
367 NPT_TimeInterval frequency = NPT_TimeInterval(0.));
374 virtual void DoRun();
376 virtual NPT_Result ProcessResponse(NPT_Result res,
377 const NPT_HttpRequest& request,
378 const NPT_HttpRequestContext& context,
379 NPT_HttpResponse* response);
383 NPT_HttpRequest* m_Request;
384 NPT_TimeInterval m_Frequency;
386 NPT_UdpSocket* m_Socket;
The PLT_NetworkInterfaceAddressSearchIterator class returns the network interface given an IP address...
Definition: PltSsdp.h:262
The PLT_SsdpDeviceAnnounceTask class is a task to send UPnP Device SSDP announcements (alive or byeby...
Definition: PltSsdp.h:230
The PLT_SsdpInitMulticastIterator class is used to join a multicast group given a list of IP addresse...
Definition: PltSsdp.h:204
virtual void DoAbort()
This method to override in derived classes is called when the task is about to stop.
The PLT_SsdpAnnounceInterfaceIterator class is used to send SSDP announcements given a list of networ...
Definition: PltSsdp.h:183
The PLT_HttpServerSocketTask class is a task used for handling one or more HTTP requests from a clien...
Definition: PltHttpServerTask.h:59
The PLT_SsdpDeviceSearchResponseInterfaceIterator class looks for the best network interface to use t...
Definition: PltSsdp.h:132
The PLT_SsdpListenTask class is used to listen for incoming SSDP packets and keep track of a list of ...
Definition: PltSsdp.h:310
The PLT_SsdpPacketListenerIterator class iterates through a list of PLT_SsdpPacketListener instances ...
Definition: PltSsdp.h:286
virtual void DoRun()
This method to override in derived classes is the main task loop.
The PLT_SsdpDeviceSearchResponseTask class is used by a PLT_DeviceHost to respond to SSDP M-SEARCH re...
Definition: PltSsdp.h:156
The PLT_SsdpSearchResponseListener class is an interface for handling SSDP M-SEARCH responses...
Definition: PltSsdp.h:85
void DoAbort()
This method to override in derived classes is called when the task is about to stop.
The PLT_SsdpPacketListener class is an interface for handling SSDP packets (M-SEARCH and NOTIFY)...
Definition: PltSsdp.h:70
UPnP Device Host.
Definition: PltDeviceHost.h:69
virtual void DoRun()
This method to override in derived classes is the main task loop.
virtual void DoRun()
This method to override in derived classes is the main task loop.
The PLT_SsdpSearchTask class is a task used by a PLT_CtrlPoint to issue a SSDP M-SEARCH request...
Definition: PltSsdp.h:361
The PLT_ThreadTask class is a base class for executing a given task in a worker thread.
Definition: PltThreadTask.h:56
The PLT_SsdpSender class provides a mechanism to format and send SSDP packets.
Definition: PltSsdp.h:100