kodi
UPnPServer.h
1 /*
2  * Copyright (C) 2012-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "interfaces/IAnnouncer.h"
12 #include "utils/logtypes.h"
13 
14 #include <map>
15 #include <memory>
16 #include <string>
17 #include <utility>
18 
19 #include <Platinum/Source/Devices/MediaConnect/PltMediaConnect.h>
20 
21 class CFileItem;
22 class CFileItemList;
23 class CThumbLoader;
24 class CVariant;
25 class PLT_MediaObject;
27 
28 namespace UPNP
29 {
30 
34 {
35 public:
36  CUPnPServer(const char* friendly_name, const char* uuid = NULL, int port = 0);
37  ~CUPnPServer() override;
38  void Announce(ANNOUNCEMENT::AnnouncementFlag flag,
39  const std::string& sender,
40  const std::string& message,
41  const CVariant& data) override;
42 
43  // PLT_MediaServer methods
44  NPT_Result OnBrowseMetadata(PLT_ActionReference& action,
45  const char* object_id,
46  const char* filter,
47  NPT_UInt32 starting_index,
48  NPT_UInt32 requested_count,
49  const char* sort_criteria,
50  const PLT_HttpRequestContext& context) override;
51  NPT_Result OnBrowseDirectChildren(PLT_ActionReference& action,
52  const char* object_id,
53  const char* filter,
54  NPT_UInt32 starting_index,
55  NPT_UInt32 requested_count,
56  const char* sort_criteria,
57  const PLT_HttpRequestContext& context) override;
58  NPT_Result OnSearchContainer(PLT_ActionReference& action,
59  const char* container_id,
60  const char* search_criteria,
61  const char* filter,
62  NPT_UInt32 starting_index,
63  NPT_UInt32 requested_count,
64  const char* sort_criteria,
65  const PLT_HttpRequestContext& context) override;
66 
67  NPT_Result OnUpdateObject(PLT_ActionReference& action,
68  const char* object_id,
69  NPT_Map<NPT_String,NPT_String>& current_vals,
71  const PLT_HttpRequestContext& context) override;
72 
73  // PLT_FileMediaServer methods
74  NPT_Result ServeFile(const NPT_HttpRequest& request,
75  const NPT_HttpRequestContext& context,
76  NPT_HttpResponse& response,
77  const NPT_String& file_path) override;
78 
79  // PLT_DeviceHost methods
80  NPT_Result ProcessGetSCPD(PLT_Service* service,
81  NPT_HttpRequest& request,
82  const NPT_HttpRequestContext& context,
83  NPT_HttpResponse& response) override;
84 
85  NPT_Result SetupServices() override;
86  NPT_Result SetupIcons() override;
87  NPT_String BuildSafeResourceUri(const NPT_HttpUrl &rooturi,
88  const char* host,
89  const char* file_path);
90 
91  void AddSafeResourceUri(PLT_MediaObject* object,
92  const NPT_HttpUrl& rooturi,
93  const NPT_List<NPT_IpAddress>& ips,
94  const char* file_path,
95  const NPT_String& info)
96  {
98  for(NPT_List<NPT_IpAddress>::Iterator ip = ips.GetFirstItem(); ip; ++ip) {
99  res.m_ProtocolInfo = PLT_ProtocolInfo(info);
100  res.m_Uri = BuildSafeResourceUri(rooturi, (*ip).ToString(), file_path);
101  object->m_Resources.Add(res);
102  }
103  }
104 
105  /* Samsung's devices get subtitles from header in response (for movie file), not from didl.
106  It's a way to store subtitle uri generated when building didl, to use later in http response*/
107  NPT_Result AddSubtitleUriForSecResponse(const NPT_String& movie_md5,
108  const NPT_String& subtitle_uri);
109 
110 
111  private:
112  void OnScanCompleted(int type);
113  void UpdateContainer(const std::string& id);
114  void PropagateUpdates();
115 
116  PLT_MediaObject* Build(const std::shared_ptr<CFileItem>& item,
117  bool with_count,
118  const PLT_HttpRequestContext& context,
119  NPT_Reference<CThumbLoader>& thumbLoader,
120  const char* parent_id = NULL);
121  NPT_Result BuildResponse(PLT_ActionReference& action,
122  CFileItemList& items,
123  const char* filter,
124  NPT_UInt32 starting_index,
125  NPT_UInt32 requested_count,
126  const char* sort_criteria,
127  const PLT_HttpRequestContext& context,
128  const char* parent_id /* = NULL */);
129 
130  // class methods
131  static void DefaultSortItems(CFileItemList& items);
132  static NPT_String GetParentFolder(const NPT_String& file_path)
133  {
134  int index = file_path.ReverseFind("\\");
135  if (index == -1)
136  return "";
137 
138  return file_path.Left(index);
139  }
140 
141  static int GetRequiredVideoDbDetails(const NPT_String& filter);
142 
143  NPT_Mutex m_CacheMutex;
144 
145  NPT_Mutex m_FileMutex;
147 
148  std::map<std::string, std::pair<bool, unsigned long> > m_UpdateIDs;
149  bool m_scanning;
150 
151  Logger m_logger;
152 
153  public:
154  // class members
155  static NPT_UInt32 m_MaxReturnedItems;
156 };
157 
158 } /* namespace UPNP */
159 
Definition: NptHttp.h:566
The PLT_ProtocolInfo class holds information about the protocol info of a given UPnP Media Item resou...
Definition: PltProtocolInfo.h:68
NPT_Result SetupIcons() override
Default implementation for registering device icon resources.
Definition: UPnPServer.cpp:221
NPT_Result OnUpdateObject(PLT_ActionReference &action, const char *object_id, NPT_Map< NPT_String, NPT_String > &current_vals, NPT_Map< NPT_String, NPT_String > &new_vals, const PLT_HttpRequestContext &context) override
Definition: UPnPServer.cpp:1289
Represents a list of files.
Definition: FileItem.h:702
Definition: NptHttp.h:315
Definition: NptHttp.h:126
Definition: IAnnouncer.h:70
Definition: Build.py:1
Definition: NptHttp.h:282
Definition: PltMediaConnect.h:90
UPnP Service.
Definition: PltService.h:67
Definition: NptThreads.h:76
Definition: Variant.h:31
NPT_Result OnBrowseMetadata(PLT_ActionReference &action, const char *object_id, const char *filter, NPT_UInt32 starting_index, NPT_UInt32 requested_count, const char *sort_criteria, const PLT_HttpRequestContext &context) override
Definition: UPnPServer.cpp:635
Definition: PltMediaItem.h:187
Definition: UPnP.cpp:118
NPT_Result ProcessGetSCPD(PLT_Service *service, NPT_HttpRequest &request, const NPT_HttpRequestContext &context, NPT_HttpResponse &response) override
This method is called when a control point is requesting a service SCPD.
Definition: UPnPServer.cpp:95
NPT_Result SetupServices() override
Required method for setting up UPnP services of device host (and any embedded).
Definition: UPnPServer.cpp:107
NPT_String ToString(bool with_fragment=true) const override
Return the string representation of the URL.
Definition: NptHttp.cpp:89
The PLT_HttpRequestContext class holds information about the request sent, the local & remote ip addr...
Definition: PltHttp.h:111
Definition: NptList.h:63
Definition: UPnPServer.h:31
The PLT_MediaObject class is any data entity that can be returned by a ContentDirectory Service from ...
Definition: PltMediaItem.h:217
Definition: PltMediaConnect.h:48
Definition: NptStrings.h:57
Definition: NptList.h:54
Represents a file on a share.
Definition: FileItem.h:102
Definition: ThumbLoader.h:17