kodi
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Friends | List of all members
PLT_DeviceHost Class Referenceabstract

UPnP Device Host. More...

#include <PltDeviceHost.h>

Inheritance diagram for PLT_DeviceHost:
Inheritance graph
[legend]
Collaboration diagram for PLT_DeviceHost:
Collaboration graph
[legend]

Public Member Functions

 PLT_DeviceHost (const char *description_path="/", const char *uuid="", const char *device_type="", const char *friendly_name="", bool show_ip=false, NPT_UInt16 port=0, bool port_rebind=false)
 Creates a new instance of UPnP Device Host. More...
 
virtual void SetExtraBroadcast (bool broadcast)
 
virtual void SetByeByeFirst (bool bye_bye_first)
 When a UPnP device comes up, the specifications require that a SSDP bye-bye sequence is sent to force the removal of the device in case it wasn't sent properly during the last shutdown. More...
 
virtual NPT_UInt16 GetPort ()
 Returns the port used by the internal HTTP server for all incoming requests. More...
 
NPT_Result SetLeaseTime (NPT_TimeInterval lease_time)
 Sets the lease time. More...
 
virtual NPT_Result AddIcon (const PLT_DeviceIcon &icon, const char *fileroot, const char *urlroot="/")
 Add UPnP icon information to serve from file system. More...
 
virtual NPT_Result AddIcon (const PLT_DeviceIcon &icon, const void *data, NPT_Size size, bool copy=true)
 Add UPnP icon information to serve using static image. More...
 
- Public Member Functions inherited from PLT_DeviceData
 PLT_DeviceData (NPT_HttpUrl description_url=NPT_HttpUrl(NULL, 0, "/description.xml"), const char *uuid="", NPT_TimeInterval lease_time= *PLT_Constants::GetInstance().GetDefaultDeviceLease(), const char *device_type="", const char *friendly_name="")
 
virtual NPT_Result GetDescription (NPT_String &desc)
 
virtual NPT_String GetDescriptionUrl (const char *ip_address=NULL)
 
virtual NPT_HttpUrl GetURLBase ()
 
virtual NPT_HttpUrl NormalizeURL (const NPT_String &url)
 
virtual NPT_Result GetDescription (NPT_XmlElementNode *parent, NPT_XmlElementNode **device=NULL)
 
virtual NPT_String GetIconUrl (const char *mimetype=NULL, NPT_Int32 maxsize=0, NPT_Int32 maxdepth=0)
 
bool IsRoot ()
 
const NPT_TimeIntervalGetLeaseTime () const
 
const NPT_StringGetUUID () const
 
const NPT_StringGetFriendlyName () const
 
const NPT_StringGetType () const
 
const NPT_StringGetModelDescription () const
 
const NPT_StringGetParentUUID () const
 
const NPT_IpAddressGetLocalIP () const
 
const NPT_Array< PLT_Service * > & GetServices () const
 
const NPT_Array< PLT_DeviceDataReference > & GetEmbeddedDevices () const
 
NPT_Result FindEmbeddedDevice (const char *uuid, PLT_DeviceDataReference &device)
 
NPT_Result FindEmbeddedDeviceByType (const char *type, PLT_DeviceDataReference &device)
 
NPT_Result FindServiceById (const char *id, PLT_Service *&service)
 
NPT_Result FindServiceByType (const char *type, PLT_Service *&service)
 
NPT_Result FindServiceByName (const char *name, PLT_Service *&service)
 
NPT_Result FindServiceBySCPDURL (const char *url, PLT_Service *&service, bool recursive=false)
 
NPT_Result FindServiceByControlURL (const char *url, PLT_Service *&service, bool recursive=false)
 
NPT_Result FindServiceByEventSubURL (const char *url, PLT_Service *&service, bool recursive=false)
 
NPT_Result AddEmbeddedDevice (PLT_DeviceDataReference &device)
 
NPT_Result RemoveEmbeddedDevice (PLT_DeviceDataReference &device)
 
NPT_Result AddService (PLT_Service *service)
 
NPT_Result RemoveService (PLT_Service *service)
 
void SetBootId (NPT_UInt32 bootId)
 
