void ossimNitfFileHeaderV2_1::parseStream(std::istream& in) { clearFields(); // identification and origination group in.read(theFileTypeVersion, 9); theHeaderSize += 9; in.read(theComplexityLevel, 2); theHeaderSize += 2; in.read(theSystemType, 4); theHeaderSize += 4; in.read(theOriginatingStationId, 10); theHeaderSize += 10; in.read(theDateTime, 14); theHeaderSize += 14; in.read(theFileTitle, 80); theHeaderSize += 80; // read security group in.read(theSecurityClassification, 1); theHeaderSize ++; in.read(theSecurityClassificationSys, 2); theHeaderSize += 2; in.read(theCodewords, 11); theHeaderSize += 11; in.read(theControlAndHandling, 2); theHeaderSize += 2; in.read(theReleasingInstructions, 20); theHeaderSize += 20; in.read(theDeclassificationType, 2); theHeaderSize += 2; in.read(theDeclassificationDate, 8); theHeaderSize += 8; in.read(theDeclassificationExemption, 4); theHeaderSize += 4; in.read(theDowngrade, 1); theHeaderSize ++; in.read(theDowngradingDate, 8); theHeaderSize += 8; in.read(theClassificationText, 43); theHeaderSize += 43; in.read(theClassificationAuthorityType, 1); theHeaderSize ++; in.read(theClassificationAuthority, 40); theHeaderSize += 40; in.read(theClassificationReason, 1); theHeaderSize ++; in.read(theSecuritySourceDate, 8); theHeaderSize += 8; in.read(theSecurityControlNumber, 15); theHeaderSize += 15; in.read(theCopyNumber, 5); theHeaderSize += 5; in.read(theNumberOfCopies, 5); theHeaderSize += 5; in.read(theEncryption, 1); theHeaderSize ++; in.read((char*)theFileBackgroundColor, 3); theHeaderSize += 3; in.read(theOriginatorsName, 24); theHeaderSize += 24; in.read(theOriginatorsPhone, 18); theHeaderSize += 18; in.read(theFileLength, 12); theHeaderSize += 12; in.read(theHeaderLength, 6); theHeaderSize += 6; // image description group in.read(theNumberOfImageInfoRecords, 3); theHeaderSize += 3; readImageInfoRecords(in); // symbol description group in.read(theNumberOfGraphicInfoRecords, 3); theHeaderSize += 3; readGraphicInfoRecords(in); in.read(theReservedForFutureUse1, 3); theHeaderSize += 3; // text file information group in.read(theNumberOfTextFileInfoRecords, 3); theHeaderSize += 3; readTextFileInfoRecords(in); // Data extension group in.read(theNumberOfDataExtSegInfoRecords, 3); theHeaderSize += 3; readDataExtSegInfoRecords(in); // Reserve Extension Segment group in.read(theNumberOfResExtSegInfoRecords, 3); theHeaderSize += 3; readResExtSegInfoRecords(in); in.read(theUserDefinedHeaderDataLength, 5); theHeaderSize += 5; // only get the header overflow if there even exists // user defined data. std::streampos userDefinedHeaderLength = ossimString(theUserDefinedHeaderDataLength).toInt32(); ossimNitfTagInformation headerTag; std::streampos start = in.tellg(); std::streampos current = in.tellg(); if(userDefinedHeaderLength > 0) { in.read(theUserDefinedHeaderOverflow, 3); while((current - start) < userDefinedHeaderLength) { headerTag.parseStream(in); theTagList.push_back(headerTag); // in.ignore(headerTag.getTagLength()); // headerTag.clearFields(); current = in.tellg(); } in.seekg(start + userDefinedHeaderLength); theHeaderSize += (userDefinedHeaderLength); } in.read(theExtendedHeaderDataLength, 5); theHeaderSize += 5; std::streampos extendedHeaderDataLength = ossimString(theExtendedHeaderDataLength).toInt32(); start = in.tellg(); current = in.tellg(); // for now let's just ignore it if(extendedHeaderDataLength > 0) { in.read(theExtendedHeaderDataOverflow, 3); while((current - start) < extendedHeaderDataLength) { headerTag.parseStream(in); theTagList.push_back(headerTag); // in.ignore(headerTag.getTagLength()); // headerTag.clearFields(); current = in.tellg(); } theHeaderSize += extendedHeaderDataLength; in.seekg(start + extendedHeaderDataLength); } // this need to be re-thought initializeAllOffsets(); }
void ossimNitfFileHeaderV2_0::parseStream(std::istream &in) { if(traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "ossimNitfFileHeaderV2_0::parseStream: entered ......." << std::endl; } clearFields(); // identification and origination group in.read(theFileTypeVersion, 9); theHeaderSize+=9; in.read(theComplexityLevel, 2); theHeaderSize+=2; in.read(theSystemType, 4); theHeaderSize+=4; in.read(theOriginatingStationId, 10); theHeaderSize+=10; in.read(theDateTime, 14); theHeaderSize+=14; in.read(theFileTitle, 80); theHeaderSize+=80; // read security group in.read(theSecurityClassification, 1); theHeaderSize++; in.read(theCodewords, 40); theHeaderSize+=40; in.read(theControlAndHandling, 40); theHeaderSize+=40; in.read(theReleasingInstructions, 40); theHeaderSize+=40; in.read(theClassificationAuthority, 20); theHeaderSize+=20; in.read(theSecurityControlNumber, 20); theHeaderSize+=20; in.read(theSecurityDowngrade, 6); theHeaderSize+=6; if(ossimString(theSecurityDowngrade) == "999998") { in.read(theDowngradingEvent, 40); theHeaderSize+=40; } in.read(theCopyNumber, 5); theHeaderSize+=5; in.read(theNumberOfCopies, 5); theHeaderSize+=5; in.read(theEncryption, 1); theHeaderSize++; in.read(theOriginatorsName, 27); theHeaderSize+=27; in.read(theOriginatorsPhone, 18); theHeaderSize+=18; in.read(theFileLength, 12); theHeaderSize+=12; in.read(theHeaderLength, 6); theHeaderSize+=6; // image description group in.read(theNumberOfImageInfoRecords, 3); theHeaderSize+=3; readImageInfoRecords(in); // symbol description group in.read(theNumberOfSymbolInfoRecords, 3); theHeaderSize+=3; readSymbolInfoRecords(in); // label description group in.read(theNumberOfLabelInfoRecords, 3); theHeaderSize+=3; readLabelInfoRecords(in); // text file information group in.read(theNumberOfTextFileInfoRecords, 3); theHeaderSize+=3; readTextFileInfoRecords(in); // Data extension group in.read(theNumberOfDataExtSegInfoRecords, 3); theHeaderSize+=3; readDataExtSegInfoRecords(in); // Reserve Extension Segment group in.read(theNumberOfResExtSegInfoRecords, 3); theHeaderSize+=3; readResExtSegInfoRecords(in); in.read(theUserDefinedHeaderDataLength, 5); theHeaderSize+=5; theTagList.clear(); // only get the header overflow if there even exists // user defined data. ossim_int32 userDefinedHeaderLength = ossimString(theUserDefinedHeaderDataLength).toInt32(); ossimNitfTagInformation headerTag; std::streampos start = in.tellg(); std::streampos current = in.tellg(); theHeaderSize+=userDefinedHeaderLength; if(userDefinedHeaderLength > 0) { in.read(theUserDefinedHeaderOverflow, 3); while((current - start) < userDefinedHeaderLength) { headerTag.parseStream(in); theTagList.push_back(headerTag); // in.ignore(headerTag.getTagLength()); // headerTag.clearFields(); //--- // We will check the stream here as there have been instances of // rpf's with bad stream offsets. //--- if (!in) { std::string e = "ossimNitfFileHeaderV2_0::parseStream stream error!"; throw ossimException(e); } current = in.tellg(); } } in.read(theExtendedHeaderDataLength, 5); theHeaderSize+=5; ossim_int32 extendedHeaderDataLength = ossimString(theExtendedHeaderDataLength).toInt32(); theHeaderSize+=extendedHeaderDataLength; start = in.tellg(); current = in.tellg(); // for now let's just ignore it if(extendedHeaderDataLength > 0) { in.read(theExtendedHeaderOverflow, 3); while((current - start) < extendedHeaderDataLength) { headerTag.parseStream(in); theTagList.push_back(headerTag); in.ignore(headerTag.getTagLength()); headerTag.clearFields(); current = in.tellg(); } } // this need to be re-thought initializeAllOffsets(); if(traceDebug()) { ossimNitfFileHeader::print( ossimNotify(ossimNotifyLevel_DEBUG) ); } if(traceDebug()) { ossimNotify(ossimNotifyLevel_DEBUG) << "ossimNitfFileHeaderV2_0::parseStream: Leaving......." << std::endl; } // initializeDisplayLevels(in); }