49 MemPtr mpModuleInfoDesc;
52 MemPos currPos, endPos;
54 U8BIT descriptorLength;
58 dsmAssert((mpModuleInfoDescStart != NULL));
59 dsmAssert((pModuleInfo != NULL));
62 MEMPTR_OPEN( mpModuleInfoDescStart, mpModuleInfoDesc );
65 READ_UINT16( mpModuleInfoDesc, pModuleInfo->moduleId );
68 READ_UINT32( mpModuleInfoDesc, pModuleInfo->moduleSize );
69 if ( pModuleInfo->moduleSize == 0 )
72 dsmDP2((
"DATA ERROR: Zero module size; moduleId=%u\n", pModuleInfo->moduleId));
79 pModuleInfo->blkRcvd = 0;
83 READ_UINT8( mpModuleInfoDesc, pModuleInfo->version );
86 pModuleInfo->zipped = FALSE;
87 pModuleInfo->compressed = FALSE;
88 pModuleInfo->originalSize = pModuleInfo->moduleSize;
90 if ( pModuleInfo->crslMagic == OC_MAGIC )
93 SET_POS_REL( mpModuleInfoDesc, 1 );
97 READ_UINT32( mpModuleInfoDesc, pModuleInfo->u.mhgp.moduleTimeout );
100 READ_UINT32( mpModuleInfoDesc, pModuleInfo->u.mhgp.blockTimeout );
103 READ_UINT32( mpModuleInfoDesc, pModuleInfo->u.mhgp.minBlockTime );
107 READ_UINT8( mpModuleInfoDesc, tapsCount );
110 dsmDP2((
"DATA ERROR: Module info tapsCount zero\n"));
118 READ_UINT16( mpModuleInfoDesc, pModuleInfo->u.mhgp.tapBiopId );
122 READ_UINT16( mpModuleInfoDesc, ui16 );
123 if (ui16 != BIOP_OBJECT_USE)
125 dsmDP2((
"DATA ERROR: Module info 1st tapUse (!= BIOP_OBJECT_USE) = %u\n", ui16));
131 READ_UINT16( mpModuleInfoDesc, pModuleInfo->associationTag );
134 READ_UINT8( mpModuleInfoDesc, ui8 );
144 dsmDP2((
"DATA ERROR: Module info tap selectorLength (!= 0) = %u\n", ui8));
146 SET_POS_REL( mpModuleInfoDesc, (S32BIT)ui8 );
151 while (--tapsCount > 0)
154 SET_POS_REL( mpModuleInfoDesc, 6 );
156 READ_UINT8( mpModuleInfoDesc, ui8 );
158 SET_POS_REL( mpModuleInfoDesc, (S32BIT)ui8 );
163 READ_UINT8( mpModuleInfoDesc, infoLength );
169 GET_POS( mpModuleInfoDesc, currPos );
170 endPos = currPos + infoLength;
171 while (currPos < endPos)
176 READ_UINT8( mpModuleInfoDesc, descriptorTag );
179 READ_UINT8( mpModuleInfoDesc, descriptorLength );
181 switch (descriptorTag)
183 case DESCRIPTOR_COMP_MODULE_TAG:
188 READ_UINT8( mpModuleInfoDesc, ui8 );
189 if ( (ui8 & 0x0f) != 0x08 )
191 ERRPRINT(
"DATA: Module info compressionMethod (!= 0x08) = %u\n", ui8)
192 SET_POS_REL( mpModuleInfoDesc, 4 );
197 pModuleInfo->compressed = TRUE;
199 READ_UINT32( mpModuleInfoDesc, pModuleInfo->originalSize );
200 dsmDP3((
"Compressed Module; original size = %u\n", pModuleInfo->originalSize));
205 case DESCRIPTOR_MHP_CACHING_PRIORITY:
207 READ_UINT8( mpModuleInfoDesc, pModuleInfo->u.mhgp.priority );
208 READ_UINT8( mpModuleInfoDesc, pModuleInfo->u.mhgp.transparency );
209 dsmDP3((
"DESC MHP CACHE %u, %u", pModuleInfo->u.mhgp.priority, pModuleInfo->u.mhgp.transparency));
213 ERRPRINT(
" Module - Unknown descriptor tag: %x\n", descriptorTag)
215 SET_POS_REL( mpModuleInfoDesc, (S32BIT)descriptorLength );
218 GET_POS( mpModuleInfoDesc, currPos );
226 else if ( pModuleInfo->crslMagic == UC_MAGIC )
229 READ_UINT8( mpModuleInfoDesc, infoLength );
232 GET_POS( mpModuleInfoDesc, currPos );
233 endPos = currPos + infoLength;
234 while (currPos < endPos)
236 READ_UINT8( mpModuleInfoDesc, descriptorTag );
237 READ_UINT8( mpModuleInfoDesc, descriptorLength );
238 switch (descriptorTag)
240 case DESCRIPTOR_TYPE_TAG:
242 pModuleInfo->u.ssup.typeLen = descriptorLength;
243 pModuleInfo->u.ssup.mpType = mpModuleInfoDesc;
246 case DESCRIPTOR_NAME_TAG:
248 pModuleInfo->u.ssup.nameLen = descriptorLength;
249 pModuleInfo->u.ssup.mpName = mpModuleInfoDesc;
252 case DESCRIPTOR_INFO_TAG:
254 if (descriptorLength > 3)
256 READ_UINT24( mpModuleInfoDesc, pModuleInfo->u.ssup.infoLang );
257 pModuleInfo->u.ssup.infoLen = descriptorLength - 3;
258 pModuleInfo->u.ssup.mpInfo = mpModuleInfoDesc;
262 case DESCRIPTOR_MODULE_LINK_TAG:
264 READ_UINT8( mpModuleInfoDesc, ui8 );
265 READ_UINT16( mpModuleInfoDesc, pModuleInfo->u.ssup.nextModuleId );
266 pModuleInfo->u.ssup.positionType = ui8 + 1;
267 DBG3(DD_DC,
"mod=%x module_link pos=%d, nxt=%x",
268 pModuleInfo->moduleId, ui8, pModuleInfo->u.ssup.nextModuleId )
271 case DESCRIPTOR_CRC32_TAG:
273 READ_UINT32( mpModuleInfoDesc, pModuleInfo->u.ssup.moduleCrc );
276 case DESCRIPTOR_LOCATION_TAG:
278 READ_UINT8( mpModuleInfoDesc, ui8 );
279 pModuleInfo->associationTag = ui8;
282 case DESCRIPTOR_EST_DOWNLOAD_TIME_TAG:
286 case DESCRIPTOR_COMP_MODULE_TAG:
288 READ_UINT8( mpModuleInfoDesc, ui8 );
289 if ( (ui8 & 0x0f) != 0x08 )
291 dsmDP2((
"DATA ERROR: Module info compressionMethod (!= 0x08) = %u\n", ui8));
296 pModuleInfo->compressed = TRUE;
298 READ_UINT32( mpModuleInfoDesc, pModuleInfo->originalSize );
302 case DESCRIPTOR_SSU_MODULE_TYPE_TAG:
304 READ_UINT8( mpModuleInfoDesc, pModuleInfo->u.ssup.moduleType );
309 DBG2(DD_DC,
"Module - Unknown descriptor tag: %x", descriptorTag);
313 SET_POS_ABS( mpModuleInfoDesc, currPos + 2 + descriptorLength );
314 GET_POS( mpModuleInfoDesc, currPos );
321 ERRPRINT(
"Module Info magic unknown =%x\n",pModuleInfo->crslMagic)
325 MEMPTR_CLOSE( mpModuleInfoDesc );
326 DEBUG_CHK( valid == TRUE,
327 dsmDP1(("ERROR: getpModuleInfo failure (invalid)\n")));