21 unsigned short streamTag)
22 : m_carouselId(dii->m_downloadId), m_moduleId(
info->m_moduleId),
23 m_streamId(streamTag), m_version(
info->m_moduleVersion),
24 m_moduleSize(
info->m_moduleSize),
26 m_descriptorData(
info->m_modInfo.m_descriptorData)
30 m_blocks.resize(num_blocks,
nullptr);
45 const unsigned char *data)
49 LOG(VB_DSMCC, LOG_WARNING, QString(
"[dsmcc] Module %1 my version %2 != %3")
59 LOG(VB_DSMCC, LOG_WARNING, QString(
"[dsmcc] Module %1 block number %2 "
71 s += block ?
'+' :
'X';
73 LOG(VB_DSMCC, LOG_INFO, QString(
"[dsmcc] Module %1 block %2 dup: %3")
84 LOG(VB_DSMCC, LOG_INFO, QString(
"[dsmcc] Module %1 block %2/%3 bytes %4/%5")
92 LOG(VB_DSMCC, LOG_INFO,
93 QString(
"[dsmcc] Reconstructing module %1 from blocks")
97 std::vector<uint8_t> tmp_data;
100 }
catch (
const std::bad_alloc& e) {
105 if (block ==
nullptr)
107 LOG(VB_DSMCC, LOG_INFO,
108 QString(
"[dsmcc] Null data found, aborting reconstruction"));
111 uint size = block->size();
112 tmp_data.insert(tmp_data.end(), block->data(), block->data() + size);
121 LOG(VB_DSMCC, LOG_INFO, QString(
"[dsmcc] uncompressing: "
122 "compressed size %1, final size %2")
125 std::vector<uint8_t> uncompressed;
126 uncompressed.resize(dataLen);
127 int ret = uncompress(uncompressed.data(), &dataLen, tmp_data.data(),
m_moduleSize);
130 LOG(VB_DSMCC, LOG_ERR,
"[dsmcc] compression error, skipping");
134 tmp_data = uncompressed;
145 for (
const auto & cache :
m_Cache)
151 unsigned short streamTag)
169 LOG(VB_DSMCC, LOG_DEBUG, QString(
"[dsmcc] Already Know Module %1")
170 .arg(
info->m_moduleId));
180 LOG(VB_DSMCC, LOG_ERR,
181 QString(
"[dsmcc] Module %1 size has changed (%2 to %3) "
182 "but version has not!!")
183 .arg(
info->m_moduleId)
184 .arg(
info->m_moduleSize)
188 LOG(VB_DSMCC, LOG_INFO, QString(
"[dsmcc] Updated Module %1")
189 .arg(
info->m_moduleId));
201 LOG(VB_DSMCC, LOG_INFO, QString(
"[dsmcc] Saving info for module %1")
206 int tag =
info->m_modInfo.m_tap.m_assocTag;
207 LOG(VB_DSMCC, LOG_DEBUG, QString(
"[dsmcc] Module info tap identifies "
208 "tag %1 with carousel %2")
209 .arg(tag).arg(cachep->CarouselId()));
212 status->
AddTap(tag, cachep->CarouselId());
226 LOG(VB_DSMCC, LOG_DEBUG, QString(
"[dsmcc] Data block on carousel %1").arg(
m_id));
231 if (cachep->CarouselId() ==
m_id &&
235 std::vector<uint8_t> tmp_data = cachep->AddModuleData(ddb, data);
236 if (!tmp_data.empty())
239 unsigned int len = cachep->DataSize();
240 unsigned long curp = 0;
241 LOG(VB_DSMCC, LOG_DEBUG, QString(
"[biop] Module size (uncompressed) = %1").arg(len));
256 LOG(VB_DSMCC, LOG_INFO, QString(
"[dsmcc] Data block module %1 not on carousel %2")
bool Process(DSMCCCacheModuleData *cachep, DSMCCCache *cache, unsigned char *data, unsigned long *curp)
DSMCCCacheModuleData contains information about a module and holds the blocks for a partly completed ...
unsigned short ModuleId(void) const
unsigned long CarouselId(void) const
unsigned long m_moduleSize
Total size.
bool m_completed
True if we have completed this module.
unsigned char Version(void) const
unsigned short m_moduleId
std::vector< QByteArray * > m_blocks
Block table. As blocks are received they are added to this table.
unsigned long m_receivedData
Size received so far.
unsigned long DataSize(void) const
Return the, possibly uncompressed, module size.
DSMCCCacheModuleData(DsmccDii *dii, DsmccModuleInfo *info, unsigned short streamTag)
std::vector< uint8_t > AddModuleData(DsmccDb *ddb, const unsigned char *Data)
Add block to the module and create the module if it's now complete.
ModuleDescriptorData m_descriptorData
unsigned long ModuleSize(void) const
unsigned short m_blockNumber
unsigned short m_moduleId
unsigned char m_moduleVersion
unsigned short m_numberModules
unsigned short m_blockSize
DsmccModuleInfo * m_modules
unsigned long m_downloadId
unsigned short m_moduleId
ObjCarousel * AddTap(unsigned short componentTag, unsigned carouselId)
Add a tap.
unsigned long m_originalSize
std::list< DSMCCCacheModuleData * > m_Cache
void AddModuleData(DsmccDb *ddb, const unsigned char *data)
We have received a block for a module.
void AddModuleInfo(DsmccDii *dii, Dsmcc *status, unsigned short streamTag)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)