MythTV master
upnpcds.h
Go to the documentation of this file.
1
2// Program Name: UPnpCDS.h
3// Created : Oct. 24, 2005
4//
5// Purpose :
6//
7// Copyright (c) 2005 David Blain <dblain@mythtv.org>
8//
9// Licensed under the GPL v2 or later, see LICENSE for details
10//
12
13#ifndef UPnpCDS_H_
14#define UPnpCDS_H_
15
16// C++ headers
17#include <utility>
18
19// QT headers
20#include <QList>
21#include <QMap>
22#include <QObject>
23#include <QString>
24
26
28#include "libmythupnp/upnp.h"
30
31class UPnpCDS;
32
33enum UPnpCDSMethod : std::uint8_t
34{
44};
45
46enum UPnpCDSBrowseFlag : std::uint8_t
47{
51};
52
53enum UPnpCDSClient : std::uint8_t
54{
55 CDS_ClientDefault = 0, // (no special attention required)
56 CDS_ClientWMP = 1, // Windows Media Player
57 CDS_ClientXBMC = 2, // XBMC
58 CDS_ClientMP101 = 3, // Netgear MP101
59 CDS_ClientXBox = 4, // XBox 360
60 CDS_ClientSonyDB = 5, // Sony Blu-ray players
61};
62
64{
66 QString sHeaderKey;
67 QString sHeaderValue;
68};
69
71
73{
74 public:
75
76 QString m_sObjectId;
77
79 QString m_sFilter;
80 uint16_t m_nStartingIndex {0};
81 uint16_t m_nRequestedCount {0};
83
84 // Browse specific properties
85
86 QString m_sParentId;
88
89 // Search specific properties
90
92 QStringList m_sSearchList;
94
95 // The device performing the request
97 double m_nClientVersion {0.0};
98
99 public:
100
101 UPnpCDSRequest() = default;
102};
103
105
107{
108 public:
109
113
114 uint16_t m_nTotalMatches {0};
115 uint16_t m_nUpdateID {0};
116
117 public:
118
121 {
122 while (!m_List.isEmpty())
123 {
124 m_List.takeLast()->DecrRef();
125 }
126 }
127
128 void Add ( CDSObject *pObject );
129 void Add ( const CDSObjects& objects );
130 QString GetResultXML(FilterMap &filter, bool ignoreChildren = false);
131};
132
134
140{
141 public:
142 UPnPShortcutFeature() : UPnPFeature("CONTAINER_SHORTCUTS", 1) { }
143
150 enum ShortCutType : std::uint8_t
151 {
163
173
184
185 FOLDER_STRUCTURE
186 };
187
188 bool AddShortCut(ShortCutType type, const QString &objectID);
189 QString CreateXML() override; // UPnPFeature
190
191 private:
192 static QString TypeToName(ShortCutType type);
193 QMap<ShortCutType, QString> m_shortcuts;
194};
195
196using CDSShortCutList = QMap<UPnPShortcutFeature::ShortCutType, QString>;
197
199
200using IDTokenMap = QMap<QString, QString>;
201using IDToken = QPair<QString, QString>;
202
204{
205 public:
206
208 QString m_sName;
209 QString m_sClass;
210
212
213 protected:
214
215 static QString RemoveToken ( const QString &sToken, const QString &sStr, int num );
216
217 // ------------------------------------------------------------------
218
219 virtual bool IsBrowseRequestForUs ( UPnpCDSRequest *pRequest );
220 virtual bool IsSearchRequestForUs ( UPnpCDSRequest *pRequest );
221
222 // ------------------------------------------------------------------
223
224 virtual int GetRootCount ( ) { return m_pRoot->GetChildCount(); }
225 virtual int GetRootContainerCount ( )
226 { return m_pRoot->GetChildContainerCount(); }
227
228 virtual void CreateRoot ( );
229
230 virtual bool LoadMetadata ( const UPnpCDSRequest *pRequest,
231 UPnpCDSExtensionResults *pResults,
232 const IDTokenMap& tokens,
233 const QString& currentToken );
234 virtual bool LoadChildren ( const UPnpCDSRequest *pRequest,
235 UPnpCDSExtensionResults *pResults,
236 const IDTokenMap& tokens,
237 const QString& currentToken );
238
239 static IDTokenMap TokenizeIDString ( const QString &Id ) ;
240 static IDToken GetCurrentToken ( const QString &Id ) ;
241
242 static QString CreateIDString ( const QString &RequestId,
243 const QString &Name,
244 int Value );
245 static QString CreateIDString ( const QString &RequestId,
246 const QString &Name,
247 const QString &Value );
248
249 CDSObject *m_pRoot {nullptr};
250
251 public:
252
253 UPnpCDSExtension( QString sName,
254 QString sExtensionId,
255 QString sClass ) :
256 m_sExtensionId(std::move(sExtensionId)),
257 m_sName(std::move(sName)),
258 m_sClass(std::move(sClass)) {}
259
260 virtual CDSObject *GetRoot ( );
261
262 virtual ~UPnpCDSExtension();
263
264 virtual UPnpCDSExtensionResults *Browse( UPnpCDSRequest *pRequest );
265 virtual UPnpCDSExtensionResults *Search( UPnpCDSRequest *pRequest );
266
267 virtual QString GetSearchCapabilities() { return( "" ); }
268 virtual QString GetSortCapabilities () { return( "" ); }
269 virtual CDSShortCutList GetShortCuts () { return m_shortcuts; }
270};
271
272using UPnpCDSExtensionList = QList<UPnpCDSExtension*>;
273
276//
277// UPnpCDS Class Definition
278//
281
283{
284 private:
285
288
291
293 UPnPShortcutFeature *m_pShortCuts {nullptr};
294
295 private:
296
297 static UPnpCDSMethod GetMethod ( const QString &sURI );
298 static UPnpCDSBrowseFlag GetBrowseFlag ( const QString &sFlag );
299
300 void HandleBrowse ( HTTPRequest *pRequest );
301 void HandleSearch ( HTTPRequest *pRequest );
302 static void HandleGetSearchCapabilities( HTTPRequest *pRequest );
303 static void HandleGetSortCapabilities ( HTTPRequest *pRequest );
304 void HandleGetSystemUpdateID ( HTTPRequest *pRequest );
305 void HandleGetFeatureList ( HTTPRequest *pRequest );
306 void HandleGetServiceResetToken ( HTTPRequest *pRequest );
307 static void DetermineClient ( HTTPRequest *pRequest, UPnpCDSRequest *pCDSRequest );
308
309 protected:
310
311 // Implement UPnpServiceImpl methods that we can
312
313 QString GetServiceType() override // UPnpServiceImpl
314 { return "urn:schemas-upnp-org:service:ContentDirectory:4"; }
315 QString GetServiceId() override // UPnpServiceImpl
316 { return "urn:upnp-org:serviceId:ContentDirectory"; }
317 QString GetServiceControlURL() override // UPnpServiceImpl
318 { return m_sControlUrl.mid( 1 ); }
319 QString GetServiceDescURL() override // UPnpServiceImpl
320 { return m_sControlUrl.mid( 1 ) + "/GetServDesc"; }
321
322 public:
323 UPnpCDS( UPnpDevice *pDevice,
324 const QString &sSharePath );
325
326 ~UPnpCDS() override;
327
328 void RegisterExtension ( UPnpCDSExtension *pExtension );
329 void UnregisterExtension( UPnpCDSExtension *pExtension );
330
331 void RegisterShortCut ( UPnPShortcutFeature::ShortCutType type,
332 const QString &objectID );
333 void RegisterFeature ( UPnPFeature *feature );
334
335 QStringList GetBasePaths() override; // Eventing
336
337 bool ProcessRequest( HTTPRequest *pRequest ) override; // Eventing
338};
339
340#endif
341
342// vim:ts=4:sw=4:ai:et:si:sts=4
QMap< uint, int > FilterMap
static const std::array< featureStruct, 7 > feature
Standard UPnP Shortcut feature.
Definition: upnpcds.h:140
QMap< ShortCutType, QString > m_shortcuts
Definition: upnpcds.h:193
ShortCutType
Allowed values for the Container Shortcut feature.
Definition: upnpcds.h:151
UPnpCDSExtensionResults()=default
QString m_sExtensionId
Definition: upnpcds.h:207
QString m_sName
Definition: upnpcds.h:208
virtual QString GetSortCapabilities()
Definition: upnpcds.h:268
virtual int GetRootCount()
Definition: upnpcds.h:224
virtual CDSShortCutList GetShortCuts()
Definition: upnpcds.h:269
QString m_sClass
Definition: upnpcds.h:209
virtual QString GetSearchCapabilities()
Definition: upnpcds.h:267
virtual int GetRootContainerCount()
Definition: upnpcds.h:225
UPnpCDSExtension(QString sName, QString sExtensionId, QString sClass)
Definition: upnpcds.h:253
CDSShortCutList m_shortcuts
Definition: upnpcds.h:211
QString m_sSearchCriteria
Definition: upnpcds.h:91
UPnpCDSRequest()=default
QStringList m_sSearchList
Definition: upnpcds.h:92
QString m_sSearchClass
Definition: upnpcds.h:93
QString m_sObjectId
Definition: upnpcds.h:76
QString m_sFilter
Definition: upnpcds.h:79
QString m_sSortCriteria
Definition: upnpcds.h:82
QString m_sContainerID
Definition: upnpcds.h:78
QString m_sParentId
Definition: upnpcds.h:86
QString GetServiceControlURL() override
Provices the base URL for control commands.
Definition: upnpcds.h:317
CDSObject m_root
Definition: upnpcds.h:287
QString m_sServiceDescFileName
Definition: upnpcds.h:289
UPnPFeatureList m_features
Definition: upnpcds.h:292
QString GetServiceDescURL() override
Provices the URL of the service description XML.
Definition: upnpcds.h:319
QString GetServiceType() override
Provices the schema urn.
Definition: upnpcds.h:313
QString m_sControlUrl
Definition: upnpcds.h:290
UPnpCDSExtensionList m_extensions
Definition: upnpcds.h:286
QString GetServiceId() override
Provides the device specific urn.
Definition: upnpcds.h:315
unsigned short uint16_t
Definition: iso6937tables.h:3
STL namespace.
UPnpCDSClient nClientType
Definition: upnpcds.h:65
QString sHeaderValue
Definition: upnpcds.h:67
UPnPResultCode
Definition: upnp.h:34
@ UPnPResult_Success
Definition: upnp.h:35
QPair< QString, QString > IDToken
Definition: upnpcds.h:201
UPnpCDSBrowseFlag
Definition: upnpcds.h:47
@ CDS_BrowseDirectChildren
Definition: upnpcds.h:50
@ CDS_BrowseMetadata
Definition: upnpcds.h:49
@ CDS_BrowseUnknown
Definition: upnpcds.h:48
UPnpCDSClient
Definition: upnpcds.h:54
@ CDS_ClientDefault
Definition: upnpcds.h:55
@ CDS_ClientSonyDB
Definition: upnpcds.h:60
@ CDS_ClientXBMC
Definition: upnpcds.h:57
@ CDS_ClientWMP
Definition: upnpcds.h:56
@ CDS_ClientMP101
Definition: upnpcds.h:58
@ CDS_ClientXBox
Definition: upnpcds.h:59
UPnpCDSMethod
Definition: upnpcds.h:34
@ CDSM_Unknown
Definition: upnpcds.h:35
@ CDSM_GetSearchCapabilities
Definition: upnpcds.h:39
@ CDSM_GetServiceResetToken
Definition: upnpcds.h:43
@ CDSM_Browse
Definition: upnpcds.h:37
@ CDSM_GetServiceDescription
Definition: upnpcds.h:36
@ CDSM_GetSortCapabilities
Definition: upnpcds.h:40
@ CDSM_GetFeatureList
Definition: upnpcds.h:42
@ CDSM_Search
Definition: upnpcds.h:38
@ CDSM_GetSystemUpdateID
Definition: upnpcds.h:41
QMap< QString, QString > IDTokenMap
Definition: upnpcds.h:200
QList< UPnpCDSExtension * > UPnpCDSExtensionList
Definition: upnpcds.h:272
QMap< UPnPShortcutFeature::ShortCutType, QString > CDSShortCutList
Definition: upnpcds.h:196
QList< CDSObject * > CDSObjects
#define UPNP_PUBLIC
Definition: upnpexp.h:9