/*****************************************************************
|
| 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,
NPT_String uuid);
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;
NPT_String m_UUID;
};
/*----------------------------------------------------------------------
| 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_ */