Mercurial > projects > hoofbaby
diff deps/Platinum/Source/Core/PltDeviceHost.h @ 0:3425707ddbf6
Initial import (hopefully this mercurial stuff works...)
author | fraserofthenight |
---|---|
date | Mon, 06 Jul 2009 08:06:28 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deps/Platinum/Source/Core/PltDeviceHost.h Mon Jul 06 08:06:28 2009 -0700 @@ -0,0 +1,163 @@ +/***************************************************************** +| +| Platinum - Device Host +| +| Copyright (c) 2004-2008, Plutinosoft, LLC. +| All rights reserved. +| http://www.plutinosoft.com +| +| This program is free software; you can redistribute it and/or +| modify it under the terms of the GNU General Public License +| as published by the Free Software Foundation; either version 2 +| of the License, or (at your option) any later version. +| +| OEMs, ISVs, VARs and other distributors that combine and +| distribute commercially licensed software with Platinum software +| and do not wish to distribute the source code for the commercially +| licensed software under version 2, or (at your option) any later +| version, of the GNU General Public License (the "GPL") must enter +| into a commercial license agreement with Plutinosoft, LLC. +| +| This program is distributed in the hope that it will be useful, +| but WITHOUT ANY WARRANTY; without even the implied warranty of +| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +| GNU General Public License for more details. +| +| You should have received a copy of the GNU General Public License +| along with this program; see the file LICENSE.txt. If not, write to +| the Free Software Foundation, Inc., +| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +| http://www.gnu.org/licenses/gpl-2.0.html +| +****************************************************************/ + +#ifndef _PLT_DEVICE_HOST_H_ +#define _PLT_DEVICE_HOST_H_ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "Neptune.h" +#include "PltDeviceData.h" +#include "PltHttpServerListener.h" +#include "PltSsdpListener.h" +#include "PltTaskManager.h" +#include "PltAction.h" +#include "PltHttp.h" + +/*---------------------------------------------------------------------- +| forward declarations ++---------------------------------------------------------------------*/ +class PLT_HttpServer; +class PLT_HttpServerHandler; +class PLT_SsdpDeviceAnnounceTask; +class PLT_SsdpListenTask; + +/*---------------------------------------------------------------------- +| PLT_DeviceHost class ++---------------------------------------------------------------------*/ +class PLT_DeviceHost : public PLT_DeviceData, + public PLT_SsdpPacketListener +{ +public: + 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); + + // public methods + virtual void SetBroadcast(bool broadcast) { m_Broadcast = broadcast; } + virtual NPT_UInt16 GetPort() { return m_Port; }; + + // NPT_HttpRequestHandler forward for control/event requests + virtual NPT_Result ProcessHttpRequest(NPT_HttpRequest& request, + const NPT_HttpRequestContext& context, + NPT_HttpResponse& response); + + // PLT_SsdpDeviceAnnounceTask & PLT_SsdpDeviceAnnounceUnicastTask + virtual NPT_Result Announce(PLT_DeviceData* device, + NPT_HttpRequest& request, + NPT_UdpSocket& socket, + bool byebye); + + virtual NPT_Result Announce(NPT_HttpRequest& request, + NPT_UdpSocket& socket, + bool byebye) { + return Announce(this, request, socket, byebye); + } + + // PLT_SsdpPacketListener method + virtual NPT_Result OnSsdpPacket(NPT_HttpRequest& request, + const NPT_HttpRequestContext& context); + + // PLT_SsdpDeviceSearchListenTask + virtual NPT_Result ProcessSsdpSearchRequest(NPT_HttpRequest& request, + const NPT_HttpRequestContext& context); + + // PLT_SsdpDeviceSearchResponseTask + virtual NPT_Result SendSsdpSearchResponse(PLT_DeviceData* device, + NPT_HttpResponse& response, + NPT_UdpSocket& socket, + const char* st, + const NPT_SocketAddress* addr = NULL); + virtual NPT_Result SendSsdpSearchResponse(NPT_HttpResponse& response, + NPT_UdpSocket& socket, + const char* ST, + const NPT_SocketAddress* addr = NULL) { + return SendSsdpSearchResponse(this, response, socket, ST, addr); + } + +protected: + virtual ~PLT_DeviceHost(); + + // pure methods + virtual NPT_Result SetupServices(PLT_DeviceData& data) = 0; + + // setup methods + virtual NPT_Result SetupIcons(); + virtual NPT_Result SetupDevice(); + + // overridable methods + virtual NPT_Result AddIcon(const PLT_DeviceIcon& icon, + const char* filepath); + virtual NPT_Result AddIcon(const PLT_DeviceIcon& icon, + const void* data, + NPT_Size size, + bool copy = true); + virtual NPT_Result Start(PLT_SsdpListenTask* task); + virtual NPT_Result Stop(PLT_SsdpListenTask* task); + virtual NPT_Result SetupServiceSCPDHandler(PLT_Service* service); + virtual NPT_Result OnAction(PLT_ActionReference& action, + const PLT_HttpRequestContext& context); + virtual NPT_Result ProcessGetDescription(NPT_HttpRequest& request, + const NPT_HttpRequestContext& context, + NPT_HttpResponse& response); + virtual NPT_Result ProcessHttpPostRequest(NPT_HttpRequest& request, + const NPT_HttpRequestContext& context, + NPT_HttpResponse& response); + virtual NPT_Result ProcessHttpSubscriberRequest(NPT_HttpRequest& request, + const NPT_HttpRequestContext& context, + NPT_HttpResponse& response); + +protected: + friend class PLT_UPnP; + friend class PLT_UPnP_DeviceStartIterator; + friend class PLT_UPnP_DeviceStopIterator; + friend class PLT_Service; + friend class NPT_Reference<PLT_DeviceHost>; + +private: + PLT_TaskManager m_TaskManager; + PLT_HttpServer* m_HttpServer; + bool m_Broadcast; + NPT_UInt16 m_Port; + bool m_PortRebind; + NPT_List<NPT_HttpRequestHandler*> m_RequestHandlers; +}; + +typedef NPT_Reference<PLT_DeviceHost> PLT_DeviceHostReference; + +#endif /* _PLT_DEVICE_HOST_H_ */