Modified to use enum for tag numbers. Moved tag name table from viewrfl.cpp to rflread.h.

git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@242 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
dsandersoremutah
2006-03-31 22:18:07 +00:00
parent c38cc0b4f5
commit e1d6d633e5
3 changed files with 547 additions and 287 deletions

View File

@@ -100,7 +100,7 @@ FSTATIC RCODE rflPutNum(
POOL * pPool,
NODE * pLinkToNode,
FLMBOOL bPutAsSib,
FLMUINT uiTagNum,
eDispTag eDispTag,
FLMUINT uiNum,
FLMUINT uiOffset,
FLMUINT uiNumExpectedBytes,
@@ -186,6 +186,11 @@ FSTATIC RCODE rflExpandEncryptionPacket(
POOL * pPool,
NODE ** ppForest);
FSTATIC RCODE rflExpandConfigSizePacket(
RFL_PACKET * pRflPacket,
POOL * pPool,
NODE ** ppForest);
FSTATIC void rflFormatCount(
RFL_PACKET * pRflPacket,
char ** ppszTmp);
@@ -667,7 +672,10 @@ void RflFormatPacket(
f_strcpy( pszTmp, " DataRec ");
break;
case RFL_ENC_DATA_RECORD_PACKET:
f_strcpy( pszTmp, " EncDataRec ");
f_strcpy( pszTmp, " EDataRec ");
break;
case RFL_DATA_RECORD_PACKET_VER_3:
f_strcpy( pszTmp, " DataRec3 ");
break;
case RFL_INDEX_SET_PACKET:
f_strcpy( pszTmp, " IndexSet ");
@@ -683,7 +691,7 @@ void RflFormatPacket(
rflFormatDRNRange( pRflPacket, &pszTmp);
break;
case RFL_BLK_CHAIN_FREE_PACKET:
f_strcpy( pszTmp, "BlockChainFree");
f_strcpy( pszTmp, "BlkChainFree ");
rflFormatTransID( pRflPacket, &pszTmp);
rflFormatDRN( pRflPacket, &pszTmp);
rflFormatCount( pRflPacket, &pszTmp);
@@ -718,15 +726,18 @@ void RflFormatPacket(
rflFormatIndex( pRflPacket, &pszTmp);
break;
case RFL_WRAP_KEY_PACKET:
f_strcpy( pszTmp, "Wrap Key ");
f_strcpy( pszTmp, "Wrap Key ");
rflFormatTransID( pRflPacket, &pszTmp);
rflFormatDBKeyLen( pRflPacket, &pszTmp);
break;
case RFL_ENABLE_ENCRYPTION_PACKET:
f_strcpy( pszTmp, "Enable Enc ");
f_strcpy( pszTmp, "Enable Enc ");
rflFormatTransID( pRflPacket, &pszTmp);
rflFormatDBKeyLen( pRflPacket, &pszTmp);
break;
case RFL_CONFIG_SIZE_EVENT_PACKET:
f_strcpy( pszTmp, "Config Size ");
break;
}
}
}
@@ -1111,6 +1122,7 @@ FSTATIC RCODE rflRetrievePacket(
case RFL_CHANGE_FIELDS_PACKET:
case RFL_DATA_RECORD_PACKET:
case RFL_ENC_DATA_RECORD_PACKET:
case RFL_DATA_RECORD_PACKET_VER_3:
case RFL_UNKNOWN_PACKET:
uiExpectedBodyLen = pRflPacket->uiPacketBodyLength;
if (uiExpectedBodyLen & 0x03)
@@ -1188,6 +1200,12 @@ FSTATIC RCODE rflRetrievePacket(
case RFL_ENABLE_ENCRYPTION_PACKET:
uiExpectedBodyLen = pRflPacket->uiPacketBodyLength;
break;
case RFL_CONFIG_SIZE_EVENT_PACKET:
uiExpectedBodyLen = 16;
pRflPacket->uiNextPacketAddress =
uiFileOffset + RFL_PACKET_OVERHEAD +
uiExpectedBodyLen;
break;
default:
pRflPacket->bValidPacketType = FALSE;
pRflPacket->uiNextPacketAddress =
@@ -1224,9 +1242,10 @@ FSTATIC RCODE rflRetrievePacket(
// determine where the next packet starts, starting from
// the packet overhead.
if ((pRflPacket->uiPacketType == RFL_CHANGE_FIELDS_PACKET) ||
(pRflPacket->uiPacketType == RFL_DATA_RECORD_PACKET) ||
(pRflPacket->uiPacketType == RFL_ENC_DATA_RECORD_PACKET))
if (pRflPacket->uiPacketType == RFL_CHANGE_FIELDS_PACKET ||
pRflPacket->uiPacketType == RFL_DATA_RECORD_PACKET ||
pRflPacket->uiPacketType == RFL_ENC_DATA_RECORD_PACKET ||
pRflPacket->uiPacketType == RFL_DATA_RECORD_PACKET_VER_3)
{
if ((uiBytesRead != uiExpectedBodyLen) ||
(!pRflPacket->bHavePacketChecksum) ||
@@ -1619,6 +1638,26 @@ FSTATIC RCODE rflRetrievePacket(
uiFileOffset + RFL_PACKET_OVERHEAD +
6 + pRflPacket->uiCount;
break;
case RFL_CONFIG_SIZE_EVENT_PACKET:
// Get transaction ID, size threshhold, time interval, and
// size interval
rflGetNumValue( pucPacketBody, uiBytesRead, 0,
4, &pRflPacket->uiTransID,
&pRflPacket->uiTransIDBytes);
rflGetNumValue( pucPacketBody, uiBytesRead, 4,
4, &pRflPacket->uiSizeThreshold,
&pRflPacket->uiSizeThresholdBytes);
rflGetNumValue( pucPacketBody, uiBytesRead, 8,
4, &pRflPacket->uiTimeInterval,
&pRflPacket->uiTimeIntervalBytes);
rflGetNumValue( pucPacketBody, uiBytesRead, 12,
4, &pRflPacket->uiSizeInterval,
&pRflPacket->uiSizeInterval);
break;
default:
break;
}
@@ -1644,9 +1683,11 @@ FSTATIC RCODE rflGetNextOpPacket(
// Stop when we either don't have a valid packet, or it is an
// operation packet.
if ((!pRflPacket->bValidPacketType) ||
((pRflPacket->uiPacketType != RFL_CHANGE_FIELDS_PACKET) &&
(pRflPacket->uiPacketType != RFL_DATA_RECORD_PACKET)))
if (!pRflPacket->bValidPacketType ||
(pRflPacket->uiPacketType != RFL_CHANGE_FIELDS_PACKET &&
pRflPacket->uiPacketType != RFL_DATA_RECORD_PACKET &&
pRflPacket->uiPacketType != RFL_ENC_DATA_RECORD_PACKET &&
pRflPacket->uiPacketType != RFL_DATA_RECORD_PACKET_VER_3))
{
*pbFoundNext = TRUE;
break;
@@ -1718,7 +1759,8 @@ RCODE RflGetNextNode(
// Create the packet node.
if ((pPacketNode = GedNodeCreate( pPool, RFL_PACKET_FIELD, 0, &rc)) == NULL)
if ((pPacketNode = GedNodeCreate( pPool, RFL_PACKET_FIELD,
0, &rc)) == NULL)
{
goto Exit;
}
@@ -1791,9 +1833,11 @@ FSTATIC RCODE rflGetPrevOpPacket(
// Stop when we either don't have a valid packet, or it is an
// operation packet.
if ((!pRflPacket->bValidPacketType) ||
((pRflPacket->uiPacketType != RFL_CHANGE_FIELDS_PACKET) &&
(pRflPacket->uiPacketType != RFL_DATA_RECORD_PACKET)))
if (!pRflPacket->bValidPacketType ||
(pRflPacket->uiPacketType != RFL_CHANGE_FIELDS_PACKET &&
pRflPacket->uiPacketType != RFL_DATA_RECORD_PACKET &&
pRflPacket->uiPacketType != RFL_ENC_DATA_RECORD_PACKET &&
pRflPacket->uiPacketType != RFL_DATA_RECORD_PACKET_VER_3))
{
*pbFoundPrev = TRUE;
break;
@@ -1883,7 +1927,8 @@ RCODE RflGetPrevNode(
// Create the packet node.
if ((pPacketNode = GedNodeCreate( pPool, RFL_PACKET_FIELD, 0, &rc)) == NULL)
if ((pPacketNode = GedNodeCreate( pPool, RFL_PACKET_FIELD,
0, &rc)) == NULL)
{
goto Exit;
}
@@ -1984,7 +2029,8 @@ RCODE RflPositionToNode(
// Create the packet node.
if ((pPacketNode = GedNodeCreate( pPool, RFL_PACKET_FIELD, 0, &rc)) == NULL)
if ((pPacketNode = GedNodeCreate( pPool, RFL_PACKET_FIELD,
0, &rc)) == NULL)
{
goto Exit;
}
@@ -2085,7 +2131,7 @@ FSTATIC RCODE rflPutNum(
POOL * pPool,
NODE * pLinkToNode,
FLMBOOL bPutAsSib,
FLMUINT uiTagNum,
eDispTag eDispTag,
FLMUINT uiNum,
FLMUINT uiOffset,
FLMUINT uiNumExpectedBytes,
@@ -2102,7 +2148,7 @@ FSTATIC RCODE rflPutNum(
// Create the number node.
if ((pNode = GedNodeCreate( pPool, uiTagNum, uiOffset, &rc)) == NULL)
if ((pNode = GedNodeCreate( pPool, makeTagNum( eDispTag), uiOffset, &rc)) == NULL)
{
goto Exit;
}
@@ -2133,7 +2179,8 @@ FSTATIC RCODE rflPutNum(
// Create the number of bytes valid node.
if ((pNode2 = GedNodeCreate( pPool, RFL_NUM_BYTES_VALID_FIELD,
if ((pNode2 = GedNodeCreate( pPool,
makeTagNum( RFL_NUM_BYTES_VALID_FIELD),
0, &rc)) == NULL)
{
goto Exit;
@@ -2171,97 +2218,103 @@ FSTATIC RCODE rflExpandPacketHdr(
)
{
RCODE rc = FERR_OK;
FLMUINT uiTagNum;
eDispTag eTagNum;
NODE * pParent;
FLMUINT uiOffset;
NODE * pNode;
if (!pRflPacket->bValidPacketType)
{
uiTagNum = RFL_UNKNOWN_PACKET_FIELD;
eTagNum = RFL_UNKNOWN_PACKET_FIELD;
}
else
{
switch (pRflPacket->uiPacketType)
{
case RFL_TRNS_BEGIN_PACKET:
uiTagNum = RFL_TRNS_BEGIN_FIELD;
eTagNum = RFL_TRNS_BEGIN_FIELD;
break;
case RFL_TRNS_BEGIN_EX_PACKET:
uiTagNum = RFL_TRNS_BEGIN_EX_FIELD;
eTagNum = RFL_TRNS_BEGIN_EX_FIELD;
break;
case RFL_TRNS_COMMIT_PACKET:
uiTagNum = RFL_TRNS_COMMIT_FIELD;
eTagNum = RFL_TRNS_COMMIT_FIELD;
break;
case RFL_TRNS_ABORT_PACKET:
uiTagNum = RFL_TRNS_ABORT_FIELD;
eTagNum = RFL_TRNS_ABORT_FIELD;
break;
case RFL_ADD_RECORD_PACKET:
case RFL_ADD_RECORD_PACKET_VER_2:
uiTagNum = RFL_RECORD_ADD_FIELD;
eTagNum = RFL_RECORD_ADD_FIELD;
break;
case RFL_MODIFY_RECORD_PACKET:
case RFL_MODIFY_RECORD_PACKET_VER_2:
uiTagNum = RFL_RECORD_MODIFY_FIELD;
eTagNum = RFL_RECORD_MODIFY_FIELD;
break;
case RFL_DELETE_RECORD_PACKET:
case RFL_DELETE_RECORD_PACKET_VER_2:
uiTagNum = RFL_RECORD_DELETE_FIELD;
break;
case RFL_ENC_DATA_RECORD_PACKET:
uiTagNum = RFL_ENC_FIELD;
eTagNum = RFL_RECORD_DELETE_FIELD;
break;
case RFL_RESERVE_DRN_PACKET:
uiTagNum = RFL_RESERVE_DRN_FIELD;
eTagNum = RFL_RESERVE_DRN_FIELD;
break;
case RFL_CHANGE_FIELDS_PACKET:
uiTagNum = RFL_CHANGE_FIELDS_FIELD;
eTagNum = RFL_CHANGE_FIELDS_FIELD;
break;
case RFL_DATA_RECORD_PACKET:
uiTagNum = RFL_DATA_RECORD_FIELD;
eTagNum = RFL_DATA_RECORD_FIELD;
break;
case RFL_ENC_DATA_RECORD_PACKET:
eTagNum = RFL_ENC_DATA_RECORD_FIELD;
break;
case RFL_DATA_RECORD_PACKET_VER_3:
eTagNum = RFL_DATA_RECORD3_FIELD;
break;
case RFL_INDEX_SET_PACKET:
uiTagNum = RFL_INDEX_SET_FIELD;
eTagNum = RFL_INDEX_SET_FIELD;
break;
case RFL_INDEX_SET_PACKET_VER_2:
uiTagNum = RFL_INDEX_SET2_FIELD;
eTagNum = RFL_INDEX_SET2_FIELD;
break;
case RFL_BLK_CHAIN_FREE_PACKET:
uiTagNum = RFL_BLK_CHAIN_FREE_FIELD;
eTagNum = RFL_BLK_CHAIN_FREE_FIELD;
break;
case RFL_START_UNKNOWN_PACKET:
uiTagNum = RFL_START_UNKNOWN_FIELD;
eTagNum = RFL_START_UNKNOWN_FIELD;
break;
case RFL_UNKNOWN_PACKET:
uiTagNum = RFL_UNKNOWN_USER_PACKET_FIELD;
eTagNum = RFL_UNKNOWN_USER_PACKET_FIELD;
break;
case RFL_REDUCE_PACKET:
uiTagNum = RFL_REDUCE_PACKET_FIELD;
eTagNum = RFL_REDUCE_PACKET_FIELD;
break;
case RFL_UPGRADE_PACKET:
uiTagNum = RFL_UPGRADE_PACKET_FIELD;
eTagNum = RFL_UPGRADE_PACKET_FIELD;
break;
case RFL_INDEX_SUSPEND_PACKET:
uiTagNum = RFL_INDEX_SUSPEND_FIELD;
eTagNum = RFL_INDEX_SUSPEND_FIELD;
break;
case RFL_INDEX_RESUME_PACKET:
uiTagNum = RFL_INDEX_RESUME_FIELD;
eTagNum = RFL_INDEX_RESUME_FIELD;
break;
case RFL_WRAP_KEY_PACKET:
uiTagNum = RFL_WRAP_KEY_FIELD;
eTagNum = RFL_WRAP_KEY_FIELD;
break;
case RFL_ENABLE_ENCRYPTION_PACKET:
uiTagNum = RFL_ENABLE_ENCRYPTION_FIELD;
eTagNum = RFL_ENABLE_ENCRYPTION_FIELD;
break;
case RFL_CONFIG_SIZE_EVENT_PACKET:
eTagNum = RFL_CONFIG_SIZE_EVENT_FIELD;
break;
default:
uiTagNum = RFL_UNKNOWN_PACKET_FIELD;
eTagNum = RFL_UNKNOWN_PACKET_FIELD;
break;
}
}
// Create the packet node.
if ((pParent = GedNodeCreate( pPool, uiTagNum,
if ((pParent = GedNodeCreate( pPool, makeTagNum( eTagNum),
pRflPacket->uiFileOffset, &rc)) == NULL)
{
goto Exit;
@@ -2270,7 +2323,7 @@ FSTATIC RCODE rflExpandPacketHdr(
// If packet type is unknown, put it into the data portion of the
// field - if we have it.
if ((uiTagNum == RFL_UNKNOWN_PACKET_FIELD) &&
if ((eTagNum == RFL_UNKNOWN_PACKET_FIELD) &&
(pRflPacket->bHavePacketType))
{
if (RC_BAD( rc = GedPutUINT( pPool, pParent,
@@ -3132,8 +3185,8 @@ FSTATIC RCODE rflExpandDataPacket(
{
for (;;)
{
if ((pTmpNode = GedNodeCreate( pPool, RFL_MORE_DATA_FIELD,
0, &rc)) == 0)
if ((pTmpNode = GedNodeCreate( pPool,
makeTagNum( RFL_MORE_DATA_FIELD), 0, &rc)) == 0)
{
goto Exit;
}
@@ -3155,7 +3208,7 @@ FSTATIC RCODE rflExpandDataPacket(
// Create a GEDCOM node.
if ((pTagNode = GedNodeCreate( pPool, RFL_MORE_DATA_FIELD,
if ((pTagNode = GedNodeCreate( pPool, makeTagNum( RFL_MORE_DATA_FIELD),
uiOffset, &rc)) == NULL)
{
goto Exit;
@@ -3227,14 +3280,25 @@ FSTATIC RCODE rflExpandDataPacket(
pucPacketBody += uiLevelLen;
uiBytesRead -= uiLevelLen;
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 2, &uiDataLen, &uiDataLenLen);
if (uiPacketType == RFL_DATA_RECORD_PACKET_VER_3)
{
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 4, &uiDataLen, &uiDataLenLen);
if (uiDataLenLen < 4)
{
bIncompleteHdr = TRUE;
}
}
else
{
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 2, &uiDataLen, &uiDataLenLen);
if (uiDataLenLen < 2)
{
bIncompleteHdr = TRUE;
}
}
pucPacketBody += uiDataLenLen;
uiBytesRead -= uiDataLenLen;
if (uiDataLenLen < 2)
{
bIncompleteHdr = TRUE;
}
// If we have an encrypted packet, handle the remaining fields here
@@ -3244,7 +3308,8 @@ FSTATIC RCODE rflExpandDataPacket(
uiEncDefIDLen = 0;
uiEncLen = 0;
uiEncLenLen = 0;
if (uiPacketType == RFL_ENC_DATA_RECORD_PACKET)
if (uiPacketType == RFL_ENC_DATA_RECORD_PACKET ||
uiPacketType == RFL_DATA_RECORD_PACKET_VER_3)
{
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 1, &uiEncrypted, &uiEncryptedLen);
pucPacketBody += uiEncryptedLen;
@@ -3260,14 +3325,24 @@ FSTATIC RCODE rflExpandDataPacket(
pucPacketBody += uiEncDefIDLen;
uiBytesRead -= uiEncDefIDLen;
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 2, &uiEncLen, &uiEncLenLen);
if (uiPacketType == RFL_DATA_RECORD_PACKET_VER_3)
{
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 4, &uiEncLen, &uiEncLenLen);
if (uiEncLenLen < 4)
{
bIncompleteHdr = TRUE;
}
}
else
{
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 2, &uiEncLen, &uiEncLenLen);
if (uiEncLenLen < 2)
{
bIncompleteHdr = TRUE;
}
}
pucPacketBody += uiEncLenLen;
uiBytesRead -= uiEncLenLen;
if (uiEncLenLen < 2)
{
bIncompleteHdr = TRUE;
}
}
}
@@ -3307,14 +3382,26 @@ FSTATIC RCODE rflExpandDataPacket(
}
uiOffset += uiLevelLen;
if ( RC_BAD( rc = rflPutNum( pPool, pTmpNode, TRUE, RFL_DATA_LEN_FIELD,
uiDataLen, uiOffset, 2, uiDataLenLen, &pTmpNode)))
if (uiPacketType == RFL_DATA_RECORD_PACKET_VER_3)
{
goto Exit;
if ( RC_BAD( rc = rflPutNum( pPool, pTmpNode, TRUE, RFL_DATA_LEN_FIELD,
uiDataLen, uiOffset, 4, uiDataLenLen, &pTmpNode)))
{
goto Exit;
}
}
else
{
if ( RC_BAD( rc = rflPutNum( pPool, pTmpNode, TRUE, RFL_DATA_LEN_FIELD,
uiDataLen, uiOffset, 2, uiDataLenLen, &pTmpNode)))
{
goto Exit;
}
}
uiOffset += uiDataLenLen;
if (uiPacketType == RFL_ENC_DATA_RECORD_PACKET)
if (uiPacketType == RFL_ENC_DATA_RECORD_PACKET ||
uiPacketType == RFL_DATA_RECORD_PACKET_VER_3)
{
if ( RC_BAD( rc = rflPutNum( pPool, pTmpNode, TRUE, RFL_ENC_FIELD,
uiEncrypted, uiOffset, 1, uiEncryptedLen, &pTmpNode)))
@@ -3332,10 +3419,21 @@ FSTATIC RCODE rflExpandDataPacket(
}
uiOffset += uiEncDefIDLen;
if ( RC_BAD( rc = rflPutNum( pPool, pTmpNode, TRUE, RFL_ENC_DATA_LEN_FIELD,
uiEncLen, uiOffset, 2, uiEncLenLen, &pTmpNode)))
if (uiPacketType == RFL_DATA_RECORD_PACKET_VER_3)
{
goto Exit;
if ( RC_BAD( rc = rflPutNum( pPool, pTmpNode, TRUE, RFL_ENC_DATA_LEN_FIELD,
uiEncLen, uiOffset, 4, uiEncLenLen, &pTmpNode)))
{
goto Exit;
}
}
else
{
if ( RC_BAD( rc = rflPutNum( pPool, pTmpNode, TRUE, RFL_ENC_DATA_LEN_FIELD,
uiEncLen, uiOffset, 2, uiEncLenLen, &pTmpNode)))
{
goto Exit;
}
}
uiOffset += uiEncLenLen;
@@ -3351,7 +3449,7 @@ FSTATIC RCODE rflExpandDataPacket(
// Create a GEDCOM node for the data.
if ((pDataNode = GedNodeCreate( pPool, RFL_DATA_FIELD,
if ((pDataNode = GedNodeCreate( pPool, makeTagNum( RFL_DATA_FIELD),
uiOffset, &rc)) == NULL)
{
goto Exit;
@@ -3502,7 +3600,7 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
FLMBYTE * pucPacketBody;
FLMUINT uiBytesRead;
FLMUINT uiOffset;
FLMUINT uiChangeTagNum;
eDispTag eChangeTagNum;
FLMUINT uiDataTagNum;
FLMUINT uiDataLen;
FLMUINT uiChangeType;
@@ -3511,6 +3609,7 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
FLMUINT uiNodeDataLen;
FLMUINT uiTmp;
FLMUINT uiLen;
FLMUINT uiDataLenLen;
// Output the packet header.
@@ -3569,7 +3668,7 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
// Create a dummy change node.
if ((pChangeNode = GedNodeCreate( pPool, RFL_MORE_DATA_FIELD,
if ((pChangeNode = GedNodeCreate( pPool, makeTagNum( RFL_MORE_DATA_FIELD),
0, &rc)) == 0)
{
goto Exit;
@@ -3582,30 +3681,42 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
switch (uiChangeType)
{
case RFL_INSERT_FIELD:
uiChangeTagNum = RFL_INSERT_FLD_FIELD;
eChangeTagNum = RFL_INSERT_FLD_FIELD;
break;
case RFL_MODIFY_FIELD:
uiChangeTagNum = RFL_MODIFY_FLD_FIELD;
eChangeTagNum = RFL_MODIFY_FLD_FIELD;
break;
case RFL_DELETE_FIELD:
uiChangeTagNum = RFL_DELETE_FLD_FIELD;
eChangeTagNum = RFL_DELETE_FLD_FIELD;
break;
case RFL_END_FIELD_CHANGES:
uiChangeTagNum = RFL_END_CHANGES_FIELD;
eChangeTagNum = RFL_END_CHANGES_FIELD;
break;
// Added
case RFL_INSERT_ENC_FIELD:
uiChangeTagNum = RFL_INSERT_ENC_FLD_FIELD;
eChangeTagNum = RFL_INSERT_ENC_FLD_FIELD;
break;
case RFL_MODIFY_ENC_FIELD:
uiChangeTagNum = RFL_MODIFY_ENC_FLD_FIELD;
eChangeTagNum = RFL_MODIFY_ENC_FLD_FIELD;
break;
case RFL_INSERT_LARGE_FIELD:
eChangeTagNum = RFL_INSERT_LARGE_FLD_FIELD;
break;
case RFL_INSERT_ENC_LARGE_FIELD:
eChangeTagNum = RFL_INSERT_ENC_LARGE_FLD_FIELD;
break;
case RFL_MODIFY_LARGE_FIELD:
eChangeTagNum = RFL_MODIFY_LARGE_FLD_FIELD;
break;
case RFL_MODIFY_ENC_LARGE_FIELD:
eChangeTagNum = RFL_MODIFY_ENC_LARGE_FLD_FIELD;
break;
default:
uiChangeTagNum = RFL_UNKNOWN_CHANGE_TYPE_FIELD;
eChangeTagNum = RFL_UNKNOWN_CHANGE_TYPE_FIELD;
break;
}
if (RC_BAD( rc = rflPutNum( pPool, pLastNode, TRUE,
uiChangeTagNum,
eChangeTagNum,
uiChangeType, uiOffset,
1, 1, &pChangeNode)))
{
@@ -3632,7 +3743,9 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
uiDataLen = 0;
if (uiChangeType == RFL_INSERT_FIELD ||
uiChangeType == RFL_INSERT_ENC_FIELD)
uiChangeType == RFL_INSERT_ENC_FIELD ||
uiChangeType == RFL_INSERT_LARGE_FIELD ||
uiChangeType == RFL_INSERT_ENC_LARGE_FIELD)
{
// Output tag number.
@@ -3682,12 +3795,16 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
// Output data length
uiDataLenLen = (uiChangeType == RFL_INSERT_LARGE_FIELD ||
uiChangeType == RFL_INSERT_ENC_LARGE_FIELD)
? 4
: 2;
rflGetNumValue( pucPacketBody, uiBytesRead, 0,
2, &uiTmp, &uiLen);
uiDataLenLen, &uiTmp, &uiLen);
if (RC_BAD( rc = rflPutNum( pPool, pChangeNode, FALSE,
RFL_DATA_LEN_FIELD,
uiTmp, uiOffset,
2, uiLen, NULL)))
uiDataLenLen, uiLen, NULL)))
{
goto Exit;
}
@@ -3700,7 +3817,8 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
}
uiDataTagNum = RFL_DATA_FIELD;
if ( uiChangeType == RFL_INSERT_ENC_FIELD)
if (uiChangeType == RFL_INSERT_ENC_FIELD ||
uiChangeType == RFL_INSERT_ENC_LARGE_FIELD)
{
// Output the encryption definition id
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 2, &uiTmp, &uiLen);
@@ -3714,9 +3832,9 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
uiBytesRead -= uiLen;
// Output the encrypted data length
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 2, &uiTmp, &uiLen);
rflGetNumValue( pucPacketBody, uiBytesRead, 0, uiDataLenLen, &uiTmp, &uiLen);
if ( RC_BAD( rc = rflPutNum( pPool, pChangeNode, FALSE, RFL_ENC_DATA_LEN_FIELD,
uiTmp, uiOffset, 2, uiLen, NULL)))
uiTmp, uiOffset, uiDataLenLen, uiLen, NULL)))
{
goto Exit;
}
@@ -3730,7 +3848,9 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
}
}
else if (uiChangeType == RFL_MODIFY_FIELD ||
uiChangeType == RFL_MODIFY_ENC_FIELD)
uiChangeType == RFL_MODIFY_ENC_FIELD ||
uiChangeType == RFL_MODIFY_LARGE_FIELD ||
uiChangeType == RFL_MODIFY_ENC_LARGE_FIELD)
{
// Output change bytes type
@@ -3763,24 +3883,29 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
// Output data length
uiDataLenLen = (uiChangeType == RFL_MODIFY_LARGE_FIELD ||
uiChangeType == RFL_MODIFY_ENC_LARGE_FIELD)
? 4
: 2;
rflGetNumValue( pucPacketBody, uiBytesRead, 0,
2, &uiTmp, &uiLen);
uiDataLenLen, &uiTmp, &uiLen);
if (RC_BAD( rc = rflPutNum( pPool, pChangeNode, FALSE,
RFL_DATA_LEN_FIELD,
uiTmp, uiOffset,
2, uiLen, NULL)))
uiDataLenLen, uiLen, NULL)))
{
goto Exit;
}
uiOffset += uiLen;
pucPacketBody += uiLen;
uiBytesRead -= uiLen;
if (uiLen == 2)
if (uiLen == uiDataLenLen)
{
uiDataLen = uiTmp;
}
uiDataTagNum = RFL_DATA_FIELD;
if ( uiChangeType == RFL_MODIFY_ENC_FIELD)
if (uiChangeType == RFL_MODIFY_ENC_FIELD ||
uiChangeType == RFL_MODIFY_ENC_LARGE_FIELD)
{
// Output the encryption definition id
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 2, &uiTmp, &uiLen);
@@ -3794,16 +3919,16 @@ FSTATIC RCODE rflExpandChangeFieldsPacket(
uiBytesRead -= uiLen;
// Output the encrypted data length
rflGetNumValue( pucPacketBody, uiBytesRead, 0, 2, &uiTmp, &uiLen);
rflGetNumValue( pucPacketBody, uiBytesRead, 0, uiDataLenLen, &uiTmp, &uiLen);
if ( RC_BAD( rc = rflPutNum( pPool, pChangeNode, FALSE, RFL_ENC_DATA_LEN_FIELD,
uiTmp, uiOffset, 2, uiLen, NULL)))
uiTmp, uiOffset, uiDataLenLen, uiLen, NULL)))
{
goto Exit;
}
uiOffset += uiLen;
pucPacketBody += uiLen;
uiBytesRead -= uiLen;
if (uiLen == 2)
if (uiLen == uiDataLenLen)
{
uiDataLen = uiTmp;
}
@@ -3918,8 +4043,10 @@ FSTATIC RCODE rflExpandRecordPackets(
if (uiPacketType == 0xFF)
{
if ((RflPacket.uiPacketType == RFL_DATA_RECORD_PACKET) ||
(RflPacket.uiPacketType == RFL_CHANGE_FIELDS_PACKET))
if (RflPacket.uiPacketType == RFL_DATA_RECORD_PACKET ||
RflPacket.uiPacketType == RFL_ENC_DATA_RECORD_PACKET ||
RflPacket.uiPacketType == RFL_DATA_RECORD_PACKET_VER_3 ||
RflPacket.uiPacketType == RFL_CHANGE_FIELDS_PACKET)
{
uiPacketType = RflPacket.uiPacketType;
}
@@ -3931,8 +4058,8 @@ FSTATIC RCODE rflExpandRecordPackets(
// Stop when we don't have a valid data packet.
if ((!RflPacket.bValidPacketType) ||
(RflPacket.uiPacketType != uiPacketType))
if (!RflPacket.bValidPacketType ||
RflPacket.uiPacketType != uiPacketType)
{
break;
}
@@ -3942,7 +4069,9 @@ FSTATIC RCODE rflExpandRecordPackets(
? (FLMBOOL)TRUE
: (FLMBOOL)FALSE);
if (uiPacketType == RFL_DATA_RECORD_PACKET || uiPacketType == RFL_ENC_DATA_RECORD_PACKET)
if (uiPacketType == RFL_DATA_RECORD_PACKET ||
uiPacketType == RFL_ENC_DATA_RECORD_PACKET ||
uiPacketType == RFL_DATA_RECORD_PACKET_VER_3)
{
if (RC_BAD( rc = rflExpandDataPacket( &RflPacket, pPool,
bOutputPacket, uiPacketType,
@@ -4127,7 +4256,7 @@ FSTATIC RCODE rflExpandRecOpPacket(
{
if (RC_BAD( rc = rflExpandRecordPackets( pPool,
pRflPacket->uiNextPacketAddress,
RFL_DATA_RECORD_PACKET,
0xFF,
&pParent, uiPacketOffset)))
{
goto Exit;
@@ -4220,7 +4349,7 @@ FSTATIC RCODE rflExpandUnkPacket(
// Create a GEDCOM node for the data.
if ((pTmpNode2 = GedNodeCreate( pPool, RFL_DATA_FIELD,
if ((pTmpNode2 = GedNodeCreate( pPool, makeTagNum( RFL_DATA_FIELD),
uiOffset, &rc)) == NULL)
{
goto Exit;
@@ -4300,7 +4429,7 @@ FSTATIC RCODE rflExpandEncryptionPacket(
// Create a data node, if there is data to output.
if ((pDataNode = GedNodeCreate( pPool, RFL_DATA_FIELD,
if ((pDataNode = GedNodeCreate( pPool, makeTagNum( RFL_DATA_FIELD),
uiOffset, &rc)) == NULL)
{
goto Exit;
@@ -4344,6 +4473,91 @@ Exit:
return( rc);
}
/********************************************************************
Desc: Expands a config rfl size packet (RFL_CONFIG_SIZE_EVENT_PACKET)
*********************************************************************/
FSTATIC RCODE rflExpandConfigSizePacket(
RFL_PACKET * pRflPacket,
POOL * pPool,
NODE ** ppForest
)
{
RCODE rc = FERR_OK;
void * pvMark = GedPoolMark( pPool);
NODE * pParent = NULL;
NODE * pLastNode;
FLMUINT uiOffset;
// Output generic packet header information.
if (RC_BAD( rc = rflExpandPacketHdr( pRflPacket, pPool, &pParent)))
{
goto Exit;
}
// Output transaction ID
uiOffset = pRflPacket->uiFileOffset + RFL_PACKET_OVERHEAD;
if (RC_BAD( rc = rflPutNum( pPool, pParent, FALSE,
RFL_TRANS_ID_FIELD,
pRflPacket->uiTransID, uiOffset,
4, pRflPacket->uiTransIDBytes, &pLastNode)))
{
goto Exit;
}
uiOffset += 4;
// Output size threshhold
if (RC_BAD( rc = rflPutNum( pPool, pParent, FALSE,
RFL_SIZE_THRESHOLD_FIELD,
pRflPacket->uiSizeThreshold, uiOffset,
4, pRflPacket->uiSizeThresholdBytes, &pLastNode)))
{
goto Exit;
}
uiOffset += 4;
// Output time interval
if (RC_BAD( rc = rflPutNum( pPool, pParent, FALSE,
RFL_TIME_INTERVAL_FIELD,
pRflPacket->uiTimeInterval, uiOffset,
4, pRflPacket->uiTimeInterval, &pLastNode)))
{
goto Exit;
}
uiOffset += 4;
// Output size interval
if (RC_BAD( rc = rflPutNum( pPool, pParent, FALSE,
RFL_SIZE_INTERVAL_FIELD,
pRflPacket->uiSizeInterval, uiOffset,
4, pRflPacket->uiSizeInterval, &pLastNode)))
{
goto Exit;
}
uiOffset += 4;
Exit:
if (RC_BAD( rc) || !pParent)
{
if (rc == FERR_IO_END_OF_FILE)
{
rc = FERR_OK;
}
*ppForest = NULL;
GedPoolReset( pPool, pvMark);
}
else
{
*ppForest = pParent;
}
return( rc);
}
/********************************************************************
Desc: Expands a packet into multiple GEDCOM nodes for display of
all of the subcomponents.
@@ -4401,6 +4615,7 @@ RCODE RflExpandPacket(
case RFL_CHANGE_FIELDS_PACKET:
case RFL_DATA_RECORD_PACKET:
case RFL_ENC_DATA_RECORD_PACKET:
case RFL_DATA_RECORD_PACKET_VER_3:
f_memcpy( &tmpPacket, pRflPacket, sizeof( RFL_PACKET));
bFoundPrev = FALSE;
if (RC_BAD( rc = rflGetPrevOpPacket( &tmpPacket, &bFoundPrev)))
@@ -4412,7 +4627,8 @@ RCODE RflExpandPacket(
uiDataLen = 0xFFFF;
uiLevel = 0;
if (pRflPacket->uiPacketType == RFL_DATA_RECORD_PACKET ||
pRflPacket->uiPacketType == RFL_ENC_DATA_RECORD_PACKET)
pRflPacket->uiPacketType == RFL_ENC_DATA_RECORD_PACKET ||
pRflPacket->uiPacketType == RFL_DATA_RECORD_PACKET_VER_3)
{
rc = rflExpandDataPacket( pRflPacket, pPool,
TRUE, pRflPacket->uiPacketType,
@@ -4457,6 +4673,9 @@ RCODE RflExpandPacket(
case RFL_ENABLE_ENCRYPTION_PACKET:
rc = rflExpandEncryptionPacket( pRflPacket, pPool, &pForest);
goto Exit;
case RFL_CONFIG_SIZE_EVENT_PACKET:
rc = rflExpandConfigSizePacket( pRflPacket, pPool, &pForest);
goto Exit;
default:
rc = rflExpandUnkPacket( pRflPacket, pPool, &pForest);
goto Exit;