📄 ltkchecksumgenerate.cpp
字号:
//Caluculate Checksum for the Modiel File Data.
nCRC = getCRC(modelFileData);
//Convert the check sum into Hexadecimal Value.
sprintf(chSum, "%x", nCRC);
tempHeaderInfo[CKS] = chSum;
ofstream writeFile(mdtFilePath.c_str(),ios::out|ios::binary);
stringStringMap::const_iterator tempHeadInfoIter = tempHeaderInfo.begin();
stringStringMap::const_iterator tempHeadInfoIterEnd = tempHeaderInfo.end();
for(; tempHeadInfoIter != tempHeadInfoIterEnd ; ++tempHeadInfoIter)
{
if((tempHeadInfoIter->first!=CKS) && (tempHeadInfoIter->first!=HEADERLEN)
&& (tempHeadInfoIter->first!=DATAOFFSET))
{
strHeaderContents2 <<"<"<<tempHeadInfoIter->first
<<"="<<tempHeadInfoIter->second<<">";
}
}
strHeaderContents1<<"<"<<CKS<<"="<<chSum<<">"<<"<"<<HEADERLEN<<"=";
string initialStrHeader = strHeaderContents1.str() + strHeaderContents2.str();
char strHeaderLength[CKSUM_HDR_STR_LEN], strOffsetLength[CKSUM_HDR_STR_LEN];
//Get the Length of the header.( 15 is for length of ><DATAOFFSET=> ).
sprintf(strHeaderLength, "%d", initialStrHeader.length()+14);
sprintf(strOffsetLength, "%d", initialStrHeader.length()+15);
//Add the length of the pre Header length and 1 for the last ">" char.
sprintf(strHeaderLength, "%d", initialStrHeader.length()+strlen(strHeaderLength)+strlen(strOffsetLength)+14);
sprintf(strOffsetLength, "%d", initialStrHeader.length()+strlen(strHeaderLength)+strlen(strOffsetLength)+15);
strHeaderContents1<<strHeaderLength<<">";
strHeaderContents1<<"<"<<DATAOFFSET<<"="<<strOffsetLength<<">";
writeFile<<strHeaderContents1.str();
writeFile<<strHeaderContents2.str();
writeFile.write(modelFileData, modelFileInfoSize);
writeFile.close();
if( modelFileData != NULL)
{
delete [] modelFileData;
modelFileData = NULL;
}
}
catch (LTKException e)
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<"Error : "<<EFILE_OPEN_ERROR<<":"<< e.getExceptionMessage()<<
"LTKCheckSumGenerate::addHeaderInfo()"<<endl;
LTKReturnError(EFILE_OPEN_ERROR);
}
LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
" Exiting: LTKCheckSumGenerate::addHeaderInfo()" << endl;
return SUCCESS;
}
stringStringMap LTKCheckSumGenerate::updateHeaderWithMandatoryFields(const stringStringMap& headerInfo)
{
LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
" Entering: LTKCheckSumGenerate::updateHeaderWithMandatoryFields()" << endl;
long testEndian = 1;
string comment="";
int commentLen=0;
stringStringMap tempHeaderInfo = headerInfo;
if(tempHeaderInfo.find(COMMENT)!=tempHeaderInfo.end())
{
commentLen=tempHeaderInfo[COMMENT].length();
}
// Pushing keys to the tempHeaderInfo
ostringstream tempString;
string platformInfoString = "";
string timeString ;
m_OSUtilPtr->getSystemTimeString(timeString);
tempString << timeString;
tempHeaderInfo["CKS"] = "";
tempHeaderInfo["HEADERLEN"] = "";
tempHeaderInfo["DATAOFFSET"] = "";
tempHeaderInfo["CREATETIME"] = tempString.str();
tempHeaderInfo["MODTIME"] = tempString.str();
// get Platform Name
m_OSUtilPtr->getPlatformName(platformInfoString);
tempHeaderInfo["PLATFORM"] = platformInfoString;
//get processor architechure
platformInfoString = "";
m_OSUtilPtr->getProcessorArchitechure(platformInfoString);
tempHeaderInfo["PROCESSOR_ARCHITEC"] = platformInfoString;
// get OS info
platformInfoString = "";
m_OSUtilPtr->getOSInfo(platformInfoString);
tempHeaderInfo["OSVERSION"] = platformInfoString;
tempHeaderInfo["HEADERVER"] = HEADERVERSION;
tempString.str("");
tempString << commentLen;
tempHeaderInfo["COMMENTLEN"] = tempString.str();
tempString.str("");
tempString << sizeof(int);
tempHeaderInfo["SIZEOFINT"] = tempString.str();
tempString.str("");
tempString << sizeof(unsigned int);
tempHeaderInfo["SIZEOFUINT"] = tempString.str();
tempString.str("");
tempString << sizeof(short int);
tempHeaderInfo["SIZEOFSHORTINT"] = tempString.str();
tempString.str("");
tempString << sizeof(float);
tempHeaderInfo["SIZEOFFLOAT"] = tempString.str();
tempString.str("");
tempString << sizeof(char);
tempHeaderInfo["SIZEOFCHAR"] = tempString.str();
// checking for indian ness
if(!(*((char *)(&testEndian))))
{
tempHeaderInfo["BYTEORDER"] = "BE";
}
else
{
tempHeaderInfo["BYTEORDER"] = "LE";
}
LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
" Exiting: LTKCheckSumGenerate::updateHeaderWithMandatoryFields()" << endl;
return tempHeaderInfo;
}
/****************************************************************************
* AUTHOR : Vijayakumara M
* DATE : 26 July 2005
* NAME : readMDTHeader
* DESCRIPTION : This function is used to check for checking the file integriry.
* ARGUMENTS :
* RETURNS :
* NOTES :
* CHANGE HISTROY
* Author Date Description
*****************************************************************************/
int LTKCheckSumGenerate::readMDTHeader(const string &mdtFilePath,
stringStringMap &headerSequence)
{
LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
" Entering: LTKCheckSumGenerate::readMDTHeader()" << endl;
int headerLen, nCRC;
long dSize, actDataSize;
char chSum[CKSUM_HDR_STR_LEN], *sbuf,*headerData, headerInfo[51];
stringVector strTokens;
ifstream mdtFileHandle(mdtFilePath.c_str(), ios::in | ios::binary);
if(!mdtFileHandle)
{
LOG( LTKLogger::LTK_LOGLEVEL_ERR)
<<"Error : "<< EMODEL_DATA_FILE_OPEN <<":"<< getErrorMessage(EMODEL_DATA_FILE_OPEN)
<<"LTKCheckSumGenerate::readMDTHeader()" <<endl;
LTKReturnError(EMODEL_DATA_FILE_OPEN);
}
mdtFileHandle.read(headerInfo, 50);
char *ptr = strstr(headerInfo, HEADERLEN);
if(ptr == NULL)
{
LOG( LTKLogger::LTK_LOGLEVEL_ERR)
<<"Error : "<< EMODEL_DATA_FILE_FORMAT <<":"<< getErrorMessage(EMODEL_DATA_FILE_FORMAT)
<<"LTKCheckSumGenerate::readMDTHeader()" <<endl;
LTKReturnError(EMODEL_DATA_FILE_FORMAT);
}
strtok(ptr, "=");
char *headerLenPtr = strtok( NULL , ">" );
if(headerLenPtr == NULL)
{
LOG( LTKLogger::LTK_LOGLEVEL_ERR)
<<"Error : "<< EMODEL_DATA_FILE_FORMAT <<":"<< getErrorMessage(EMODEL_DATA_FILE_FORMAT)
<<"LTKCheckSumGenerate::readMDTHeader()"<<endl;
LTKReturnError(EMODEL_DATA_FILE_FORMAT);
}
headerLen = atoi(headerLenPtr);
mdtFileHandle.seekg(0, ios::beg);
headerData = new char [headerLen+1];
memset(headerData, '\0', headerLen+1);
mdtFileHandle.read(headerData, headerLen);
LTKStringUtil::tokenizeString(headerData, TOKENIZE_DELIMITER, strTokens);
int strTokensSize = strTokens.size();
for(int indx=0; indx+1 <strTokensSize ;indx=indx+2)
{
headerSequence[strTokens.at(indx)] = strTokens.at(indx+1);
}
// get the file size in bytes
mdtFileHandle.seekg(0,ios::beg);
mdtFileHandle.seekg(0, ios::end);
dSize = mdtFileHandle.tellg();
//Size fo the actual data excluding Header size.
actDataSize=dSize-headerLen+1;
string cks = headerSequence[CKS];
//Allocate memory to read the actual data.
sbuf = new char[actDataSize];
memset(sbuf, '\0', actDataSize);
//Read the file.
mdtFileHandle.seekg(headerLen, ios::beg);
mdtFileHandle.read(sbuf, actDataSize);
//Close the file.
mdtFileHandle.close();
//Caluculate Checksum for the Model File Data.
nCRC = getCRC(sbuf);
sprintf(chSum, "%x", nCRC);
delete [] sbuf;
delete [] headerData;
if(strcmp(cks.c_str(), chSum) != 0)
{
LOG( LTKLogger::LTK_LOGLEVEL_ERR)
<<"Error : "<< EINVALID_INPUT_FORMAT <<":"<< getErrorMessage(EINVALID_INPUT_FORMAT)
<<"LTKCheckSumGenerate::readMDTHeade()r"<<endl;
LTKReturnError(EINVALID_INPUT_FORMAT);
}
LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) <<
" Exiting: LTKCheckSumGenerate::readMDTHeader()" << endl;
return SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -