1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
|
/*****************************************************************
|
| Platinum - Control Point Tasks
|
| Copyright (c) 2004-2010, 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.
| licensing@plutinosoft.com
|
| 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
|
****************************************************************/
/** @file
UPnP ControlPoint Tasks
*/
#ifndef _PLT_CONTROL_POINT_TASK_H_
#define _PLT_CONTROL_POINT_TASK_H_
/*----------------------------------------------------------------------
| includes
+---------------------------------------------------------------------*/
#include "Neptune.h"
#include "PltHttpClientTask.h"
#include "PltDatagramStream.h"
#include "PltDeviceData.h"
#include "PltCtrlPoint.h"
/*----------------------------------------------------------------------
| forward declarations
+---------------------------------------------------------------------*/
class PLT_Action;
/*----------------------------------------------------------------------
| PLT_CtrlPointGetDescriptionTask class
+---------------------------------------------------------------------*/
/**
The PLT_CtrlPointGetDescriptionTask class fetches the description xml document
from a UPnP device
*/
class PLT_CtrlPointGetDescriptionTask : public PLT_HttpClientSocketTask
{
public:
PLT_CtrlPointGetDescriptionTask(const NPT_HttpUrl& url,
PLT_CtrlPoint* ctrl_point,
NPT_TimeInterval leasetime);
virtual ~PLT_CtrlPointGetDescriptionTask();
protected:
// PLT_HttpClientSocketTask methods
NPT_Result ProcessResponse(NPT_Result res,
const NPT_HttpRequest& request,
const NPT_HttpRequestContext& context,
NPT_HttpResponse* response);
protected:
PLT_CtrlPoint* m_CtrlPoint;
NPT_TimeInterval m_LeaseTime;
};
/*----------------------------------------------------------------------
| PLT_CtrlPointGetSCPDRequest class
+---------------------------------------------------------------------*/
/**
The PLT_CtrlPointGetSCPDRequest class is used by a PLT_CtrlPointGetSCPDsTask task
to fetch a specific SCPD xml document for a given service of a given device.
*/
class PLT_CtrlPointGetSCPDRequest : public NPT_HttpRequest
{
public:
PLT_CtrlPointGetSCPDRequest(PLT_DeviceDataReference& device,
const char* url,
const char* method = "GET",
const char* protocol = NPT_HTTP_PROTOCOL_1_1) : // 1.1 for pipelining
NPT_HttpRequest(url, method, protocol), m_Device(device) {}
virtual ~PLT_CtrlPointGetSCPDRequest() {}
// members
PLT_DeviceDataReference m_Device;
};
/*----------------------------------------------------------------------
| PLT_CtrlPointGetSCPDsTask class
+---------------------------------------------------------------------*/
/**
The PLT_CtrlPointGetSCPDsTask class fetches the SCPD xml document of one or more
services for a given device.
*/
class PLT_CtrlPointGetSCPDsTask : public PLT_HttpClientSocketTask
{
public:
PLT_CtrlPointGetSCPDsTask(PLT_CtrlPoint* ctrl_point, PLT_DeviceDataReference& root_device);
virtual ~PLT_CtrlPointGetSCPDsTask();
NPT_Result AddSCPDRequest(PLT_CtrlPointGetSCPDRequest* request) {
return PLT_HttpClientSocketTask::AddRequest((NPT_HttpRequest*)request);
}
// override to prevent calling this directly
NPT_Result AddRequest(NPT_HttpRequest*) {
// only queuing PLT_CtrlPointGetSCPDRequest allowed
return NPT_ERROR_NOT_SUPPORTED;
}
protected:
// PLT_HttpClientSocketTask methods
NPT_Result ProcessResponse(NPT_Result res,
const NPT_HttpRequest& request,
const NPT_HttpRequestContext& context,
NPT_HttpResponse* response);
protected:
PLT_CtrlPoint* m_CtrlPoint;
PLT_DeviceDataReference m_RootDevice;
};
/*----------------------------------------------------------------------
| PLT_CtrlPointInvokeActionTask class
+---------------------------------------------------------------------*/
/**
The PLT_CtrlPointInvokeActionTask class is used by a PLT_CtrlPoint to invoke
a specific action of a given service for a given device.
*/
class PLT_CtrlPointInvokeActionTask : public PLT_HttpClientSocketTask
{
public:
PLT_CtrlPointInvokeActionTask(NPT_HttpRequest* request,
PLT_CtrlPoint* ctrl_point,
PLT_ActionReference& action,
void* userdata);
virtual ~PLT_CtrlPointInvokeActionTask();
protected:
// PLT_HttpClientSocketTask methods
NPT_Result ProcessResponse(NPT_Result res,
const NPT_HttpRequest& request,
const NPT_HttpRequestContext& context,
NPT_HttpResponse* response);
protected:
PLT_CtrlPoint* m_CtrlPoint;
PLT_ActionReference m_Action;
void* m_Userdata;
};
/*----------------------------------------------------------------------
| PLT_CtrlPointHouseKeepingTask class
+---------------------------------------------------------------------*/
/**
The PLT_CtrlPointHouseKeepingTask class is used by a PLT_CtrlPoint to keep
track of expired devices and autmatically renew event subscribers.
*/
class PLT_CtrlPointHouseKeepingTask : public PLT_ThreadTask
{
public:
PLT_CtrlPointHouseKeepingTask(PLT_CtrlPoint* ctrl_point,
NPT_TimeInterval timer = NPT_TimeInterval(5.));
protected:
~PLT_CtrlPointHouseKeepingTask() {}
// PLT_ThreadTask methods
virtual void DoRun();
protected:
PLT_CtrlPoint* m_CtrlPoint;
NPT_TimeInterval m_Timer;
};
/*----------------------------------------------------------------------
| PLT_CtrlPointSubscribeEventTask class
+---------------------------------------------------------------------*/
/**
The PLT_CtrlPointSubscribeEventTask class is used to subscribe, renew or cancel
a subscription for a given service of a given device.
*/
class PLT_CtrlPointSubscribeEventTask : public PLT_HttpClientSocketTask
{
public:
PLT_CtrlPointSubscribeEventTask(NPT_HttpRequest* request,
PLT_CtrlPoint* ctrl_point,
PLT_DeviceDataReference& device,
PLT_Service* service,
void* userdata = NULL);
virtual ~PLT_CtrlPointSubscribeEventTask();
protected:
// PLT_HttpClientSocketTask methods
NPT_Result ProcessResponse(NPT_Result res,
const NPT_HttpRequest& request,
const NPT_HttpRequestContext& context,
NPT_HttpResponse* response);
protected:
PLT_CtrlPoint* m_CtrlPoint;
PLT_Service* m_Service;
PLT_DeviceDataReference m_Device; // force to keep a reference to device owning m_Service
void* m_Userdata;
};
#endif /* _PLT_CONTROL_POINT_TASK_H_ */
|