void SetNextBootId (NPT_UInt32 nextBootId)
 
NPT_UInt32 GenerateNextBootId ()
 
 operator const char * ()
 
- Public Member Functions inherited from NPT_HttpRequestHandler
virtual NPT_Result SendResponseBody (const NPT_HttpRequestContext &context, NPT_HttpResponse &response, NPT_OutputStream &output)
 Override this method if you want to write the body yourself. More...
 
virtual void Completed (NPT_Result)
 A notification method called by the server upon completing the processing of a request.
 

Protected Member Functions

NPT_Result SetupResponse (NPT_HttpRequest &request, const NPT_HttpRequestContext &context, NPT_HttpResponse &response) override
 NPT_HttpRequestHandler method for setting up the response of an incoming HTTP request. More...
 
NPT_Result Announce (NPT_HttpRequest &request, NPT_UdpSocket &socket, PLT_SsdpAnnounceType type)
 Called during SSDP announce. More...
 
NPT_Result OnSsdpPacket (const NPT_HttpRequest &request, const NPT_HttpRequestContext &context) override
 PLT_SsdpPacketListener method called when a M-SEARCH SSDP packet is received. More...
 
virtual NPT_Result SendSsdpSearchResponse (NPT_HttpResponse &response, NPT_UdpSocket &socket, const char *st, const NPT_SocketAddress *addr=NULL)
 Called by PLT_SsdpDeviceSearchResponseTask when responding to a M-SEARCH SSDP request. More...
 
virtual NPT_Result SetupServices ()=0
 Required method for setting up UPnP services of device host (and any embedded). More...
 
virtual NPT_Result SetupIcons ()
 Default implementation for registering device icon resources. More...
 
virtual NPT_Result SetupDevice ()
 Default implementation for setting up device host. More...
 
virtual NPT_Result Start (PLT_SsdpListenTask *task)
 Called by PLT_TaskManager when the device is started. More...
 
virtual NPT_Result Stop (PLT_SsdpListenTask *task)
 Called by PLT_TaskManager when the device is stoped. More...
 
virtual NPT_Result OnAction (PLT_ActionReference &action, const PLT_HttpRequestContext &context)
 This mehod is called when an action performed by a control point has been received and needs to be answered. More...
 
virtual NPT_Result ProcessGetDescription (NPT_HttpRequest &request, const NPT_HttpRequestContext &context, NPT_HttpResponse &response)
 This method is called when a control point is requesting the device description. More...
 
virtual NPT_Result ProcessGetSCPD (PLT_Service *service, NPT_HttpRequest &request, const NPT_HttpRequestContext &context, NPT_HttpResponse &response)
 This method is called when a control point is requesting a service SCPD. More...
 
virtual NPT_Result ProcessHttpGetRequest (NPT_HttpRequest &request, const NPT_HttpRequestContext &context, NPT_HttpResponse &response)
 This method is called when a "GET" request for a resource other than the device description, SCPD, or icons has been received. More...
 
virtual NPT_Result ProcessHttpPostRequest (NPT_HttpRequest &request, const NPT_HttpRequestContext &context, NPT_HttpResponse &response)
 This method is called when a "POST" request has been received. More...
 
virtual NPT_Result ProcessHttpSubscriberRequest (NPT_HttpRequest &request, const NPT_HttpRequestContext &context, NPT_HttpResponse &response)
 This method is called when a request from a subscriber has been received. More...
 
- Protected Member Functions inherited from PLT_DeviceData
virtual void Cleanup ()
 
virtual NPT_Result OnAddExtraInfo (NPT_XmlElementNode *)
 

Static Protected Member Functions

static NPT_Result Announce (PLT_DeviceData *device, NPT_HttpRequest &request, NPT_UdpSocket &socket, PLT_SsdpAnnounceType type)
 Static method similar to Announce. More...
 
static NPT_Result SendSsdpSearchResponse (PLT_DeviceData *device, NPT_HttpResponse &response, NPT_UdpSocket &socket, const char *st, const NPT_SocketAddress *addr=NULL)
 Static method similar to SendSsdpSearchResponse. More...
 

Protected Attributes

