Arduino DLNA Server
Loading...
Searching...
No Matches
DLNAMediaServerDescr.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace tiny_dlna {
6
21 public:
30 size_t printDescr(Print& out) override {
31 XMLPrinter xml(out);
32 size_t result = 0;
33 result += xml.printXMLHeader();
34 result += xml.printNodeBeginNl(
35 "scpd", "xmlns=\"urn:schemas-upnp-org:service-1-0\"");
36
37 result += xml.printNodeBeginNl("specVersion");
38 result += xml.printNode("major", 1);
39 result += xml.printNode("minor", 0);
40 result += xml.printNodeEnd("specVersion");
41
42 result += xml.printNodeBeginNl("actionList");
43 /* GetProtocolInfo */
44 result += xml.printNodeBeginNl("action");
45 result += xml.printNode("name", "GetProtocolInfo");
46 result += xml.printNodeBeginNl("argumentList");
47 result += xml.printArgument("Source", "out", "SourceProtocolInfo");
48 result += xml.printArgument("Sink", "out", "SinkProtocolInfo");
49 result += xml.printNodeEnd("argumentList");
50 result += xml.printNodeEnd("action");
51
52 /* GetCurrentConnectionIDs */
53 result += xml.printNodeBeginNl("action");
54 result += xml.printNode("name", "GetCurrentConnectionIDs");
55 result += xml.printNodeBeginNl("argumentList");
56 result += xml.printArgument("ConnectionIDs", "out", "CurrentConnectionIDs");
57 result += xml.printNodeEnd("argumentList");
58 result += xml.printNodeEnd("action");
59
60 /* GetCurrentConnectionInfo */
61 result += xml.printNodeBeginNl("action");
62 result += xml.printNode("name", "GetCurrentConnectionInfo");
63 result += xml.printNodeBeginNl("argumentList");
64 result +=
65 xml.printArgument("ConnectionID", "in", "A_ARG_TYPE_ConnectionID");
66 result += xml.printArgument("RcsID", "out", "A_ARG_TYPE_RcsID");
67 result +=
68 xml.printArgument("AVTransportID", "out", "A_ARG_TYPE_AVTransportID");
69 result +=
70 xml.printArgument("ProtocolInfo", "out", "A_ARG_TYPE_ProtocolInfo");
71 result += xml.printArgument("PeerConnectionManager", "out",
72 "A_ARG_TYPE_ConnectionManager");
73 result +=
74 xml.printArgument("PeerConnectionID", "out", "A_ARG_TYPE_ConnectionID");
75 result += xml.printArgument("Direction", "out", "A_ARG_TYPE_Direction");
76 result += xml.printArgument("Status", "out", "A_ARG_TYPE_ConnectionStatus");
77 result += xml.printNodeEnd("argumentList");
78 result += xml.printNodeEnd("action");
79 result += xml.printNodeEnd("actionList");
80 result += xml.printNodeBeginNl("serviceStateTable");
81
82 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"yes\"");
83 result += xml.printNode("name", "SourceProtocolInfo");
84 result += xml.printNode("dataType", "string");
85 result += xml.printNodeEnd("stateVariable");
86
87 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"yes\"");
88 result += xml.printNode("name", "SinkProtocolInfo");
89 result += xml.printNode("dataType", "string");
90 result += xml.printNodeEnd("stateVariable");
91
92 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"yes\"");
93 result += xml.printNode("name", "CurrentConnectionIDs");
94 result += xml.printNode("dataType", "string");
95 result += xml.printNodeEnd("stateVariable");
96
97 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
98 result += xml.printNode("name", "A_ARG_TYPE_ConnectionStatus");
99 result += xml.printNode("dataType", "string");
100 result += xml.printNodeBeginNl("allowedValueList");
101 result += xml.printNode("allowedValue", "OK");
102 result += xml.printNode("allowedValue", "ContentFormatMismatch");
103 result += xml.printNode("allowedValue", "InsufficientBandwidth");
104 result += xml.printNode("allowedValue", "UnreliableChannel");
105 result += xml.printNode("allowedValue", "Unknown");
106 result += xml.printNodeEnd("allowedValueList");
107 result += xml.printNodeEnd("stateVariable");
108
109 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
110 result += xml.printNode("name", "A_ARG_TYPE_ConnectionManager");
111 result += xml.printNode("dataType", "string");
112 result += xml.printNodeEnd("stateVariable");
113
114 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
115 result += xml.printNode("name", "A_ARG_TYPE_Direction");
116 result += xml.printNode("dataType", "string");
117 result += xml.printNodeBeginNl("allowedValueList");
118 result += xml.printNode("allowedValue", "Input");
119 result += xml.printNode("allowedValue", "Output");
120 result += xml.printNodeEnd("allowedValueList");
121 result += xml.printNodeEnd("stateVariable");
122
123 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
124 result += xml.printNode("name", "A_ARG_TYPE_ProtocolInfo");
125 result += xml.printNode("dataType", "string");
126 result += xml.printNodeEnd("stateVariable");
127
128 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
129 result += xml.printNode("name", "A_ARG_TYPE_ConnectionID");
130 result += xml.printNode("dataType", "i4");
131 result += xml.printNodeEnd("stateVariable");
132
133 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
134 result += xml.printNode("name", "A_ARG_TYPE_AVTransportID");
135 result += xml.printNode("dataType", "i4");
136 result += xml.printNodeEnd("stateVariable");
137
138 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
139 result += xml.printNode("name", "A_ARG_TYPE_RcsID");
140 result += xml.printNode("dataType", "i4");
141 result += xml.printNodeEnd("stateVariable");
142
143 result += xml.printNodeEnd("serviceStateTable");
144
145 result += xml.printNodeEnd("scpd");
146 return result;
147 }
148};
149
161 public:
170 size_t printDescr(Print& out) override {
171 XMLPrinter xml(out);
172 size_t result = 0;
173 result += xml.printXMLHeader();
174 result += xml.printNodeBeginNl(
175 "scpd", "xmlns=\"urn:schemas-upnp-org:service-1-0\"");
176
177 result += xml.printNodeBeginNl("specVersion");
178 result += xml.printNode("major", 1);
179 result += xml.printNode("minor", 0);
180 result += xml.printNodeEnd("specVersion");
181
182 result += xml.printNodeBeginNl("actionList");
183
184 // GetSearchCapabilities
185 result += xml.printNodeBeginNl("action");
186 result += xml.printNode("name", "GetSearchCapabilities");
187 result += xml.printNodeBeginNl("argumentList");
188 result += xml.printNodeBeginNl("argument");
189 result += xml.printNode("name", "SearchCaps");
190 result += xml.printNode("direction", "out");
191 result += xml.printNode("relatedStateVariable", "SearchCapabilities");
192 result += xml.printNodeEnd("argument");
193 result += xml.printNodeEnd("argumentList");
194 result += xml.printNodeEnd("action");
195
196 // GetSortCapabilities
197 result += xml.printNodeBeginNl("action");
198 result += xml.printNode("name", "GetSortCapabilities");
199 result += xml.printNodeBeginNl("argumentList");
200 result += xml.printNodeBeginNl("argument");
201 result += xml.printNode("name", "SortCaps");
202 result += xml.printNode("direction", "out");
203 result += xml.printNode("relatedStateVariable", "SortCapabilities");
204 result += xml.printNodeEnd("argument");
205 result += xml.printNodeEnd("argumentList");
206 result += xml.printNodeEnd("action");
207
208 // GetSystemUpdateID
209 result += xml.printNodeBeginNl("action");
210 result += xml.printNode("name", "GetSystemUpdateID");
211 result += xml.printNodeBeginNl("argumentList");
212 result += xml.printNodeBeginNl("argument");
213 result += xml.printNode("name", "Id");
214 result += xml.printNode("direction", "out");
215 result += xml.printNode("relatedStateVariable", "SystemUpdateID");
216 result += xml.printNodeEnd("argument");
217 result += xml.printNodeEnd("argumentList");
218 result += xml.printNodeEnd("action");
219
220 // Browse
221 result += xml.printNodeBeginNl("action");
222 result += xml.printNode("name", "Browse");
223 result += xml.printNodeBeginNl("argumentList");
224 result += xml.printArgument("ObjectID", "in", "A_ARG_TYPE_ObjectID");
225 result += xml.printArgument("BrowseFlag", "in", "A_ARG_TYPE_BrowseFlag");
226 result += xml.printArgument("Filter", "in", "A_ARG_TYPE_Filter");
227 result += xml.printArgument("StartingIndex", "in", "A_ARG_TYPE_Index");
228 result += xml.printArgument("RequestedCount", "in", "A_ARG_TYPE_Count");
229 result += xml.printArgument("SortCriteria", "in", "A_ARG_TYPE_SortCriteria");
230 result += xml.printArgument("Result", "out", "A_ARG_TYPE_Result");
231 result += xml.printArgument("NumberReturned", "out", "A_ARG_TYPE_Count");
232 result += xml.printArgument("TotalMatches", "out", "A_ARG_TYPE_Count");
233 result += xml.printArgument("UpdateID", "out", "A_ARG_TYPE_UpdateID");
234 result += xml.printNodeEnd("argumentList");
235 result += xml.printNodeEnd("action");
236
237 // Search
238 result += xml.printNodeBeginNl("action");
239 result += xml.printNode("name", "Search");
240 result += xml.printNodeBeginNl("argumentList");
241 result += xml.printArgument("ContainerID", "in", "A_ARG_TYPE_ObjectID");
242 result += xml.printArgument("SearchCriteria", "in", "A_ARG_TYPE_SearchCriteria");
243 result += xml.printArgument("Filter", "in", "A_ARG_TYPE_Filter");
244 result += xml.printArgument("StartingIndex", "in", "A_ARG_TYPE_Index");
245 result += xml.printArgument("RequestedCount", "in", "A_ARG_TYPE_Count");
246 result += xml.printArgument("SortCriteria", "in", "A_ARG_TYPE_SortCriteria");
247 result += xml.printArgument("Result", "out", "A_ARG_TYPE_Result");
248 result += xml.printArgument("NumberReturned", "out", "A_ARG_TYPE_Count");
249 result += xml.printArgument("TotalMatches", "out", "A_ARG_TYPE_Count");
250 result += xml.printArgument("UpdateID", "out", "A_ARG_TYPE_UpdateID");
251 result += xml.printNodeEnd("argumentList");
252 result += xml.printNodeEnd("action");
253
254 // UpdateObject
255 result += xml.printNodeBeginNl("action");
256 result += xml.printNode("name", "UpdateObject");
257 result += xml.printNodeBeginNl("argumentList");
258 result += xml.printArgument("ObjectID", "in", "A_ARG_TYPE_ObjectID");
259 result += xml.printArgument("CurrentTagValue", "in", "A_ARG_TYPE_TagValueList");
260 result += xml.printArgument("NewTagValue", "in", "A_ARG_TYPE_TagValueList");
261 result += xml.printNodeEnd("argumentList");
262 result += xml.printNodeEnd("action");
263
264 result += xml.printNodeEnd("actionList");
265
266 result += xml.printNodeBeginNl("serviceStateTable");
267
268 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"yes\"");
269 result += xml.printNode("name", "TransferIDs");
270 result += xml.printNode("dataType", "string");
271 result += xml.printNodeEnd("stateVariable");
272
273 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
274 result += xml.printNode("name", "A_ARG_TYPE_ObjectID");
275 result += xml.printNode("dataType", "string");
276 result += xml.printNodeEnd("stateVariable");
277
278 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
279 result += xml.printNode("name", "A_ARG_TYPE_Result");
280 result += xml.printNode("dataType", "string");
281 result += xml.printNodeEnd("stateVariable");
282
283 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
284 result += xml.printNode("name", "A_ARG_TYPE_SearchCriteria");
285 result += xml.printNode("dataType", "string");
286 result += xml.printNodeEnd("stateVariable");
287
288 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
289 result += xml.printNode("name", "A_ARG_TYPE_BrowseFlag");
290 result += xml.printNode("dataType", "string");
291 result += xml.printNodeBeginNl("allowedValueList");
292 result += xml.printNode("allowedValue", "BrowseMetadata");
293 result += xml.printNode("allowedValue", "BrowseDirectChildren");
294 result += xml.printNodeEnd("allowedValueList");
295 result += xml.printNodeEnd("stateVariable");
296
297 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
298 result += xml.printNode("name", "A_ARG_TYPE_Filter");
299 result += xml.printNode("dataType", "string");
300 result += xml.printNodeEnd("stateVariable");
301
302 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
303 result += xml.printNode("name", "A_ARG_TYPE_SortCriteria");
304 result += xml.printNode("dataType", "string");
305 result += xml.printNodeEnd("stateVariable");
306
307 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
308 result += xml.printNode("name", "A_ARG_TYPE_Index");
309 result += xml.printNode("dataType", "i4");
310 result += xml.printNodeEnd("stateVariable");
311
312 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
313 result += xml.printNode("name", "A_ARG_TYPE_Count");
314 result += xml.printNode("dataType", "ui4");
315 result += xml.printNodeEnd("stateVariable");
316
317 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
318 result += xml.printNode("name", "A_ARG_TYPE_UpdateID");
319 result += xml.printNode("dataType", "ui4");
320 result += xml.printNodeEnd("stateVariable");
321
322 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
323 result += xml.printNode("name", "A_ARG_TYPE_TagValueList");
324 result += xml.printNode("dataType", "string");
325 result += xml.printNodeEnd("stateVariable");
326
327 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
328 result += xml.printNode("name", "SearchCapabilities");
329 result += xml.printNode("dataType", "string");
330 result += xml.printNodeEnd("stateVariable");
331
332 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
333 result += xml.printNode("name", "SortCapabilities");
334 result += xml.printNode("dataType", "string");
335 result += xml.printNodeEnd("stateVariable");
336
337 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"yes\"");
338 result += xml.printNode("name", "SystemUpdateID");
339 result += xml.printNode("dataType", "ui4");
340 result += xml.printNodeEnd("stateVariable");
341
342 result += xml.printNodeEnd("serviceStateTable");
343
344 result += xml.printNodeEnd("scpd");
345 return result;
346 }
347};
348
349} // namespace tiny_dlna
Abstract DLNA Descriptor Generation.
Definition: DLNADescr.h:9
ConnectionManager SCPD descriptor for MediaServer.
Definition: DLNAMediaServerDescr.h:20
size_t printDescr(Print &out) override
Emit ConnectionManager SCPD XML.
Definition: DLNAMediaServerDescr.h:30
ContentDirectory SCPD descriptor for MediaServer.
Definition: DLNAMediaServerDescr.h:160
size_t printDescr(Print &out) override
Emit ContentDirectory SCPD XML.
Definition: DLNAMediaServerDescr.h:170
Definition: AllocationTracker.h:9
Functions to efficiently output XML. XML data contains a lot of redundancy so it is more memory effic...
Definition: XMLPrinter.h:55
size_t printNodeBeginNl(const char *node, const char *attributes=nullptr, const char *ns=nullptr)
Prints the beginning of an XML node and a newline.
Definition: XMLPrinter.h:274
size_t printNode(XMLNode node)
Prints an XML node from XMLNode struct.
Definition: XMLPrinter.h:88
size_t printNodeEnd(const char *node, const char *ns=nullptr)
Prints the end of an XML node.
Definition: XMLPrinter.h:287
size_t printArgument(const char *name, const char *direction, const char *relatedStateVariable=nullptr)
Helper to print a UPnP <argument> element with name, direction and optional relatedStateVariable.
Definition: XMLPrinter.h:202
size_t printXMLHeader()
Prints the XML header.
Definition: XMLPrinter.h:78