df_RecReader Class Reference
[IVD Data format.]

#include <df.h>

Inheritance diagram for df_RecReader:

Inheritance graph
[legend]
Collaboration diagram for df_RecReader:

Collaboration graph
[legend]

List of all members.


Detailed Description

RecReader class is a BlockReader that parse record by record and for each call Proc<record>() method.

Author:
Dejan Volk Lupo, HERMES SoftLab
See also:
<reference>

Definition at line 1455 of file df.h.


Public Member Functions

 df_RecReader (df_BlockProxy *a_blockProxy, const cmn_UUID_t &a_volumeID=cmn_UUID_t(string("")))
 Default constructor.
virtual ~df_RecReader ()
UInt32_t Unpack (const UInt8_t *a_dataBlock_p, UInt32_t a_curBlockID)
UInt32_t Unpack ()
 return type of last read record.
void Abort ()
void Reset (bool a_resetBlockProxy=true, bool a_reparseBlockHdr=false)
bool IsNextRecordRaw () const
UInt32_t GetBlkSize () const
UInt32_t GetCurBlockUsed () const
UInt32_t GetCurBlockPos () const
UInt32_t GetBlockID () const
UInt32_t GetLastKnownGoodBlockID () const
bool IsCurBlockPtrNull ()
UInt32_t GetRecNum () const
UInt32_t GetBlockNum () const
const df_RecCmn_tPositionToRecord (UInt32_t a_recType)
 This function is intended for positioning to the first occurance of a specific record type inside the current block from the current position.