PLT_TaskManagerReference m_TaskManager
 
PLT_HttpServerReference m_HttpServer
 
bool m_ExtraBroascast
 
NPT_UInt16 m_Port
 
bool m_PortRebind
 
bool m_ByeByeFirst
 
bool m_Started
 
- Protected Attributes inherited from PLT_DeviceData
NPT_String m_ParentUUID
 
NPT_String m_UUID
 
NPT_HttpUrl m_URLDescription
 
NPT_HttpUrl m_URLBase
 
NPT_String m_DeviceType
 
NPT_String m_FriendlyName
 
NPT_TimeInterval m_LeaseTime
 
NPT_TimeStamp m_LeaseTimeLastUpdate
 
NPT_Array< PLT_Service * > m_Services
 
NPT_Array< PLT_DeviceDataReferencem_EmbeddedDevices
 
NPT_Array< PLT_DeviceIconm_Icons
 
NPT_IpAddress m_LocalIfaceIp
 
NPT_String m_Representation
 

Friends

class PLT_UPnP
 
class PLT_UPnP_DeviceStartIterator
 
class PLT_UPnP_DeviceStopIterator
 
class PLT_Service
 
class NPT_Reference< PLT_DeviceHost >
 
class PLT_SsdpDeviceSearchResponseInterfaceIterator
 
class PLT_SsdpDeviceSearchResponseTask
 
class PLT_SsdpAnnounceInterfaceIterator
 

Additional Inherited Members

- Public Attributes inherited from PLT_DeviceData
NPT_String m_Manufacturer
 
NPT_String m_ManufacturerURL
 
NPT_String m_ModelDescription
 
NPT_String m_ModelName
 
NPT_String m_ModelNumber
 
NPT_String m_ModelURL
 
NPT_String m_SerialNumber
 
NPT_String m_UPC
 
NPT_String m_PresentationURL
 
NPT_String m_DlnaDoc
 
NPT_String m_DlnaCap
 
NPT_String m_AggregationFlags
 

Detailed Description

UPnP Device Host.

The PLT_DeviceHost class is a base class for implementing a UPnP Device. It handles network announcements and responses to searches from ControlPoints. ControlPoint action invocations are also received and delegated to derived classes. A PLT_DeviceHost also takes care of eventing when services state variables change.

Constructor & Destructor Documentation

◆ PLT_DeviceHost()

PLT_DeviceHost::PLT_DeviceHost ( const char *  description_path = "/",
const char *  uuid = "",
const char *  device_type = "",
const char *  friendly_name = "",
bool  show_ip = false,
NPT_UInt16  port = 0,
bool  port_rebind = false 
)

Creates a new instance of UPnP Device Host.

Parameters
description_pathRelative path for description url
uuidUPnP device unique id
device_typeUPnP device type
friendly_nameName advertised for UPnP device
show_ipFlag to indicate if device IP should be appended to friendly name
portlocal port for the device host internal HTTP server, 0 for randomly selected.
port_rebindFlag to indicate if device host should automatically try to look for another port if failing to choose the one passed.

Member Function Documentation

◆ AddIcon() [1/2]

NPT_Result PLT_DeviceHost::AddIcon ( const PLT_DeviceIcon icon,
const char *  fileroot,
const char *  urlroot = "/" 
)
virtual

Add UPnP icon information to serve from file system.

Parameters
iconthe icon information including url path
filerootthe file system root path
urlrootthe url root path of the icon url to match to fileroot Note: As an exemple, if the icon url path is "/images/icon1.jpg", the fileroot is "/Users/joe/www" and the urlroot is "/", when a request is made for "/images/icon1.jpg", the file is expected to be found at "/Users/joe/www/images/icon1.jpg". If the urlroot were "/images", the file would be expected to be found at "/Users/joe/www/icon1.jpg".

◆ AddIcon() [2/2]

NPT_Result PLT_DeviceHost::AddIcon ( const PLT_DeviceIcon icon,
const void *  data,
NPT_Size  size,
bool  copy = true 
)
virtual

Add UPnP icon information to serve using static image.

