65 virtual NPT_Result OnSsdpPacket(
const NPT_HttpRequest& request,
66 const NPT_HttpRequestContext& context) = 0;
80 virtual NPT_Result ProcessSsdpSearchResponse(NPT_Result res,
81 const NPT_HttpRequestContext& context,
82 NPT_HttpResponse* response) = 0;
94 static NPT_Result SendSsdp(NPT_HttpRequest& request,
97 NPT_UdpSocket& socket,
99 const NPT_SocketAddress* addr = NULL);
101 static NPT_Result SendSsdp(NPT_HttpResponse& response,
104 NPT_UdpSocket& socket,
106 const NPT_SocketAddress* addr = NULL);
109 static NPT_Result FormatPacket(NPT_HttpMessage& message,
112 NPT_UdpSocket& socket,
127 NPT_SocketAddress remote_addr,
129 m_Device(device), m_RemoteAddr(remote_addr), m_ST(st) {}
132 NPT_Result operator()(NPT_NetworkInterface*& if_addr)
const;
136 NPT_SocketAddress m_RemoteAddr;
151 NPT_SocketAddress remote_addr,
153 m_Device(device), m_RemoteAddr(remote_addr), m_ST(st) {}
159 virtual void DoRun();
163 NPT_SocketAddress m_RemoteAddr;
178 m_Device(device), m_IsByeBye(is_byebye), m_Broadcast(broadcast) {}
180 NPT_Result operator()(NPT_NetworkInterface*& if_addr)
const;
201 NPT_Result operator()(NPT_IpAddress& if_addr)
const {
203 addr.ResolveName(
"239.255.255.250");
206 m_Socket->LeaveGroup(addr, if_addr);
207 return m_Socket->JoinGroup(addr, if_addr);
211 NPT_UdpMulticastSocket* m_Socket;
225 NPT_TimeInterval repeat,
226 bool is_byebye_first =
false,
227 bool extra_broadcast =
false) :
229 m_Repeat(repeat), m_IsByeByeFirst(is_byebye_first),
230 m_ExtraBroadcast(extra_broadcast) {}
236 virtual void DoRun();
240 NPT_TimeInterval m_Repeat;
241 bool m_IsByeByeFirst;
242 bool m_ExtraBroadcast;
258 NPT_Result operator()(NPT_NetworkInterface*& addr)
const {
259 NPT_List<NPT_NetworkInterfaceAddress>::Iterator niaddr = addr->GetAddresses().GetFirstItem();
260 if (!niaddr)
return NPT_FAILURE;
262 return (m_Ip.Compare((*niaddr).GetPrimaryAddress().ToString(),
true) == 0) ? NPT_SUCCESS : NPT_FAILURE;
280 const NPT_HttpRequestContext& context) :
281 m_Request(request), m_Context(context) {}
284 return listener->OnSsdpPacket(m_Request, m_Context);
288 NPT_HttpRequest& m_Request;
289 const NPT_HttpRequestContext& m_Context;
308 #if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
309 m_Socket->SetReadTimeout(10000);
314 NPT_AutoLock lock(m_Mutex);
315 m_Listeners.Add(listener);
320 NPT_AutoLock lock(m_Mutex);
321 m_Listeners.Remove(listener);
332 NPT_Result GetInputStream(NPT_InputStreamReference& stream);
333 NPT_Result GetInfo(NPT_SocketInfo& info);
334 NPT_Result SetupResponse(NPT_HttpRequest& request,
335 const NPT_HttpRequestContext& context,
336 NPT_HttpResponse& response);
339 PLT_InputDatagramStreamReference m_Datagram;
340 NPT_List<PLT_SsdpPacketListener*> m_Listeners;
356 NPT_HttpRequest* request,
357 NPT_TimeInterval frequency = NPT_TimeInterval(0.));
364 virtual void DoRun();
366 virtual NPT_Result ProcessResponse(NPT_Result res,
367 const NPT_HttpRequest& request,
368 const NPT_HttpRequestContext& context,
369 NPT_HttpResponse* response);
373 NPT_HttpRequest* m_Request;
374 NPT_TimeInterval m_Frequency;
376 NPT_UdpSocket* m_Socket;