UInt32_t GetPrevRecType () const
virtual void ProcEndOfInput ()
 method ProcEndOfInput() must be called at the end of input when block per block parsing is used (migration, FRI check before wirtten to media.

Static Public Member Functions

static const df_RecCmn_tVerifiedRecCmn (const UInt8_t *a_buffer, UInt32_t &a_curRecNum, UInt32_t a_curBlockType, UInt32_t &a_prevRecType, UInt32_t a_lastGoodBlock)
static bool VerifyRecHeader (const UInt8_t *a_buffer, UInt32_t a_recType, UInt32_t a_recSeqNum, UInt32_t a_recSize)

Protected Member Functions

void SetNewDataBlock (const UInt8_t *a_dataBlock_p, UInt32_t a_curBlockID=0)
bool IsBlkPerBlkUnpacking ()
bool DoesBlockContainNewMigration ()
void SetFindMode ()

Protected Attributes

UInt32_t m_curRecType
UInt32_t m_prevRecType
UInt64_t m_curStreamLeft
 How much stream has to be read?
UInt32_t m_curStreamType
 follow members are used in derived classes.
string m_curStreamName
 UTF-8 name of the current stream.
const cmn_UUID_t m_volumeID
 parsing data of volume
bool m_isVolumeIDRegular
cmn_UUID_t m_currVolID
 set when FRI is read
bool m_ignoreCorruptedMetaData

Private Member Functions

virtual bool HandleDFError (const ivd_DFError &ie)
bool LocateNextFile ()
void GetNextRecord ()
void GetNextRawRecord ()
virtual void ProcBlock (const UInt8_t *a_dataBlock)
virtual void ProcRawBlock (const UInt8_t *a_dataBlock)
virtual void ProcRecFileHdr (const df_RecCmn_t *a_recCmn_p)
virtual void ProcRecFileEnd (const df_RecCmn_t *a_recCmn_p)
virtual void ProcRecBSStart (const df_RecCmn_t *a_recCmn_p)
virtual void ProcRecEmbData (const df_RecCmn_t *a_recCmn_p)
virtual void ProcRecRawData (const UInt8_t *a_block_p)
virtual void ProcRecBSEnd (const df_RecCmn_t *a_recCmn_p)
virtual void ProcRecFRIStart (const df_RecCmn_t *a_recCmn_p)
virtual void ProcRecFRIEnd (const df_RecCmn_t *a_recCmn_p)
virtual void ProcRecFRISpInfo (const df_RecCmn_t *a_recCmn_p)
virtual void PrepareDataStreamUnpacker ()
void FRIStartCheck (const df_RecCmn_t *a_recCmn_p)
void FRIEndCheck (const df_RecCmn_t *a_recCmn_p)

Private Attributes

 log_CLASSID_m
 Macro to add class name member s_className.
UInt32_t m_curBlockPos
UInt32_t m_recNum
auto_ptr< df_BlockProxym_blockProxy
const df_RecCmn_tm_recCmn_p
bool m_findMode
bool m_blkPerBlkUnpacking

Friends

IVD_DF_DECL_d ostream & operator<< (ostream &a_os, const df_RecReader &o)

Constructor & Destructor Documentation

df_RecReader::df_RecReader ( df_BlockProxy a_blockProxy,
const cmn_UUID_t a_volumeID = cmn_UUID_t(string("")) 
)

Default constructor.

Warning:
: a_blockProxy is stored in internal auto_ptr and thus destroyed automatically.

Definition at line 79 of file df_recreader.cpp.

References blk_FRI_c, cmn_GetEnvVariable(), cmn_StrUpperCase(), dbg_LOW, dbg_NORM, df_ignoreCorruptedMetaData_c(), log_DBG_m, log_FUNC_m, m_blockProxy, m_ignoreCorruptedMetaData, m_prevRecType, and rec_ExpectFRIStart_c.

00081     :
00082     m_curRecType(rec_NoRec_c),
00083     m_prevRecType(rec_NoRec_c),
00084     m_curStreamLeft(0),
00085     m_curStreamType(0),
00086     m_volumeID(a_volumeID),
00087     m_isVolumeIDRegular(!m_volumeID.IsNull()),
00088     m_currVolID(cmn_UUID_t(string(""))),
00089     m_ignoreCorruptedMetaData(false),
00090     m_curBlockPos(0),
00091     m_recNum(0),
00092     m_blockProxy(a_blockProxy),
00093     m_recCmn_p(NULL),
00094     m_findMode(false),
00095     m_blkPerBlkUnpacking(false) {
00096 
00097     log_FUNC_m(df_RecReader);
00098 
00099     string verifyPos = cmn_GetEnvVariable(df_ignoreCorruptedMetaData_c);
00100     if (verifyPos.length() > 0) {
00101         log_DBG_m(dbg_LOW, df_ignoreCorruptedMetaData_c << " = " << verifyPos << ".");
00102         cmn_StrUpperCase(verifyPos);
00103 
00104         if (verifyPos.compare("yes") == 0) {
00105             m_ignoreCorruptedMetaData = true;
00106         }
00107         else if (verifyPos.compare("no") == 0) {
00108             m_ignoreCorruptedMetaData = false;
00109         }
00110         else {
00111             log_DBG_m(dbg_LOW,
00112                 df_ignoreCorruptedMetaData_c << " defined but contains unexpected contents.");
00113         }
00114     }
00115 
00116     if (m_blockProxy->IsBlkType(blk_FRI_c)) {
00117         log_DBG_m(dbg_NORM, "FRI Blocks --> Next expected record is FRIS.");
00118         m_prevRecType = rec_ExpectFRIStart_c;
00119     }
00120     log_DBG_m(dbg_NORM,  "df_RecReader obj: " << *this);
00121 }

Here is the call graph for this function:

virtual df_RecReader::~df_RecReader (  )  [inline, virtual]

Definition at line 1468 of file df.h.

01468 {};


Member Function Documentation

UInt32_t df_RecReader::Unpack ( const UInt8_t a_dataBlock_p,
UInt32_t  a_curBlockID 
)

Definition at line 235 of file df_recreader.cpp.

References log_FUNC_A_m, m_blkPerBlkUnpacking, SetNewDataBlock(), and Unpack().

Referenced by i_FSC_i::CheckWithMedVolume(), i_HSM_i::EfficientRecall(), i_FSC_i::FSCRecovery(), i_FSC_i::InsertSplitFromFRIBlock(), and bea_RecallThread::Recall().

00235                                                                                  {
00236     log_FUNC_A_m(Unpack, "id=" << a_curBlockID);
00237     m_blkPerBlkUnpacking = true;
00238     SetNewDataBlock(a_dataBlock_p, a_curBlockID);
00239     return Unpack();
00240 }

Here is the call graph for this function:

Here is the caller graph for this function:

UInt32_t df_RecReader::Unpack (  ) 

return type of last read record.

Used in FSC update. to check rec_FRIEnd_c

Definition at line 243 of file df_recreader.cpp.

References blk_FRI_c, cmn_Num2Str(), df_RecEmbeddedData_t::data, dbg_DETAIL, dbg_LOW, dbg_NORM, df_ST_ALTDATA, df_ST_META, FRIEndCheck(), FRIStartCheck(), GetBlkSize(), GetLastKnownGoodBlockID(), GetNextRecord(), HandleDFError(), ie_DF_INVSTREAMFMT, IsBlkPerBlkUnpacking(), IsCurBlockPtrNull(), LocateNextFile(), log_DBG_m, log_ERR_m, log_FUNC_m, m_blockProxy, m_curRecType, m_curStreamLeft, m_curStreamName, m_curStreamType, m_findMode, m_ignoreCorruptedMetaData, m_prevRecType, m_recCmn_p, m_recNum, ntoh(), PrepareDataStreamUnpacker(), ProcEndOfInput(), ProcRecBSEnd(), ProcRecBSStart(), ProcRecEmbData(), ProcRecFileEnd(), ProcRecFileHdr(), ProcRecFRIEnd(), ProcRecFRISpInfo(), ProcRecFRIStart(), ProcRecRawData(), rec_BSEnd_c, rec_BSStart_c, rec_Data_c, rec_EmbData_c, rec_FileEnd_c, rec_FileHdr_c, rec_FRIEnd_c, rec_FRISpInfo_c, rec_FRIStart_c, rec_NoRec_c, ivd_VarData_t::size, df_RecByteStreamEnd_t::streamSize, df_RecByteStreamEnd_t::streamType, df_RecEmbeddedData_t::streamType, and df_RecCmn_t::type.

Referenced by Unpack().

00243                               {
00244     log_FUNC_m(Unpack);
00245 
00246     // This loop exits by break when the input stream runs out.
00247     while (true) {
00248         try {
00249             if (m_findMode) {
00250                 // In find mode we try to position to the next
00251                 // file header.
00252                 if (!LocateNextFile()) {
00253                     // File not yet found
00254                     if (IsCurBlockPtrNull()) {
00255                         // end of input stream
00256                         // exit while loop
00257                         break;
00258                     }
00259                     else {
00260                         // file header not found yet, but
00261                         // there's more input available
00262                         continue;
00263                     }
00264                 }
00265             }
00266 
00267             GetNextRecord();
00268 
00269             if (m_curRecType == rec_NoRec_c) {
00270                 // NOTE: rec_NoRec_c is the iternal indicator
00271                 //       that the input stream is exhausted.
00272                 if ( ! IsBlkPerBlkUnpacking() ) {
00273                     ProcEndOfInput();
00274                 }
00275                 // exit while loop
00276                 break;
00277             }
00278             else {
00279                 string recType(
00280                     reinterpret_cast<char*>(&(m_curRecType)),
00281                     sizeof(m_curRecType) );
00282                 log_DBG_m(dbg_DETAIL, "RECORD TYPE: " << recType);
00283             }
00284 
00285             if (m_curRecType == rec_FileHdr_c) {
00286                 ProcRecFileHdr(m_recCmn_p);
00287             }
00288             else if (m_curRecType == rec_FileEnd_c) {
00289                 ProcRecFileEnd(m_recCmn_p);
00290             }
00291             else if (m_curRecType == rec_BSStart_c) {
00292                 PrepareDataStreamUnpacker();
00293                 ProcRecBSStart(m_recCmn_p);
00294             }
00295             else if (m_curRecType == rec_EmbData_c) {
00296                 const df_RecEmbeddedData_t *eData_p
00297                     = df_GetSpecificRec<df_RecEmbeddedData_t>(m_recCmn_p);
00298 
00299                 if (m_curStreamType != 0) {
00300                     if (ntoh(eData_p->streamType) != m_curStreamType) {
00301                         log_FUNC_m(Unpack);
00302                         throw ivd_DFError(ie_DF_INVSTREAMFMT,
00303                             GetLastKnownGoodBlockID(),
00304                             "EDta, but not from current stream:"
00305                             " strType=" + cmn_Num2Str(m_curStreamType) +
00306                             ", strName=" + m_curStreamName +
00307                             ", strLeft=" + cmn_Num2Str(m_curStreamLeft));
00308                     }
00309                     UInt32_t embSize = ntoh(eData_p->data.size);
00310                     if (embSize == 0 || embSize > m_curStreamLeft) {
00311                         log_FUNC_m(Unpack);
00312                         throw ivd_DFError(ie_DF_INVSTREAMFMT,
00313                             GetLastKnownGoodBlockID(),
00314                             "EDta - less/more embedded than expected:"
00315                             " embSize=" + cmn_Num2Str(embSize) +
00316                             ", strLeft=" + cmn_Num2Str(m_curStreamLeft));
00317                     }
00318 
00319                     m_curStreamLeft -= embSize;
00320                 }
00321                 ProcRecEmbData(m_recCmn_p);
00322             }
00323             else if (m_curRecType == rec_Data_c) {
00324                 m_curStreamLeft    -= GetBlkSize();
00325                 ProcRecRawData(m_blockProxy->GetData());
00326             }
00327             else if (m_curRecType == rec_BSEnd_c) {
00328                 const df_RecByteStreamEnd_t *bse_p
00329                     = df_GetSpecificRec<df_RecByteStreamEnd_t>(m_recCmn_p);
00330 
00331                 if (m_curStreamType != 0) {
00332                     if (ntoh(bse_p->streamType) != m_curStreamType) {
00333                         log_FUNC_m(Unpack);
00334                         throw ivd_DFError(ie_DF_INVSTREAMFMT,
00335                             GetLastKnownGoodBlockID(),
00336                             string("BSEnd, but not from current stream:"
00337                             " Stream info : "
00338                             " Name=") + m_curStreamName
00339                         + ", got Type=" + cmn_Num2Str(ntoh(bse_p->streamType))
00340                         + ", expected Type=" + cmn_Num2Str(m_curStreamType)
00341                         + ", Left=" + cmn_Num2Str(m_curStreamLeft)
00342                         + ", Size=" + cmn_Num2Str(ntoh(bse_p->streamSize)));
00343                     }
00344                     /* Only BSS and BSE is stored in FRI at alternate data stream.
00345                     But older stream contain ADS data too.
00346                     So m_stremLeft could be as large as whole ADS.
00347                     */
00348                     if (m_curStreamLeft > 0
00349                         && !(   m_curStreamType == df_ST_ALTDATA           // we do not have ADS
00350                             && m_blockProxy->IsBlkType(blk_FRI_c)          // or we do not have a FRI block
00351                             && m_curStreamLeft == ntoh(bse_p->streamSize)  // or no data written
00352                             )
00353                     ) {
00354                         log_FUNC_m(Unpack);
00355                         if ( m_ignoreCorruptedMetaData && (m_curStreamType == df_ST_META)) {
00356                             log_ERR_m( "Incomplete meta data stream ignored. "
00357                                     << " FRI Record SeqNum=" << m_recNum
00358                                     << " this is the bad record. "
00359                                     << "Search around this in ivd_df --FRI --recfull --rechdr output."
00360                                     << " Stream info : Name=" << m_curStreamName
00361                                     << ", Type=" << cmn_Num2Str(m_curStreamType)
00362                                     << ", Left=" << cmn_Num2Str(m_curStreamLeft)
00363                                     << ", Size=" << cmn_Num2Str(ntoh(bse_p->streamSize)));
00364                         }
00365                         else {
00366                             throw ivd_DFError(ie_DF_INVSTREAMFMT,
00367                                 GetLastKnownGoodBlockID(),
00368                                 "BSEnd, but we expect more data."
00369                                 " Stream info : "
00370                                 " Name=" + m_curStreamName +
00371                             + ", Type=" + cmn_Num2Str(m_curStreamType)
00372                             + ", Left=" + cmn_Num2Str(m_curStreamLeft)
00373                             + ", Size=" + cmn_Num2Str(ntoh(bse_p->streamSize)));
00374                         }
00375                     }
00376 
00377                 }
00378                 ProcRecBSEnd(m_recCmn_p);
00379                 m_curStreamLeft   = 0;
00380                 m_curStreamType   = 0;
00381                 m_curStreamName.clear();
00382             }
00383             else if (m_curRecType == rec_FRIStart_c) {
00384                 FRIStartCheck(m_recCmn_p);
00385                 ProcRecFRIStart(m_recCmn_p);
00386             }
00387             else if (m_curRecType == rec_FRIEnd_c) {
00388                 FRIEndCheck(m_recCmn_p);
00389                 ProcRecFRIEnd(m_recCmn_p);
00390             }
00391             else if (m_curRecType == rec_FRISpInfo_c) {
00392                 ProcRecFRISpInfo(m_recCmn_p);
00393             }
00394             else {
00395                 log_FUNC_m(Unpack);
00396                 throw ivd_DFError(
00397                     ie_DF_INVSTREAMFMT,
00398                     GetLastKnownGoodBlockID(),
00399                     "Unknown record type:"
00400                     "strType=" + cmn_Num2Str(m_recCmn_p->type));
00401             }
00402         }
00403         catch(const ivd_DFError& ie) {
00404             if (HandleDFError(ie)) {
00405                 log_DBG_m(dbg_LOW, "DF exception handled. Continue processing data.");
00406                 //continue;
00407             }
00408             else {
00409                 log_DBG_m(dbg_NORM, "DF exception not handled. Re-throwing.");
00410                 throw;
00411             }
00412         }
00413     }// while (true)
00414 
00415     return m_prevRecType;
00416 }

Here is the call graph for this function:

Here is the caller graph for this function:

void df_RecReader::Abort (  ) 

Definition at line 465 of file df_recreader.cpp.

00465                         {
00466 }

void df_RecReader::Reset ( bool  a_resetBlockProxy = true,
bool  a_reparseBlockHdr = false 
)

Definition at line 126 of file df_recreader.cpp.

References log_FUNC_m, m_blockProxy, m_curBlockPos, m_curRecType, m_curStreamLeft, m_curStreamType, m_prevRecType, m_recCmn_p, m_recNum, NULL, and rec_NoRec_c.

Referenced by df_FRIDistiller::HandleDFError(), df_FRIDistiller::ProcRecRawData(), and df_Filter::Reset().

00126                                                                        {
00127 
00128     log_FUNC_m(Reset);
00129 
00130     m_recCmn_p = NULL,
00131     m_curRecType = rec_NoRec_c,
00132     m_prevRecType = rec_NoRec_c,
00133     m_curBlockPos = sizeof(df_BlockHeader_t),
00134     m_recNum = 0,
00135     m_curStreamLeft = 0,
00136     m_curStreamType = 0;
00137 
00138     if (a_resetBlockProxy) {
00139         m_blockProxy->Reset();
00140         if (a_reparseBlockHdr) {
00141             m_blockProxy->ParseBlockHeader();
00142         }
00143     }
00144 }

Here is the caller graph for this function:

const df_RecCmn_t * df_RecReader::VerifiedRecCmn ( const UInt8_t a_buffer,
UInt32_t a_curRecNum,
UInt32_t  a_curBlockType,
UInt32_t a_prevRecType,
UInt32_t  a_lastGoodBlock 
) [static]

Definition at line 469 of file df_recreader.cpp.

References cmn_Num2Str(), df_IsValidPredecessor(), df_RF_CONTINUED, df_RecCmn_t::flags, ie_DF_INVRECCOOKIE, ie_DF_INVRECSEQNUM, ie_DF_INVSEQ, IsRecordCookie(), log_FUNC_m, df_RecCmn_t::magicCookie, ntoh(), rec_NoRec_c, df_RecCmn_t::seqNum, and df_RecCmn_t::type.

Referenced by GetNextRecord(), and bea_FRI::ReadFRIStart().

00474                                      {
00475 
00476 
00477     const df_RecCmn_t* recCmn_p =
00478         reinterpret_cast<const df_RecCmn_t*>(a_buffer);
00479 
00480     // -- CHECKING MAGIC COOKIE --
00481 
00482     if (!IsRecordCookie(recCmn_p->magicCookie)) {
00483         log_FUNC_m(VerifiedRecCmn);
00484         throw ivd_DFError(
00485             ie_DF_INVRECCOOKIE,
00486             a_lastGoodBlock,
00487             "Got=" +
00488             string((const char*)recCmn_p->magicCookie,
00489                    sizeof(recCmn_p->magicCookie)) );
00490     };
00491 
00492     // -- CHECKING SEQUENCE NUMBER --
00493 
00494     UInt32_t curRecNum      = ntoh(recCmn_p->seqNum);
00495     UInt32_t curRecFlags    = ntoh(recCmn_p->flags);
00496     // if this is first record - set recNum appropriately
00497     if (a_curRecNum == 0) {
00498         a_curRecNum = curRecNum;
00499     }
00500     else if (curRecNum == 1) { // start of new migration: reset counter
00501         a_curRecNum = 1;
00502         a_prevRecType = rec_NoRec_c;
00503     }
00504     else if ( (curRecFlags & df_RF_CONTINUED) != 0) {
00505         // Split in the middle of the volume.
00506         // Reset block number and type
00507         a_curRecNum = curRecNum;
00508         a_prevRecType = rec_NoRec_c;
00509     }
00510     else {
00511         a_curRecNum++;
00512         if (curRecNum != a_curRecNum) {
00513             log_FUNC_m(VerifiedRecCmn);
00514             throw ivd_DFError(
00515                 ie_DF_INVRECSEQNUM,
00516                 a_lastGoodBlock,
00517                 "Got=" + cmn_Num2Str(curRecNum) +
00518                 ", expected=" + cmn_Num2Str(a_curRecNum));
00519         }
00520     };
00521 
00522     // -- CHECKING RECORD TYPE SEQUENCE --
00523 
00524     // NOTE: No ntoh necessary!
00525     UInt32_t curRecType = recCmn_p->type;
00526 
00527     if (    a_prevRecType != rec_NoRec_c
00528         &&  !df_IsValidPredecessor(a_curBlockType, a_prevRecType, curRecType)) {
00529 
00530         string blockType = string(
00531             reinterpret_cast<const char*>(&a_curBlockType),
00532             sizeof(a_curBlockType));
00533 
00534         string prevStr = string(
00535             reinterpret_cast<const char*>(&a_prevRecType),
00536             sizeof(a_prevRecType));
00537 
00538         string curStr =
00539             (recCmn_p->type == rec_NoRec_c)
00540             ? string("NULL REC")
00541             : string((const char*)(&curRecType), sizeof(curRecType));
00542 
00543         ostringstream sstr;
00544         sstr << "Record " << prevStr
00545              << " can't be followed by " << curStr
00546              << " Block Type " << blockType
00547              << " a_curRecNum = " << a_curRecNum
00548              << *recCmn_p;
00549 
00550         log_FUNC_m(VerifiedRecCmn);
00551         throw ivd_DFError(ie_DF_INVSEQ, a_lastGoodBlock, sstr.str());
00552     };
00553 
00554     a_prevRecType = curRecType;
00555 
00556     return recCmn_p;
00557 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool df_RecReader::VerifyRecHeader ( const UInt8_t a_buffer,
UInt32_t  a_recType,
UInt32_t  a_recSeqNum,
UInt32_t  a_recSize 
) [static]

Definition at line 560 of file df_recreader.cpp.

References df_RECVERSION_SIZE_d, df_RF_SENTINEL, df_verMaj_c, df_verMin_c, df_RecCmn_t::flags, IsRecordCookie(), log_FUNC_m, df_RecCmn_t::magicCookie, ntoh(), df_RecCmn_t::reserved1, df_RecCmn_t::seqNum, df_RecCmn_t::size, df_RecCmn_t::type, df_RecCmn_t::verMajor, and df_RecCmn_t::verMinor.

Referenced by DoesBlockContainNewMigration(), and ParseBlock().

00564                                {
00565 
00566     log_FUNC_m(VerifyRecHeader);
00567 
00568     const df_RecCmn_t* recCmn_p =
00569         reinterpret_cast<const df_RecCmn_t*>(a_buffer);
00570 
00571     return (  (memcmp(&recCmn_p->verMajor, df_verMaj_c, df_RECVERSION_SIZE_d) <= 0)
00572            && (memcmp(&recCmn_p->verMinor, df_verMin_c, df_RECVERSION_SIZE_d) <= 0)
00573            &&  IsRecordCookie(recCmn_p->magicCookie)
00574            && (recCmn_p->type         == a_recType)
00575            && (ntoh(recCmn_p->flags)  <  df_RF_SENTINEL)
00576            && (ntoh(recCmn_p->seqNum) == a_recSeqNum)
00577            && (ntoh(recCmn_p->size)   >= a_recSize)
00578            && (recCmn_p->reserved1[0] == 0)
00579            && (recCmn_p->reserved1[1] == 0)
00580            );
00581 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool df_RecReader::IsNextRecordRaw (  )  const

Definition at line 181 of file df_recreader.cpp.

References GetBlkSize(), m_blockProxy, m_curBlockPos, and m_curStreamLeft.

Referenced by GetNextRecord(), and df_Filter::NextInputBlock().

00181                                          {
00182     if (m_blockProxy->IsEndOfBlock(m_curBlockPos) &&
00183         m_curStreamLeft >= GetBlkSize() ) {
00184 
00185         return true;
00186     }
00187     else {
00188         return false;
00189     }
00190 }

Here is the call graph for this function:

Here is the caller graph for this function:

UInt32_t df_RecReader::GetBlkSize (  )  const [inline]

UInt32_t df_RecReader::GetCurBlockUsed (  )  const [inline]

Definition at line 1545 of file df.h.

Referenced by df_Filter::CopyRecord().

01545 { return m_blockProxy->GetCurBlockUsed(); };

Here is the caller graph for this function:

UInt32_t df_RecReader::GetCurBlockPos (  )  const [inline]

Definition at line 1546 of file df.h.

Referenced by df_Filter::CopyRecord().

01546 { return m_curBlockPos; };

Here is the caller graph for this function:

UInt32_t df_RecReader::GetBlockID (  )  const [inline]

UInt32_t df_RecReader::GetLastKnownGoodBlockID (  )  const [inline]

Definition at line 1548 of file df.h.

Referenced by FRIEndCheck(), FRIStartCheck(), GetNextRecord(), PrepareDataStreamUnpacker(), df_SplitInfoUnpacker::ProcEndOfInput(), df_SplitInfoUnpacker::ProcRecFileEnd(), and Unpack().

01548 { return m_blockProxy->GetLastKnownGoodBlockID();};

Here is the caller graph for this function:

bool df_RecReader::IsCurBlockPtrNull (  )  [inline]

Definition at line 1549 of file df.h.

References NULL.

Referenced by GetNextRawRecord(), GetNextRecord(), LocateNextFile(), and Unpack().

01549 { return m_blockProxy->GetData() == NULL; };

Here is the caller graph for this function:

UInt32_t df_RecReader::GetRecNum (  )  const [inline]

Definition at line 1550 of file df.h.

01550 { return m_recNum; };

UInt32_t df_RecReader::GetBlockNum (  )  const [inline]

Definition at line 1551 of file df.h.

Referenced by df_FRIDistiller::HandleDFError(), df_FRIDistiller::ProcBlock(), and df_Filter::ProcBlock().

01551 { return m_blockProxy->GetBlockNum(); };

Here is the caller graph for this function:

const df_RecCmn_t * df_RecReader::PositionToRecord ( UInt32_t  a_recType  ) 

This function is intended for positioning to the first occurance of a specific record type inside the current block from the current position.

Most useful to position to the beginning of a file (rec_FileHdr_c).

Returns:
pointer to the record
Return values:
NULL if the record is not found

Definition at line 156 of file df_recreader.cpp.

References log_FUNC_m, m_blockProxy, m_curBlockPos, m_curRecType, m_prevRecType, m_recCmn_p, m_recNum, ntoh(), NULL, df_RecCmn_t::seqNum, df_RecCmn_t::size, and df_RecCmn_t::type.

Referenced by LocateNextFile(), and df_Filter::ProcBlock().

00156                                                                     {
00157     log_FUNC_m(PositionToRecord);
00158 
00159     UInt32_t used = m_blockProxy->GetCurBlockUsed();
00160     while (m_curBlockPos < used) {
00161 
00162         m_recCmn_p = reinterpret_cast<const df_RecCmn_t*>(
00163             m_blockProxy->GetData() + m_curBlockPos);
00164 
00165         if (m_recCmn_p->type == a_recType) {
00166             m_prevRecType    = m_curRecType;
00167             m_curRecType     = m_recCmn_p->type;
00168             return m_recCmn_p;
00169         }
00170         // recNum will be set and checked by GetNextRecord()
00171         m_recNum         = ntoh(m_recCmn_p->seqNum);
00172         m_curRecType     = m_recCmn_p->type;
00173         m_curBlockPos   += ntoh(m_recCmn_p->size);
00174     };
00175     return NULL;
00176 }

Here is the call graph for this function:

Here is the caller graph for this function:

UInt32_t df_RecReader::GetPrevRecType (  )  const [inline]

Definition at line 1555 of file df.h.

Referenced by i_FSC_i::InsertSplitFromFRIBlock().

01555 { return m_prevRecType; };

Here is the caller graph for this function:

void df_RecReader::SetNewDataBlock ( const UInt8_t a_dataBlock_p,
UInt32_t  a_curBlockID = 0 
) [protected]

Definition at line 195 of file df_recreader.cpp.

References dbg_DETAIL, GetBlkSize(), log_DBG_m, log_FUNC_m, m_blockProxy, m_curBlockPos, m_curRecType, m_curStreamLeft, ProcBlock(), ProcRawBlock(), and rec_Data_c.

Referenced by Unpack().

00197                            {
00198 
00199     log_FUNC_m(SetNewDataBlock);
00200 
00201     log_DBG_m(dbg_DETAIL,
00202         "left: " << m_curStreamLeft << " bs: " << GetBlkSize() );
00203 
00204     if (m_curStreamLeft >= GetBlkSize()) {
00205         m_blockProxy->SetPtrToDataBlock(a_dataBlock_p, a_curBlockID, true);
00206         m_curRecType = rec_Data_c;
00207         m_curBlockPos = 0;
00208         ProcRawBlock(a_dataBlock_p);
00209     }
00210     else {
00211         m_blockProxy->SetPtrToDataBlock(a_dataBlock_p, a_curBlockID, false);
00212         m_curBlockPos = sizeof(df_BlockHeader_t);
00213         ProcBlock(a_dataBlock_p);
00214     }
00215 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool df_RecReader::IsBlkPerBlkUnpacking (  )  [inline, protected]

Definition at line 1561 of file df.h.

Referenced by Unpack().

01561 { return m_blkPerBlkUnpacking; };

Here is the caller graph for this function:

virtual bool df_RecReader::HandleDFError ( const ivd_DFError ie  )  [inline, private, virtual]

Reimplemented in df_FRIDistiller.

Definition at line 1564 of file df.h.

Referenced by Unpack().

01564 { return false; };

Here is the caller graph for this function:

bool df_RecReader::LocateNextFile (  )  [private]

Definition at line 654 of file df_recreader.cpp.

References dbg_LOW, GetBlockID(), IsCurBlockPtrNull(), log_DBG_m, log_FUNC_m, m_blockProxy, m_findMode, NULL, PositionToRecord(), and rec_FileHdr_c.

Referenced by Unpack().

00654                                   {
00655     log_FUNC_m(LocateNextFile);
00656 
00657     if (IsCurBlockPtrNull()) {
00658         // No more input data.
00659         return false;
00660     }
00661 
00662     if (m_blockProxy->GetFindMode()) {
00663         // Still in find mode: block header not yet found
00664         m_blockProxy->GetNextBlock();
00665         return false;
00666     }
00667 
00668     const df_RecCmn_t* pos = PositionToRecord(rec_FileHdr_c);
00669     if (pos != NULL) {
00670         log_DBG_m(dbg_LOW, "File header found on position: " << GetBlockID());
00671         m_findMode = false;
00672         return true;
00673     }
00674     else {
00675         // turn block proxy back into find mode
00676         m_blockProxy->SetFindMode(true);
00677         m_blockProxy->GetNextBlock();
00678     }
00679     return false;
00680 }

Here is the call graph for this function:

Here is the caller graph for this function:

void df_RecReader::GetNextRecord (  )  [private]

Definition at line 584 of file df_recreader.cpp.

References cmn_Num2Str(), dbg_DETAIL, GetBlkSize(), GetLastKnownGoodBlockID(), GetNextRawRecord(), ie_DF_INV_BLK, IsCurBlockPtrNull(), IsNextRecordRaw(), log_DBG_m, log_FUNC_m, m_blockProxy, m_curBlockPos, m_curRecType, m_prevRecType, m_recCmn_p, m_recNum, ntoh(), ProcBlock(), rec_Data_c, rec_NoRec_c, df_RecCmn_t::size, df_RecCmn_t::type, and VerifiedRecCmn().

Referenced by Unpack().

00584                                  {
00585 
00586     log_FUNC_m(GetNextRecord);
00587 
00588     if (m_curBlockPos == 0 && m_curRecType == rec_Data_c) {
00589         m_curBlockPos = GetBlkSize();
00590         return;
00591     }
00592 
00593     if ( IsNextRecordRaw() ) {
00594         log_DBG_m(dbg_DETAIL, "Next record is raw block.");
00595         GetNextRawRecord();
00596         return;
00597     }
00598 
00599     if (   m_curBlockPos >= m_blockProxy->GetCurBlockUsed()
00600         || IsCurBlockPtrNull()) {
00601         m_blockProxy->GetNextBlock();
00602 
00603         m_curBlockPos = sizeof(df_BlockHeader_t);
00604         m_curRecType = rec_NoRec_c;
00605 
00606         if (IsCurBlockPtrNull()) {
00607             return;
00608         };
00609         ProcBlock(m_blockProxy->GetData());
00610     };
00611 
00612     m_recCmn_p = VerifiedRecCmn(
00613         m_blockProxy->GetData() + m_curBlockPos,
00614         m_recNum,
00615         m_blockProxy->GetBlkType(),
00616         m_prevRecType,
00617         GetLastKnownGoodBlockID() );
00618 
00619     m_curRecType     = m_recCmn_p->type;
00620     m_prevRecType    = m_curRecType;
00621     m_curBlockPos   += ntoh(m_recCmn_p->size);
00622 
00623     // if next record position is above block used size -> very strange!
00624     if (m_curBlockPos > m_blockProxy->GetCurBlockUsed()) {
00625         log_FUNC_m(GetNextRecord);
00626         throw ivd_DFError(ie_DF_INV_BLK,
00627             GetLastKnownGoodBlockID(),
00628             "Block Used=" + cmn_Num2Str(m_blockProxy->GetCurBlockUsed()) +
00629             ", Record End=" + cmn_Num2Str(m_curBlockPos));
00630     }
00631     return;
00632 }

Here is the call graph for this function:

Here is the caller graph for this function:

void df_RecReader::GetNextRawRecord (  )  [private]

Definition at line 636 of file df_recreader.cpp.

References GetBlkSize(), IsCurBlockPtrNull(), m_blockProxy, m_curBlockPos, m_curRecType, m_prevRecType, ProcRawBlock(), rec_Data_c, and rec_NoRec_c.

Referenced by GetNextRecord().

00636                                     {
00637 
00638     m_prevRecType = m_curRecType;
00639     m_blockProxy->GetRawNextBlock();
00640     m_curBlockPos = GetBlkSize();
00641     if (IsCurBlockPtrNull()) {
00642         m_curRecType = rec_NoRec_c;
00643     }
00644     else {
00645         ProcRawBlock(m_blockProxy->GetData());
00646         m_curRecType = rec_Data_c;
00647     }
00648     return;
00649 }

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void df_RecReader::ProcBlock ( const UInt8_t a_dataBlock  )  [inline, private, virtual]

Reimplemented in df_FRIDistiller, and df_Filter.

Definition at line 1572 of file df.h.

Referenced by GetNextRecord(), and SetNewDataBlock().

01572 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRawBlock ( const UInt8_t a_dataBlock  )  [inline, private, virtual]

Reimplemented in df_FRIDistiller.

Definition at line 1573 of file df.h.

Referenced by GetNextRawRecord(), and SetNewDataBlock().

01573 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRecFileHdr ( const df_RecCmn_t a_recCmn_p  )  [inline, private, virtual]

Reimplemented in hsm_IVDFSRecoverer, hsm_Recall, df_FRIDistiller, df_SplitInfoUnpacker, and df_Filter.

Definition at line 1575 of file df.h.

Referenced by Unpack().

01575 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRecFileEnd ( const df_RecCmn_t a_recCmn_p  )  [inline, private, virtual]

Reimplemented in hsm_IVDFSRecoverer, hsm_Recall, df_FRIDistiller, df_SplitInfoUnpacker, and df_Filter.

Definition at line 1576 of file df.h.

Referenced by Unpack().

01576 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRecBSStart ( const df_RecCmn_t a_recCmn_p  )  [inline, private, virtual]

Reimplemented in hsm_IVDFSRecoverer, hsm_Recall, df_FRIDistiller, df_SplitInfoUnpacker, and df_Filter.

Definition at line 1577 of file df.h.

Referenced by Unpack().

01577 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRecEmbData ( const df_RecCmn_t a_recCmn_p  )  [inline, private, virtual]

Reimplemented in hsm_IVDFSRecoverer, hsm_Recall, df_FRIDistiller, df_SplitInfoUnpacker, and df_Filter.

Definition at line 1578 of file df.h.

Referenced by Unpack().

01578 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRecRawData ( const UInt8_t a_block_p  )  [inline, private, virtual]

Reimplemented in hsm_IVDFSRecoverer, hsm_Recall, df_FRIDistiller, df_SplitInfoUnpacker, and df_Filter.

Definition at line 1579 of file df.h.

Referenced by Unpack().

01579 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRecBSEnd ( const df_RecCmn_t a_recCmn_p  )  [inline, private, virtual]

Reimplemented in hsm_IVDFSRecoverer, hsm_Recall, df_FRIDistiller, df_SplitInfoUnpacker, and df_Filter.

Definition at line 1580 of file df.h.

Referenced by Unpack().

01580 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRecFRIStart ( const df_RecCmn_t a_recCmn_p  )  [inline, private, virtual]

Definition at line 1581 of file df.h.

Referenced by Unpack().

01581 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRecFRIEnd ( const df_RecCmn_t a_recCmn_p  )  [inline, private, virtual]

Reimplemented in df_SplitInfoUnpacker.

Definition at line 1582 of file df.h.

Referenced by Unpack().

01582 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcRecFRISpInfo ( const df_RecCmn_t a_recCmn_p  )  [inline, private, virtual]

Reimplemented in df_SplitInfoUnpacker.

Definition at line 1583 of file df.h.

Referenced by Unpack().

01583 {};

Here is the caller graph for this function:

virtual void df_RecReader::ProcEndOfInput (  )  [inline, virtual]

method ProcEndOfInput() must be called at the end of input when block per block parsing is used (migration, FRI check before wirtten to media.

).

Reimplemented in df_FRIDistiller, df_SplitInfoUnpacker, and df_Filter.

Definition at line 1587 of file df.h.

Referenced by Unpack().

01587 {};

Here is the caller graph for this function:

void df_RecReader::PrepareDataStreamUnpacker (  )  [private, virtual]

Definition at line 419 of file df_recreader.cpp.

References cmn_Num2Str(), dbg_DETAIL, df_RF_SPLITTED, df_RecCmn_t::flags, GetLastKnownGoodBlockID(), df_RecCmn_t::GetVarDataNet(), ie_DF_INVSTREAMFMT, ie_IMPOSSIBLE, log_DBG_m, log_FUNC_m, log_MARKLINE_m, m_curStreamLeft, m_curStreamName, m_curStreamType, m_recCmn_p, ntoh(), df_RecByteStreamStart_t::streamName, df_RecByteStreamStart_t::streamOffset, df_RecByteStreamStart_t::streamSize, df_RecByteStreamStart_t::streamSplitSize, and df_RecByteStreamStart_t::streamType.

Referenced by Unpack().

00419                                              {
00420     log_FUNC_m(PrepareDataStreamUnpacker);
00421 
00422     const df_RecByteStreamStart_t *bss_p
00423         = df_GetSpecificRec<df_RecByteStreamStart_t>(m_recCmn_p);
00424 
00425     m_curStreamType = ntoh(bss_p->streamType);
00426     UInt64_t streamSplitSize = ntoh(bss_p->streamSplitSize);
00427     UInt64_t streamSize      = ntoh(bss_p->streamSize);
00428     UInt64_t streamOffset    = ntoh(bss_p->streamOffset);
00429 
00430 // NOTE!  m_curStreamLeft could be changed by inherited class in ProcRecBSStart() method
00431     if (  streamSplitSize > 0
00432        || ntoh(m_recCmn_p->flags) & df_RF_SPLITTED) {
00433         if (streamSplitSize > streamSize - streamOffset) {
00434             log_MARKLINE_m;
00435             throw ivd_InternalError(
00436                 ie_IMPOSSIBLE, "streamSplitSize > streamSize");
00437         }
00438         m_curStreamLeft = streamSplitSize;
00439     }
00440     else {
00441         m_curStreamLeft = streamSize - streamOffset;
00442     }
00443 
00444     m_curStreamName.assign(
00445         m_recCmn_p->GetVarDataNet(bss_p->streamName));
00446 
00447     log_DBG_m(dbg_DETAIL, "Stream: Size=" << streamSize
00448                        << ", Offset=" << streamOffset
00449                        << ", SplitSize=" << streamSplitSize
00450                        << ", Name = \'" << m_curStreamName << "\'");
00451 
00452     log_DBG_m(dbg_DETAIL, "Stream left=" << m_curStreamLeft);
00453 
00454     if (m_curStreamType == 0) {
00455         throw ivd_DFError(ie_DF_INVSTREAMFMT,
00456             GetLastKnownGoodBlockID(),
00457             "BSStart, but invalid streamType:"
00458             " strType=" + cmn_Num2Str(m_curStreamType) +
00459             ", strName=" + m_curStreamName +
00460             ", strLeft=" + cmn_Num2Str(m_curStreamLeft));
00461     }
00462 }

Here is the call graph for this function:

Here is the caller graph for this function:

void df_RecReader::FRIStartCheck ( const df_RecCmn_t a_recCmn_p  )  [private]

Definition at line 684 of file df_recreader.cpp.

References dbg_DETAIL, GetLastKnownGoodBlockID(), ie_DF_INVSEQ, cmn_UUID_t::IsNull(), log_DBG_m, log_FUNC_m, m_currVolID, m_isVolumeIDRegular, m_volumeID, and df_RecFRIStart_t::volID.

Referenced by Unpack().

00684                                                               {
00685     log_FUNC_m(FRIStartCheck);
00686     const df_RecFRIStart_t *friStart_p = df_GetSpecificRec<df_RecFRIStart_t>(a_recCmn_p);
00687     if (!m_currVolID.IsNull()) {
00688         ostringstream sstr;
00689         sstr << " new VolID : " << friStart_p->volID << endl
00690              << *this;
00691         throw ivd_DFError(
00692             ie_DF_INVSEQ,
00693             GetLastKnownGoodBlockID(),
00694             "Got second FRIStart record, missing FRIEnd.", sstr.str(), true);
00695     }
00696 
00697     m_currVolID   = friStart_p->volID;
00698 
00699     if (  m_isVolumeIDRegular
00700        && m_volumeID != m_currVolID) {
00701         ostringstream sstr;
00702         sstr << " new VolID : " << friStart_p->volID << endl
00703              << *this;
00704         throw ivd_DFError(
00705             ie_DF_INVSEQ,
00706             GetLastKnownGoodBlockID(),
00707             "Got FRIStart record with different VolID then expected. ", sstr.str(), true);
00708     }
00709 
00710     log_DBG_m(dbg_DETAIL, " Set m_currVolID " << m_currVolID);
00711 }

Here is the call graph for this function:

Here is the caller graph for this function:

void df_RecReader::FRIEndCheck ( const df_RecCmn_t a_recCmn_p  )  [private]

Definition at line 714 of file df_recreader.cpp.

References cmn_UUID_t::Clear(), dbg_DETAIL, dbg_LOW, df_RecFRIEnd_t::endPos, GetLastKnownGoodBlockID(), ie_DF_INVSEQ, cmn_UUID_t::IsNull(), log_DBG_m, log_FUNC_m, m_currVolID, ntoh(), df_RecFRIEnd_t::startPos, and df_RecFRIEnd_t::volID.

Referenced by Unpack().

00714                                                             {
00715     log_FUNC_m(FRIEndCheck);
00716     const df_RecFRIEnd_t *friEnd_p = df_GetSpecificRec<df_RecFRIEnd_t>(a_recCmn_p);
00717 
00718     log_DBG_m(dbg_LOW,
00719         endl <<
00720         "FRIEnd start pos : " << ntoh(friEnd_p->startPos) << endl <<
00721         "FRIEnd end pos : " << ntoh(friEnd_p->endPos) );
00722 
00723     if (m_currVolID.IsNull()) {
00724         ostringstream sstr;
00725         sstr << *this;
00726         throw ivd_DFError(
00727             ie_DF_INVSEQ,
00728             GetLastKnownGoodBlockID(),
00729             "Got FRIEnd record, but missing FRIStart record. ", sstr.str(), true);
00730     }
00731 
00732     if (friEnd_p->volID != m_currVolID) {
00733         ostringstream sstr;
00734         sstr << "(" << friEnd_p->volID << "!=" << m_currVolID << ") "
00735             << *this;
00736 
00737         throw ivd_DFError(
00738             ie_DF_INVSEQ,
00739             GetLastKnownGoodBlockID(),
00740             "FRIEnd.volID != FRIStart.volID. ",
00741             sstr.str(), true);
00742     }
00743 
00744     m_currVolID.Clear();
00745     log_DBG_m(dbg_DETAIL, " Clear m_currVolID " << m_currVolID);
00746 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool df_RecReader::DoesBlockContainNewMigration (  )  [protected]

Definition at line 749 of file df_recreader.cpp.

References blk_Data_c, GetBlkSize(), log_FUNC_m, m_blockProxy, NULL, rec_FileHdr_c, and VerifyRecHeader().

Referenced by df_FRIDistiller::ProcRecRawData().

00749                                                 {
00750     log_FUNC_m(DoesBlockContainNewMigration);
00751 
00752     const UInt8_t *block_p = m_blockProxy->GetData();
00753 
00754     return (  (block_p != NULL)
00755            &&  m_blockProxy->VerifyBlockHeader(block_p,
00756                                  GetBlkSize(),
00757                                  1,  // first block in migration
00758                                  blk_Data_c,
00759                                  0)  // no continuous block
00760            &&  VerifyRecHeader(block_p + sizeof(df_BlockHeader_t),
00761                                rec_FileHdr_c,
00762                                1, // record seq number
00763                                sizeof(df_RecCmn_t) + sizeof(df_RecFile_t))
00764            );
00765 }

Here is the call graph for this function:

Here is the caller graph for this function:

void df_RecReader::SetFindMode (  )  [protected]

Definition at line 219 of file df_recreader.cpp.

References log_FUNC_m, m_blockProxy, and m_findMode.

Referenced by df_FRIDistiller::HandleDFError().

00219                                {
00220     log_FUNC_m(SetFindMode);
00221 
00222     //
00223     // When in find mode, record reader attempts to position to the next
00224     // file record. It does not throw data format exceptions.
00225     //
00226     // When the file record is found, the find mode is automatically reset.
00227     //
00228     m_blockProxy->SetFindMode(true);
00229     m_blockProxy->GetNextBlock();
00230     m_findMode = true;
00231 }

Here is the caller graph for this function:


Friends And Related Function Documentation

IVD_DF_DECL_d ostream& operator<< ( ostream &  a_os,
const df_RecReader o 
) [friend]

Definition at line 46 of file df_recreader.cpp.

00046                                                            {
00047     a_os
00048         << "m_curRecType:"    << o.m_curRecType << endl
00049         << "m_prevRecType:"   << o.m_prevRecType << endl
00050         << "m_curBlockPos:"   << o.m_curBlockPos << endl
00051         << "m_recNum:"        << o.m_recNum << endl
00052         << "m_curStreamLeft:" << o.m_curStreamLeft << endl
00053         << "m_curStreamType:" << o.m_curStreamType << endl
00054         << "m_findMode:" << boolalpha << o.m_findMode << endl
00055         << "m_blkPerBlkUnpacking:" << boolalpha << o.m_blkPerBlkUnpacking << endl
00056         << "m_currVolID:" << o.m_currVolID << endl
00057         << "m_volumeID:" << o.m_volumeID << endl
00058         << "m_isVolumeIDRegular:" << boolalpha << o.m_isVolumeIDRegular << endl
00059         << "m_ignoreCorruptedMetaData:" << boolalpha << o.m_ignoreCorruptedMetaData << endl;
00060 
00061     if (o.m_recCmn_p == NULL) {
00062         a_os << ", m_recCmn_p : NULL" << endl;
00063     }
00064     else {
00065         a_os << ", m_recCmn_p : " << *(o.m_recCmn_p);
00066     }
00067 
00068     if (o.m_blockProxy.get() != NULL) {
00069         a_os << *(o.m_blockProxy); // it is auto pointer
00070     }
00071     else {
00072         a_os << "Block proxy: NULL." << endl;
00073     }
00074 
00075     return a_os;
00076 }


Member Data Documentation

string df_RecReader::m_curStreamName [protected]

parsing data of volume

Definition at line 1486 of file df.h.

Referenced by FRIStartCheck(), and operator<<().

Definition at line 1487 of file df.h.

Referenced by FRIStartCheck(), and operator<<().

set when FRI is read

Definition at line 1490 of file df.h.

Referenced by FRIEndCheck(), FRIStartCheck(), operator<<(), and df_SplitInfoUnpacker::ProcEndOfInput().

Definition at line 1494 of file df.h.

Referenced by df_RecReader(), operator<<(), df_SplitInfoUnpacker::ProcRecBSEnd(), and Unpack().

Macro to add class name member s_className.

Reimplemented in hsm_IVDFSRecoverer, hsm_Recall, df_FRIDistiller, df_SplitInfoUnpacker, df_Filter, fsc_FRIblockUnpacker, fsc_FRIunpacker, and fsc_VolumeCheck.

Definition at line 1498 of file df.h.

Definition at line 1505 of file df.h.

Referenced by GetNextRecord(), operator<<(), PositionToRecord(), Reset(), and Unpack().

bool df_RecReader::m_findMode [private]

Definition at line 1508 of file df.h.

Referenced by LocateNextFile(), operator<<(), SetFindMode(), and Unpack().

Definition at line 1511 of file df.h.

Referenced by operator<<(), and Unpack().


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:13:21 2012 for OPENARCHIVE by  doxygen 1.5.6