Parameters
iconthe icon information including url path
datathe image data
sizethe image data size
copyboolean to indicate the data should be copied internally

◆ Announce() [1/2]

NPT_Result PLT_DeviceHost::Announce ( PLT_DeviceData device,
NPT_HttpRequest request,
NPT_UdpSocket socket,
PLT_SsdpAnnounceType  type 
)
staticprotected

Static method similar to Announce.

Parameters
devicethe device to announce
requestthe SSDP pre formatted request
socketthe network socket to use to send the request
typePLT_SsdpAnnounceType enum if the announce is a SSDP bye-bye, update or alive.

◆ Announce() [2/2]

NPT_Result PLT_DeviceHost::Announce ( NPT_HttpRequest request,
NPT_UdpSocket socket,
PLT_SsdpAnnounceType  type 
)
inlineprotected

Called during SSDP announce.

The HTTP request is already configured with the right method and host.

Parameters
requestthe SSDP pre formatted request
socketthe network socket to use to send the request
typePLT_SsdpAnnounceType enum if the announce is a SSDP bye-bye, update or alive.

◆ GetPort()

virtual NPT_UInt16 PLT_DeviceHost::GetPort ( )
inlinevirtual

Returns the port used by the internal HTTP server for all incoming requests.

Returns
port

◆ OnAction()

NPT_Result PLT_DeviceHost::OnAction ( PLT_ActionReference action,
const PLT_HttpRequestContext context 
)
protectedvirtual

This mehod is called when an action performed by a control point has been received and needs to be answered.

Parameters
actionthe action information to answer
contextthe context information including the HTTP request and local and remote socket information (IP & port).

Reimplemented in PLT_MediaServer, PLT_MediaRenderer, PLT_MediaConnect, and PLT_LightSampleDevice.

◆ OnSsdpPacket()

NPT_Result PLT_DeviceHost::OnSsdpPacket ( const NPT_HttpRequest request,
const NPT_HttpRequestContext context 
)
overrideprotectedvirtual

PLT_SsdpPacketListener method called when a M-SEARCH SSDP packet is received.

Parameters
requestSSDP packet
contextthe context of the request

Implements PLT_SsdpPacketListener.

◆ ProcessGetDescription()

NPT_Result PLT_DeviceHost::ProcessGetDescription ( NPT_HttpRequest request,
const NPT_HttpRequestContext context,
NPT_HttpResponse response 
)
protectedvirtual

This method is called when a control point is requesting the device description.

Parameters
requestthe HTTP request
contextthe context information including local and remote socket information.
responsethe response to setup.

Reimplemented in PLT_MediaConnect.

◆ ProcessGetSCPD()

NPT_Result PLT_DeviceHost::ProcessGetSCPD ( PLT_Service service,
NPT_HttpRequest request,
const NPT_HttpRequestContext context,
NPT_HttpResponse response 
)
protectedvirtual

This method is called when a control point is requesting a service SCPD.

Parameters
servicethe service
requestthe HTTP request
contextthe context information including local and remote socket information.
responsethe response to setup.

Reimplemented in UPNP::CUPnPServer, and PLT_MediaConnect.

◆ ProcessHttpGetRequest()

NPT_Result PLT_DeviceHost::ProcessHttpGetRequest ( NPT_HttpRequest request,
const NPT_HttpRequestContext context,
NPT_HttpResponse response 
)
protectedvirtual

This method is called when a "GET" request for a resource other than the device description, SCPD, or icons has been received.

Parameters
requestthe HTTP request
contextthe context information including local and remote socket information.
responsethe response to setup.

Reimplemented in PLT_MediaServer, and UPNP::CUPnPRenderer.

◆ ProcessHttpPostRequest()

NPT_Result PLT_DeviceHost::ProcessHttpPostRequest ( NPT_HttpRequest request,
const NPT_HttpRequestContext context,
NPT_HttpResponse response 
)
protectedvirtual

This method is called when a "POST" request has been received.

This is usually an UPnP service action invocation. This will deserialize the request and call the OnAction method.

Parameters
requestthe HTTP request
contextthe context information including local and remote socket information.
responsethe response to setup.

◆ ProcessHttpSubscriberRequest()

