UPnP/src/include/Network/UPnP/Service.h
Go to the documentation of this file.
1 /****
2  * Service.h
3  *
4  * Copyright 2019 mikee47 <mike@sillyhouse.net>
5  *
6  * This file is part of the Sming UPnP Library
7  *
8  * This library is free software: you can redistribute it and/or modify it under the terms of the
9  * GNU General Public License as published by the Free Software Foundation, version 3 or later.
10  *
11  * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13  * See the GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along with this library.
16  * If not, see <https://www.gnu.org/licenses/>.
17  *
18  ****/
19 
20 #pragma once
21 
22 #include "Object.h"
23 #include "ObjectList.h"
24 #include "ActionRequest.h"
25 #include "Constants.h"
26 #include <Network/SSDP/Urn.h>
27 
28 #define UPNP_SERVICE_FIELD_MAP(XX) \
29  XX(serviceType, required) \
30  XX(serviceId, required) \
31  XX(SCPDURL, required) \
32  XX(controlURL, required) \
33  XX(eventSubURL, required) \
34  XX(domain, custom) \
35  XX(type, custom) \
36  XX(version, custom)
37 
38 namespace UPnP
39 {
40 class Device;
41 class Service;
42 
46 class Service : public ObjectTemplate<Service, Object>
47 {
48 public:
49  enum class Field {
50 #define XX(name, req) name,
52 #undef XX
53  customStart = domain,
54  MAX
55  };
56 
59 
60  Service(Device& device) : device_(device)
61  {
62  }
63 
65 
66  String caption() const
67  {
68  String s;
69  s += String(objectType());
70  s += " {";
71  s += getField(Field::serviceId);
72  s += '}';
73  return s;
74  }
75 
76  void search(const SearchFilter& filter) override;
77  bool formatMessage(Message& msg, MessageSpec& ms) override;
78 
79  bool onHttpRequest(HttpServerConnection& connection) override;
80 
81  virtual String getField(Field desc) const;
82 
83  Urn objectType() const override
84  {
85  return ServiceUrn(getField(Field::domain), getField(Field::type), version());
86  }
87 
88  String serviceId() const
89  {
90  return getField(Field::serviceId);
91  }
92 
93  XML::Node* getDescription(XML::Document& doc, DescType descType) const override;
94 
96 
97  Device& device() const
98  {
99  return device_;
100  }
101 
105  virtual bool sendRequest(HttpRequest* request) const
106  {
107  delete request;
108  return false;
109  }
110 
135  virtual Error handleAction(ActionRequest& req) = 0;
136 
137 private:
138  Device& device_;
139  // actionList
140  // serviceStateTable
141 };
142 
143 } // namespace UPnP
144 
#define UPNP_SERVICE_FIELD_MAP(XX)
Definition: UPnP/src/include/Network/UPnP/Service.h:28
String toString(UPnP::Service::Field field)
Encapsulates an incoming or outgoing request.
Definition: HttpRequest.h:37
Definition: HttpServerConnection.h:34
Base class for read-only stream.
Definition: DataSourceStream.h:46
Defines the information used to create an outgoing message.
Definition: MessageSpec.h:75
Message using regular HTTP header management class.
Definition: SSDP/src/include/Network/SSDP/Message.h:72
The String class.
Definition: WString.h:137
Definition: ActionRequest.h:27
Represents any kind of device, including a root device.
Definition: Libraries/UPnP/src/include/Network/UPnP/Device.h:58
Class template for singly-linked list of objects.
Definition: ObjectList.h:32
Base class template for linked items with type casting.
Definition: BaseObject.h:80
virtual Version version() const
Definition: Libraries/UPnP/src/include/Network/UPnP/Object.h:69
Represents any kind of device, including a root device.
Definition: UPnP/src/include/Network/UPnP/Service.h:47
Device & root()
bool onHttpRequest(HttpServerConnection &connection) override
Called by framework to handle an incoming HTTP request.
virtual String getField(Field desc) const
Field
Definition: UPnP/src/include/Network/UPnP/Service.h:49
String serviceId() const
Definition: UPnP/src/include/Network/UPnP/Service.h:88
String caption() const
Definition: UPnP/src/include/Network/UPnP/Service.h:66
bool formatMessage(Message &msg, MessageSpec &ms) override
Standard fields have been completed.
IDataSourceStream * createDescription() override
Called by framework to construct a device description response stream.
void search(const SearchFilter &filter) override
Called during SSDP search operation.
Urn objectType() const override
Definition: UPnP/src/include/Network/UPnP/Service.h:83
virtual Error handleAction(ActionRequest &req)=0
An action request has been received.
Device & device() const
Definition: UPnP/src/include/Network/UPnP/Service.h:97
Service(Device &device)
Definition: UPnP/src/include/Network/UPnP/Service.h:60
virtual bool sendRequest(HttpRequest *request) const
Implemented in ServiceControl.
Definition: UPnP/src/include/Network/UPnP/Service.h:105
XML::Node * getDescription(XML::Document &doc, DescType descType) const override
Structure for UPnP URNs.
Definition: Urn.h:41
Definition: ActionRequest.h:25
DescType
When building descriptions this qualifies what information is required.
Definition: Item.h:32
Error
Definition: Libraries/UPnP/src/include/Network/UPnP/Error.h:45
rapidxml::xml_node< char > Node
Definition: RapidXML.h:37
rapidxml::xml_document< char > Document
Definition: RapidXML.h:36
A UPnP Service URN.
Definition: Urn.h:186
Definition: BaseObject.h:39