git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@579 0109f412-320b-0410-ab79-c3e0c5ffbbe6
332 lines
11 KiB
C
332 lines
11 KiB
C
//-------------------------------------------------------------------------
|
|
// Desc: RFL viewer utility - definitions.
|
|
// Tabs: 3
|
|
//
|
|
// Copyright (c) 1998-2006 Novell, Inc. All Rights Reserved.
|
|
//
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of version 2 of the GNU General Public
|
|
// License as published by the Free Software Foundation.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, contact Novell, Inc.
|
|
//
|
|
// To contact Novell about this file by physical or electronic mail,
|
|
// you may find current contact information at www.novell.com
|
|
//
|
|
// $Id: rflread.h 12329 2006-01-20 17:49:30 -0700 (Fri, 20 Jan 2006) ahodgkinson $
|
|
//-------------------------------------------------------------------------
|
|
|
|
#include "flaim.h"
|
|
#include "flaimsys.h"
|
|
|
|
#ifndef RFLREAD_H
|
|
#define RFLREAD_H
|
|
|
|
extern "C"
|
|
{
|
|
|
|
#ifdef MAIN_MODULE
|
|
#define REXTERN
|
|
#else
|
|
#define REXTERN extern
|
|
#endif
|
|
|
|
#ifndef RFL_BUFFER_SIZE
|
|
#define RFL_BUFFER_SIZE (65536 * 4)
|
|
#endif
|
|
|
|
REXTERN IF_FileHdl * gv_pRflFileHdl;
|
|
REXTERN FLMBYTE gv_rflBuffer [RFL_BUFFER_SIZE];
|
|
REXTERN FLMUINT64 gv_ui64RflEof;
|
|
|
|
// Tag numbers for internal fields.
|
|
|
|
typedef enum
|
|
{
|
|
RFL_TRNS_BEGIN_FIELD = 0,
|
|
RFL_TRNS_COMMIT_FIELD,
|
|
RFL_TRNS_ABORT_FIELD,
|
|
RFL_RECORD_ADD_FIELD,
|
|
RFL_RECORD_MODIFY_FIELD,
|
|
RFL_RECORD_DELETE_FIELD,
|
|
RFL_RESERVE_DRN_FIELD,
|
|
RFL_CHANGE_FIELDS_FIELD,
|
|
RFL_DATA_RECORD_FIELD,
|
|
RFL_UNKNOWN_PACKET_FIELD,
|
|
RFL_NUM_BYTES_VALID_FIELD,
|
|
RFL_PACKET_ADDRESS_FIELD,
|
|
RFL_PACKET_CHECKSUM_FIELD,
|
|
RFL_PACKET_CHECKSUM_VALID_FIELD,
|
|
RFL_PACKET_BODY_LENGTH_FIELD,
|
|
RFL_NEXT_PACKET_ADDRESS_FIELD,
|
|
RFL_PREV_PACKET_ADDRESS_FIELD,
|
|
RFL_TRANS_ID_FIELD,
|
|
RFL_START_SECONDS_FIELD,
|
|
RFL_START_MSEC_FIELD,
|
|
RFL_END_SECONDS_FIELD,
|
|
RFL_END_MSEC_FIELD,
|
|
RFL_START_TRNS_ADDR_FIELD,
|
|
RFL_CONTAINER_FIELD,
|
|
RFL_DRN_FIELD,
|
|
RFL_TAG_NUM_FIELD,
|
|
RFL_TYPE_FIELD,
|
|
RFL_LEVEL_FIELD,
|
|
RFL_DATA_LEN_FIELD,
|
|
RFL_DATA_FIELD,
|
|
RFL_MORE_DATA_FIELD,
|
|
RFL_INSERT_FLD_FIELD,
|
|
RFL_MODIFY_FLD_FIELD,
|
|
RFL_DELETE_FLD_FIELD,
|
|
RFL_END_CHANGES_FIELD,
|
|
RFL_UNKNOWN_CHANGE_TYPE_FIELD,
|
|
RFL_POSITION_FIELD,
|
|
RFL_REPLACE_BYTES_FIELD,
|
|
RFL_UNKNOWN_CHANGE_BYTES_FIELD,
|
|
RFL_INDEX_SET_FIELD,
|
|
RFL_INDEX_NUM_FIELD,
|
|
RFL_START_DRN_FIELD,
|
|
RFL_END_DRN_FIELD,
|
|
RFL_START_UNKNOWN_FIELD,
|
|
RFL_UNKNOWN_USER_PACKET_FIELD,
|
|
RFL_HDR_NAME_FIELD,
|
|
RFL_HDR_VERSION_FIELD,
|
|
RFL_HDR_FILE_NUMBER_FIELD,
|
|
RFL_HDR_EOF_FIELD,
|
|
RFL_HDR_DB_SERIAL_NUM_FIELD,
|
|
RFL_HDR_FILE_SERIAL_NUM_FIELD,
|
|
RFL_HDR_NEXT_FILE_SERIAL_NUM_FIELD,
|
|
RFL_HDR_KEEP_SIGNATURE_FIELD,
|
|
RFL_TRNS_BEGIN_EX_FIELD,
|
|
RFL_UPGRADE_PACKET_FIELD,
|
|
RFL_OLD_DB_VERSION_FIELD,
|
|
RFL_NEW_DB_VERSION_FIELD,
|
|
RFL_REDUCE_PACKET_FIELD,
|
|
RFL_BLOCK_COUNT_FIELD,
|
|
RFL_LAST_COMMITTED_TRANS_ID_FIELD,
|
|
RFL_INDEX_SET2_FIELD,
|
|
RFL_INDEX_SUSPEND_FIELD,
|
|
RFL_INDEX_RESUME_FIELD,
|
|
RFL_BLK_CHAIN_FREE_FIELD,
|
|
RFL_TRACKER_REC_FIELD,
|
|
RFL_END_BLK_ADDR_FIELD,
|
|
RFL_FLAGS_FIELD,
|
|
RFL_INSERT_ENC_FLD_FIELD,
|
|
RFL_MODIFY_ENC_FLD_FIELD,
|
|
RFL_ENC_FIELD,
|
|
RFL_ENC_DEF_ID_FIELD,
|
|
RFL_ENC_DATA_LEN_FIELD,
|
|
RFL_DB_KEY_LEN_FIELD,
|
|
RFL_DB_KEY_FIELD,
|
|
RFL_WRAP_KEY_FIELD,
|
|
RFL_ENABLE_ENCRYPTION_FIELD,
|
|
RFL_ENC_DATA_RECORD_FIELD,
|
|
RFL_DATA_RECORD3_FIELD,
|
|
RFL_INSERT_LARGE_FLD_FIELD,
|
|
RFL_INSERT_ENC_LARGE_FLD_FIELD,
|
|
RFL_MODIFY_LARGE_FLD_FIELD,
|
|
RFL_MODIFY_ENC_LARGE_FLD_FIELD,
|
|
RFL_CONFIG_SIZE_EVENT_FIELD,
|
|
RFL_SIZE_THRESHOLD_FIELD,
|
|
RFL_TIME_INTERVAL_FIELD,
|
|
RFL_SIZE_INTERVAL_FIELD,
|
|
|
|
// IMPORTANT NOTE: WHEN ADDING TO THIS TABLE, BE SURE TO ADD
|
|
// STRING TO gv_szTagNames TABLE BELOW - STRINGS MUST BE
|
|
// IN THE ORDER THEY APPEAR IN THIS TABLE
|
|
|
|
RFL_TOTAL_FIELDS
|
|
} eDispTag;
|
|
|
|
FINLINE FLMUINT makeTagNum(
|
|
eDispTag eTagNum)
|
|
{
|
|
return( (FLMUINT)eTagNum + 32769);
|
|
}
|
|
|
|
#ifdef MAIN_MODULE
|
|
|
|
// Put this table in the header file so that the enums
|
|
// are right next to the tags that go with them.
|
|
|
|
const char * gv_szTagNames [] =
|
|
{
|
|
"TransBegin", // RFL_TRNS_BEGIN_FIELD
|
|
"TransCommit", // RFL_TRNS_COMMIT_FIELD
|
|
"TransAbort", // RFL_TRNS_ABORT_FIELD
|
|
"RecAdd", // RFL_RECORD_ADD_FIELD
|
|
"RecModify", // RFL_RECORD_MODIFY_FIELD
|
|
"RecDelete", // RFL_RECORD_DELETE_FIELD
|
|
"ReserveDRN", // RFL_RESERVE_DRN_FIELD
|
|
"ChangeFields", // RFL_CHANGE_FIELDS_FIELD
|
|
"DataRecord", // RFL_DATA_RECORD_FIELD
|
|
"UnknownPacket", // RFL_UNKNOWN_PACKET_FIELD
|
|
"NumBytesValid", // RFL_NUM_BYTES_VALID_FIELD
|
|
"PacketAddress", // RFL_PACKET_ADDRESS_FIELD
|
|
"PacketChecksum", // RFL_PACKET_CHECKSUM_FIELD
|
|
"PacketChecksumValid", // RFL_PACKET_CHECKSUM_VALID_FIELD
|
|
"PacketBodyLength", // RFL_PACKET_BODY_LENGTH_FIELD
|
|
"NextPacketAddress", // RFL_NEXT_PACKET_ADDRESS_FIELD
|
|
"PrevPacketAddress", // RFL_PREV_PACKET_ADDRESS_FIELD
|
|
"TransID", // RFL_TRANS_ID_FIELD
|
|
"StartSeconds", // RFL_START_SECONDS_FIELD
|
|
"StartMillisec", // RFL_START_MSEC_FIELD
|
|
"EndSeconds", // RFL_END_SECONDS_FIELD
|
|
"EndMillisec", // RFL_END_MSEC_FIELD
|
|
"StartTransAddr", // RFL_START_TRNS_ADDR_FIELD
|
|
"ContainerNum", // RFL_CONTAINER_FIELD
|
|
"RecordID", // RFL_DRN_FIELD
|
|
"TagNum", // RFL_TAG_NUM_FIELD
|
|
"FieldType", // RFL_TYPE_FIELD
|
|
"Level", // RFL_LEVEL_FIELD
|
|
"DataLen", // RFL_DATA_LEN_FIELD
|
|
"Data", // RFL_DATA_FIELD
|
|
"MoreData", // RFL_MORE_DATA_FIELD
|
|
"InsertFld", // RFL_INSERT_FLD_FIELD
|
|
"ModifyFld", // RFL_MODIFY_FLD_FIELD
|
|
"DeleteFld", // RFL_DELETE_FLD_FIELD
|
|
"EndChanges", // RFL_END_CHANGES_FIELD
|
|
"UnknownChangeType", // RFL_UNKNOWN_CHANGE_TYPE_FIELD
|
|
"Position", // RFL_POSITION_FIELD
|
|
"ReplaceBytes", // RFL_REPLACE_BYTES_FIELD
|
|
"UnknownChangeBytes", // RFL_UNKNOWN_CHANGE_BYTES_FIELD
|
|
"IndexSet", // RFL_INDEX_SET_FIELD
|
|
"IndexNum", // RFL_INDEX_NUM_FIELD
|
|
"StartDRN", // RFL_START_DRN_FIELD
|
|
"EndDRN", // RFL_END_DRN_FIELD
|
|
"StartUnknown", // RFL_START_UNKNOWN_FIELD
|
|
"UserUnknown", // RFL_UNKNOWN_USER_PACKET_FIELD
|
|
"RFLName", // RFL_HDR_NAME_FIELD
|
|
"RFLVersion", // RFL_HDR_VERSION_FIELD
|
|
"FileNumber", // RFL_HDR_FILE_NUMBER_FIELD
|
|
"FileEOF", // RFL_HDR_EOF_FIELD
|
|
"DBSerialNum", // RFL_HDR_DB_SERIAL_NUM_FIELD
|
|
"FileSerialNum", // RFL_HDR_FILE_SERIAL_NUM_FIELD
|
|
"NextFileSerialNum", // RFL_HDR_NEXT_FILE_SERIAL_NUM_FIELD
|
|
"KeepSignature", // RFL_HDR_KEEP_SIGNATURE_FIELD
|
|
"TransBeginEx", // RFL_TRNS_BEGIN_EX_FIELD
|
|
"UpgradeDB", // RFL_UPGRADE_PACKET_FIELD
|
|
"OldDbVersion", // RFL_OLD_DB_VERSION_FIELD
|
|
"NewDbVersion", // RFL_NEW_DB_VERSION_FIELD
|
|
"ReduceDb", // RFL_REDUCE_PACKET_FIELD
|
|
"BlockCount", // RFL_BLOCK_COUNT_FIELD
|
|
"LastCommitTransID", // RFL_LAST_COMMITTED_TRANS_ID_FIELD
|
|
"IndexSet2", // RFL_INDEX_SET2_FIELD
|
|
"IndexSuspend", // RFL_INDEX_SUSPEND_FIELD
|
|
"IndexResume", // RFL_INDEX_RESUME_FIELD
|
|
"BlockChainFree", // RFL_BLK_CHAIN_FREE_FIELD
|
|
"TrackerRecDRN", // RFL_TRACKER_REC_FIELD
|
|
"EndBlockAddr", // RFL_END_BLK_ADDR_FIELD
|
|
"Flags", // RFL_FLAGS_FIELD
|
|
"InsertEncFld", // RFL_INSERT_ENC_FLD_FIELD
|
|
"ModifyEncFld", // RFL_MODIFY_ENC_FLD_FIELD
|
|
"Encrypted", // RFL_ENC_FIELD
|
|
"EncryptedDefId", // RFL_ENC_DEF_ID_FIELD
|
|
"EncryptedDataLen", // RFL_ENC_DATA_LEN_FIELD
|
|
"DataBaseKeyLen", // RFL_DB_KEY_LEN_FIELD
|
|
"DataBaseKey", // RFL_DB_KEY_FIELD
|
|
"WrapKey", // RFL_WRAP_KEY_FIELD
|
|
"EnableEncryption", // RFL_ENABLE_ENCRYPTION_FIELD
|
|
"EncDataRecord", // RFL_ENC_DATA_RECORD_FIELD
|
|
"DataRecord3", // RFL_DATA_RECORD3_FIELD
|
|
"InsertLargeFld", // RFL_INSERT_LARGE_FLD_FIELD
|
|
"InsertLargeEncFld", // RFL_INSERT_ENC_LARGE_FLD_FIELD
|
|
"ModifyLargeFld", // RFL_MODIFY_LARGE_FLD_FIELD
|
|
"ModifyLargeEncFld", // RFL_MODIFY_ENC_LARGE_FLD_FIELD
|
|
"ConfigSizeEvent", // RFL_CONFIG_SIZE_EVENT_FIELD
|
|
"SizeThreshold", // RFL_SIZE_THRESHOLD_FIELD
|
|
"TimeInterval", // RFL_TIME_INTERVAL_FIELD
|
|
"SizeInterval", // RFL_SIZE_INTERVAL_FIELD
|
|
NULL
|
|
};
|
|
#endif
|
|
|
|
|
|
typedef struct Rfl_Packet
|
|
{
|
|
FLMUINT uiFileOffset; // File offset this packet was read from.
|
|
FLMUINT uiPacketAddress; // Packet address that was read
|
|
FLMUINT uiPacketAddressBytes; // Bytes that were actually in packet addr.
|
|
FLMUINT uiPacketChecksum; // Packet checksum
|
|
FLMBOOL bHavePacketChecksum; // Did we actually have a packet checksum?
|
|
FLMBOOL bValidChecksum; // Is the checksum valid?
|
|
FLMUINT uiPacketType; // Packet type
|
|
FLMBOOL bHavePacketType; // Did we actually have a packet type?
|
|
FLMBOOL bValidPacketType; // Is the packet type valid?
|
|
FLMBOOL bHaveTimes; // Was the time bit set on the packet type?
|
|
FLMUINT uiPacketBodyLength; // Packet body length
|
|
FLMUINT uiPacketBodyLengthBytes; // Bytes that were in packet body length
|
|
FLMUINT uiNextPacketAddress; // Next packet address - zero if no more
|
|
FLMUINT uiPrevPacketAddress; // Prev packet address - zero if unknown
|
|
FLMUINT uiTransID; // Transaction ID
|
|
FLMUINT uiTransIDBytes; // Bytes that were actually in transID
|
|
FLMUINT uiTransStartAddr; // Transaction start address
|
|
FLMUINT uiTransStartAddrBytes; // Transaction start address bytes
|
|
FLMUINT uiContainer; // container
|
|
FLMUINT uiContainerBytes; // Bytes that were in container.
|
|
FLMUINT uiIndex; // index
|
|
FLMUINT uiIndexBytes; // Bytes that were in index.
|
|
FLMUINT uiDrn; // DRN
|
|
FLMUINT uiDrnBytes; // Bytes that were in DRN.
|
|
FLMUINT uiEndDrn; // End DRN
|
|
FLMUINT uiEndDrnBytes; // Bytes that were in End DRN.
|
|
FLMUINT uiStartSeconds; // Start seconds
|
|
FLMUINT uiStartSecondsBytes; // Bytes that were in start seconds
|
|
FLMUINT uiStartMicro; // Start micro seconds
|
|
FLMUINT uiStartMicroBytes; // Bytes that were in start micro seconds
|
|
FLMUINT uiEndSeconds; // End seconds
|
|
FLMUINT uiEndSecondsBytes; // Bytes that were in end seconds
|
|
FLMUINT uiEndMicro; // End micro seconds
|
|
FLMUINT uiEndMicroBytes; // Bytes that were in end micro seconds
|
|
FLMUINT uiLastCommittedTransID; // Last committed transaction ID
|
|
FLMUINT uiLastCommittedTransIDBytes; // Bytes that were in the last committed trans ID
|
|
FLMUINT uiFlags; // Operation flags
|
|
FLMUINT uiFlagsBytes; // Bytes that were in flags
|
|
FLMUINT uiCount; // Count (number of blocks, etc.)
|
|
FLMUINT uiCountBytes; // Bytes that were in count
|
|
FLMUINT uiSizeThreshold; // Size threshhold
|
|
FLMUINT uiSizeThresholdBytes; // Bytes in size threshhold
|
|
FLMUINT uiTimeInterval; // Time interval
|
|
FLMUINT uiTimeIntervalBytes; // Bytes that were in tine interval
|
|
FLMUINT uiSizeInterval; // Size interval
|
|
FLMUINT uiSizeIntervalBytes; // Bytes that were in size interval
|
|
FLMUINT uiMultiFileSearch; // Is search to span multiple files?
|
|
} RFL_PACKET, * RFL_PACKET_p;
|
|
|
|
RCODE RflPositionToNode(
|
|
FLMUINT uiFileOffset,
|
|
FLMBOOL bOperationsOnly,
|
|
F_Pool * pPool,
|
|
NODE ** ppNodeRV);
|
|
|
|
RCODE RflGetNextNode(
|
|
NODE * pCurrOpNode,
|
|
FLMBOOL bOperationsOnly,
|
|
F_Pool * pPool,
|
|
NODE ** ppNextNodeRV,
|
|
FLMBOOL bStopAtEOF = FALSE);
|
|
|
|
RCODE RflGetPrevNode(
|
|
NODE * pCurrOpNode,
|
|
FLMBOOL bOperationsOnly,
|
|
F_Pool * pPool,
|
|
NODE ** ppPrevNodeRV);
|
|
|
|
void RflFormatPacket(
|
|
void * pPacket,
|
|
char * pszDispBuffer);
|
|
|
|
RCODE RflExpandPacket(
|
|
NODE * pPacketNode,
|
|
F_Pool * pPool,
|
|
NODE ** ppForest);
|
|
|
|
} // extern "C"
|
|
|
|
#endif
|