NPT_Result PLT_DeviceHost::ProcessHttpSubscriberRequest ( NPT_HttpRequest request,
const NPT_HttpRequestContext context,
NPT_HttpResponse response 
)
protectedvirtual

This method is called when a request from a subscriber has been received.

This is for any new subscritions, existing subscrition renewal or cancellation.

Parameters
requestthe HTTP request
contextthe context information including local and remote socket information.
responsethe response to setup.

◆ SendSsdpSearchResponse() [1/2]

NPT_Result PLT_DeviceHost::SendSsdpSearchResponse ( PLT_DeviceData device,
NPT_HttpResponse response,
NPT_UdpSocket socket,
const char *  st,
const NPT_SocketAddress addr = NULL 
)
staticprotected

Static method similar to SendSsdpSearchResponse.

Parameters
devicethe device to announce
responsethe SSDP pre formatted response
socketthe network socket to use to send the request
stthe original request search target
addrthe remote address to send the response back to in case the socket is not already connected.

◆ SendSsdpSearchResponse() [2/2]

virtual NPT_Result PLT_DeviceHost::SendSsdpSearchResponse ( NPT_HttpResponse response,
NPT_UdpSocket socket,
const char *  st,
const NPT_SocketAddress addr = NULL 
)
inlineprotectedvirtual

Called by PLT_SsdpDeviceSearchResponseTask when responding to a M-SEARCH SSDP request.

Parameters
responsethe SSDP pre formatted response
socketthe network socket to use to send the request
stthe original request search target
addrthe remote address to send the response back to in case the socket is not already connected.

◆ SetByeByeFirst()

virtual void PLT_DeviceHost::SetByeByeFirst ( bool  bye_bye_first)
inlinevirtual

When a UPnP device comes up, the specifications require that a SSDP bye-bye sequence is sent to force the removal of the device in case it wasn't sent properly during the last shutdown.

Parameters
bye_bye_firstBoolean to indicate that SSDP bye-bye sequence should be sent first or not.

◆ SetLeaseTime()

NPT_Result PLT_DeviceHost::SetLeaseTime ( NPT_TimeInterval  lease_time)
inline

Sets the lease time.

Parameters
lease_timeLease Time

◆ SetupDevice()

NPT_Result PLT_DeviceHost::SetupDevice ( )
protectedvirtual

Default implementation for setting up device host.

This calls SetupServices and SetupIcons when device starts.

◆ SetupIcons()

NPT_Result PLT_DeviceHost::SetupIcons ( )
protectedvirtual

Default implementation for registering device icon resources.

Override to use different ones. Called when device starts.

Reimplemented in UPNP::CUPnPServer, and PLT_Xbox360.

◆ SetupResponse()

NPT_Result PLT_DeviceHost::SetupResponse ( NPT_HttpRequest request,
const NPT_HttpRequestContext context,
NPT_HttpResponse response 
)
overrideprotectedvirtual

NPT_HttpRequestHandler method for setting up the response of an incoming HTTP request.

Parameters
requestthe request received
contextthe context of the request
responsethe response to set up

Implements NPT_HttpRequestHandler.

◆ SetupServices()

virtual NPT_Result PLT_DeviceHost::SetupServices ( )
protectedpure virtual

Required method for setting up UPnP services of device host (and any embedded).

Called when device starts.

Implemented in PLT_MediaServer, PLT_MediaRenderer, UPNP::CUPnPServer, PLT_MediaConnect, PLT_LightSampleDevice, PLT_Simple, and PLT_Xbox360.

◆ Start()

NPT_Result PLT_DeviceHost::Start ( PLT_SsdpListenTask task)
protectedvirtual

Called by PLT_TaskManager when the device is started.

Parameters
taskthe SSDP listening task to attach to for receiving SSDP M-SEARCH messages.

◆ Stop()

NPT_Result PLT_DeviceHost::Stop ( PLT_SsdpListenTask task)
protectedvirtual

Called by PLT_TaskManager when the device is stoped.

Parameters
taskthe SSDP listening task to detach from to stop receiving SSDP M-SEARCH messages.

The documentation for this class was generated from the following files: