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\n"));
79 pModuleInfo->blkRcvd = 0;
83 READ_UINT8( mpModuleInfoDesc, pModuleInfo->version );
86 pModuleInfo->compressed = FALSE;
87 pModuleInfo->originalSize = pModuleInfo->moduleSize;
89 if ( pModuleInfo->crslMagic == OC_MAGIC )
92 SET_POS_REL( mpModuleInfoDesc, 1 );
96 READ_UINT32( mpModuleInfoDesc, pModuleInfo->u.mhgp.moduleTimeout );
99 READ_UINT32( mpModuleInfoDesc, pModuleInfo->u.mhgp.blockTimeout );
102 READ_UINT32( mpModuleInfoDesc, pModuleInfo->u.mhgp.minBlockTime );
106 READ_UINT8( mpModuleInfoDesc, tapsCount );
109 dsmDP2((
"DATA ERROR: Module info tapsCount zero\n"));
117 READ_UINT16( mpModuleInfoDesc, pModuleInfo->u.mhgp.tapBiopId );
121 READ_UINT16( mpModuleInfoDesc, ui16 );
122 if (ui16 != BIOP_OBJECT_USE)
124 dsmDP2((
"DATA ERROR: Module info 1st tapUse (!= BIOP_OBJECT_USE) = %u\n", ui16));
130 READ_UINT16( mpModuleInfoDesc, pModuleInfo->associationTag );
133 READ_UINT8( mpModuleInfoDesc, ui8 );
136 dsmDP2((
"DATA ERROR: Module info tap selectorLength (!= 0) = %u\n", ui8));
144 while (--tapsCount > 0)
147 SET_POS_REL( mpModuleInfoDesc, 6 );
149 READ_UINT8( mpModuleInfoDesc, ui8 );
151 SET_POS_REL( mpModuleInfoDesc, (S32BIT)ui8 );
156 READ_UINT8( mpModuleInfoDesc, infoLength );
162 GET_POS( mpModuleInfoDesc, currPos );
163 endPos = currPos + infoLength;
164 while (currPos < endPos)
169 READ_UINT8( mpModuleInfoDesc, descriptorTag );
172 READ_UINT8( mpModuleInfoDesc, descriptorLength );
174 switch (descriptorTag)
176 case DESCRIPTOR_COMP_MODULE_TAG:
181 READ_UINT8( mpModuleInfoDesc, ui8 );
182 if ( (ui8 & 0x0f) != 0x08 )
184 dsmDP2((
"DATA ERROR: Module info compressionMethod (!= 0x08) = %u\n", ui8));
185 SET_POS_REL( mpModuleInfoDesc, 4 );
190 pModuleInfo->compressed = TRUE;
192 READ_UINT32( mpModuleInfoDesc, pModuleInfo->originalSize );
197 case DESCRIPTOR_MHP_CACHING_PRIORITY:
199 READ_UINT8( mpModuleInfoDesc, pModuleInfo->u.mhgp.priority );
200 READ_UINT8( mpModuleInfoDesc, pModuleInfo->u.mhgp.transparency );
204 dsmDP2((
"INFO: Module - Unknown descriptor tag: %x\n", descriptorTag));
206 SET_POS_REL( mpModuleInfoDesc, (S32BIT)descriptorLength );
209 GET_POS( mpModuleInfoDesc, currPos );
217 else if ( pModuleInfo->crslMagic == UC_MAGIC )
220 READ_UINT8( mpModuleInfoDesc, infoLength );
223 GET_POS( mpModuleInfoDesc, currPos );
224 endPos = currPos + infoLength;
225 while (currPos < endPos)
227 READ_UINT8( mpModuleInfoDesc, descriptorTag );
228 READ_UINT8( mpModuleInfoDesc, descriptorLength );
229 switch (descriptorTag)
231 case DESCRIPTOR_TYPE_TAG:
233 pModuleInfo->u.ssup.typeLen = descriptorLength;
234 pModuleInfo->u.ssup.mpType = mpModuleInfoDesc;
237 case DESCRIPTOR_NAME_TAG:
239 pModuleInfo->u.ssup.nameLen = descriptorLength;
240 pModuleInfo->u.ssup.mpName = mpModuleInfoDesc;
243 case DESCRIPTOR_INFO_TAG:
245 if (descriptorLength > 3)
247 READ_UINT24( mpModuleInfoDesc, pModuleInfo->u.ssup.infoLang );
248 pModuleInfo->u.ssup.infoLen = descriptorLength - 3;
249 pModuleInfo->u.ssup.mpInfo = mpModuleInfoDesc;
253 case DESCRIPTOR_MODULE_LINK_TAG:
255 READ_UINT8( mpModuleInfoDesc, ui8 );
256 READ_UINT16( mpModuleInfoDesc, pModuleInfo->u.ssup.nextModuleId );
257 pModuleInfo->u.ssup.positionType = ui8 + 1;
258 DBG3(DD_DC,
"mod=%x module_link pos=%d, nxt=%x",
259 pModuleInfo->moduleId, ui8, pModuleInfo->u.ssup.nextModuleId )
262 case DESCRIPTOR_CRC32_TAG:
264 READ_UINT32( mpModuleInfoDesc, pModuleInfo->u.ssup.moduleCrc );
267 case DESCRIPTOR_LOCATION_TAG:
269 READ_UINT8( mpModuleInfoDesc, ui8 );
270 pModuleInfo->associationTag = ui8;
273 case DESCRIPTOR_EST_DOWNLOAD_TIME_TAG:
277 case DESCRIPTOR_COMP_MODULE_TAG:
279 READ_UINT8( mpModuleInfoDesc, ui8 );
280 if ( (ui8 & 0x0f) != 0x08 )
282 dsmDP2((
"DATA ERROR: Module info compressionMethod (!= 0x08) = %u\n", ui8));
287 pModuleInfo->compressed = TRUE;
289 READ_UINT32( mpModuleInfoDesc, pModuleInfo->originalSize );
293 case DESCRIPTOR_SSU_MODULE_TYPE_TAG:
295 READ_UINT8( mpModuleInfoDesc, pModuleInfo->u.ssup.moduleType );
300 DBG2(DD_DC,
"Module - Unknown descriptor tag: %x", descriptorTag);
304 SET_POS_ABS( mpModuleInfoDesc, currPos + 2 + descriptorLength );
305 GET_POS( mpModuleInfoDesc, currPos );
312 DBG2(DD_DC,
"Module Info magic unknown =%x",pModuleInfo->crslMagic)
316 MEMPTR_CLOSE( mpModuleInfoDesc );
317 DEBUG_CHK( valid == TRUE,
318 dsmDP1(("ERROR: getpModuleInfo failure (invalid)\n")));