5G-MAG Reference Tools - MBMS Middleware
CacheItems.h
Go to the documentation of this file.
1 // 5G-MAG Reference Tools
2 // MBMS Middleware Process
3 //
4 // Copyright (C) 2021 Klaus Kühnhammer (Österreichische Rundfunksender GmbH & Co KG)
5 //
6 // Licensed under the License terms and conditions for use, reproduction, and
7 // distribution of 5G-MAG software (the “License”). You may not use this file
8 // except in compliance with the License. You may obtain a copy of the License at
9 // https://www.5g-mag.com/reference-tools. Unless required by applicable law or
10 // agreed to in writing, software distributed under the License is distributed on
11 // an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12 // or implied.
13 //
14 // See the License for the specific language governing permissions and limitations
15 // under the License.
16 //
17 
18 #pragma once
19 
20 #include <libconfig.h++>
21 #include <boost/asio.hpp>
22 #include "seamless/Segment.h"
23 #include "ItemSource.h"
24 
25 namespace MBMS_RT {
26  class CacheItem {
27  public:
28  CacheItem(const std::string& content_location, unsigned long received_at)
31 
32  virtual ~CacheItem() = default;
33 
34  enum class ItemType {
35  File,
36  Segment,
37  Playlist,
38  Manifest
39  };
40  virtual ItemType item_type() const = 0;
41  virtual char* buffer() const = 0;
42  virtual uint32_t content_length() const = 0;
43  virtual ItemSource item_source() const = 0;
44 
45  std::string item_source_as_string() const {
46  switch (item_source()) {
48  return "5G-BC";
49  case ItemSource::CDN:
50  return "CDN";
52  return "GEN";
54  default:
55  return "-";
56  }
57  }
58 
59  std::string content_location() const { return _content_location; };
60  virtual unsigned long received_at() const { return _received_at; };
61 
62  private:
63  std::string _content_location;
64  unsigned long _received_at;
65  };
66 
67  class CachedFile : public CacheItem {
68  public:
69  CachedFile(const std::string& content_location, unsigned long received_at,
70  std::shared_ptr<LibFlute::File> file)
72  , _file( file )
73  {}
74  virtual ~CachedFile() = default;
75 
76  virtual ItemType item_type() const { return ItemType::File; };
77  virtual char* buffer() const { return _file->buffer(); };
78  virtual uint32_t content_length() const { return _file->length(); };
79  virtual ItemSource item_source() const { return ItemSource::Broadcast; };
80 
81  private:
82  std::shared_ptr<LibFlute::File> _file;
83  };
84  class CachedSegment : public CacheItem {
85  public:
86  CachedSegment(const std::string& content_location, unsigned long received_at,
87  std::shared_ptr<MBMS_RT::Segment> segment)
89  , _segment( segment )
90  {}
91  virtual ~CachedSegment() = default;
92 
93  virtual ItemType item_type() const { return ItemType::Segment; };
94  virtual char* buffer() const { return _segment->buffer(); };
95  virtual uint32_t content_length() const { return _segment->content_length(); };
96  virtual ItemSource item_source() const { return _segment->data_source(); };
97 
98  virtual unsigned long received_at() const { return _segment->received_at(); };
99 
100  private:
101  std::shared_ptr<Segment> _segment;
102  };
103 
104  class CachedPlaylist : public CacheItem {
105  public:
106  CachedPlaylist(const std::string& content_location, unsigned long received_at,
107  std::function<const std::string&(void)> playlist_cb)
109  , _playlist_cb( playlist_cb )
110  {}
111  virtual ~CachedPlaylist() = default;
112 
113  virtual ItemType item_type() const { return ItemType::Playlist; };
114  virtual char* buffer() const { return (char*)_playlist_cb().c_str(); };
115  virtual uint32_t content_length() const { return _playlist_cb().size(); };
116  virtual ItemSource item_source() const { return ItemSource::Generated; };
117  virtual unsigned long received_at() const { return time(nullptr); };
118 
119  private:
120  std::function<const std::string&(void)> _playlist_cb;
121  };
122 
123  class CachedManifest : public CacheItem {
124  public:
125  CachedManifest(const std::string& content_location, unsigned long received_at,
126  std::function<const std::string&(void)> playlist_cb)
128  , _playlist_cb( playlist_cb )
129  {}
130  virtual ~CachedManifest() = default;
131 
132  virtual ItemType item_type() const { return ItemType::Manifest; };
133  virtual char* buffer() const { return (char*)_playlist_cb().c_str(); };
134  virtual uint32_t content_length() const { return _playlist_cb().size(); };
135  virtual ItemSource item_source() const { return ItemSource::Generated; };
136  virtual unsigned long received_at() const { return time(nullptr); };
137 
138  private:
139  std::function<const std::string&(void)> _playlist_cb;
140  };
141 }
std::string _content_location
Definition: CacheItems.h:60
unsigned long _received_at
Definition: CacheItems.h:64
CacheItem(const std::string &content_location, unsigned long received_at)
Definition: CacheItems.h:28
virtual char * buffer() const =0
std::string item_source_as_string() const
Definition: CacheItems.h:45
std::string content_location() const
Definition: CacheItems.h:59
virtual unsigned long received_at() const
Definition: CacheItems.h:60
virtual ItemSource item_source() const =0
virtual uint32_t content_length() const =0
virtual ItemType item_type() const =0
virtual ~CacheItem()=default
virtual ItemType item_type() const
Definition: CacheItems.h:76
virtual ~CachedFile()=default
std::shared_ptr< LibFlute::File > _file
Definition: CacheItems.h:79
virtual char * buffer() const
Definition: CacheItems.h:77
virtual uint32_t content_length() const
Definition: CacheItems.h:78
CachedFile(const std::string &content_location, unsigned long received_at, std::shared_ptr< LibFlute::File > file)
Definition: CacheItems.h:69
virtual ItemSource item_source() const
Definition: CacheItems.h:79
virtual uint32_t content_length() const
Definition: CacheItems.h:134
CachedManifest(const std::string &content_location, unsigned long received_at, std::function< const std::string &(void)> playlist_cb)
Definition: CacheItems.h:125
std::function< const std::string &(void)> _playlist_cb
Definition: CacheItems.h:136
virtual ItemType item_type() const
Definition: CacheItems.h:132
virtual ItemSource item_source() const
Definition: CacheItems.h:135
virtual ~CachedManifest()=default
virtual char * buffer() const
Definition: CacheItems.h:133
virtual unsigned long received_at() const
Definition: CacheItems.h:136
virtual ItemType item_type() const
Definition: CacheItems.h:113
virtual char * buffer() const
Definition: CacheItems.h:114
virtual uint32_t content_length() const
Definition: CacheItems.h:115
CachedPlaylist(const std::string &content_location, unsigned long received_at, std::function< const std::string &(void)> playlist_cb)
Definition: CacheItems.h:106
std::function< const std::string &(void)> _playlist_cb
Definition: CacheItems.h:117
virtual ItemSource item_source() const
Definition: CacheItems.h:116
virtual unsigned long received_at() const
Definition: CacheItems.h:117
virtual ~CachedPlaylist()=default
std::shared_ptr< Segment > _segment
Definition: CacheItems.h:98
virtual uint32_t content_length() const
Definition: CacheItems.h:95
virtual unsigned long received_at() const
Definition: CacheItems.h:98
virtual ItemSource item_source() const
Definition: CacheItems.h:96
virtual ItemType item_type() const
Definition: CacheItems.h:93
CachedSegment(const std::string &content_location, unsigned long received_at, std::shared_ptr< MBMS_RT::Segment > segment)
Definition: CacheItems.h:86
virtual char * buffer() const
Definition: CacheItems.h:94
virtual ~CachedSegment()=default