Ejemplo n.º 1
0
HRESULT CPatchDlg::DownloadFile(CString srvPath,CString savePath,BOOL checkCrc,DWORD crc)
{
	CBkUpdDownloader downloader(TRUE);
	HRESULT hr;
	CBkUpdWebFile file;
	CString sSaveDir=savePath;
	DWORD dwCliCrc=0;
	int i=0;
	CString sFileName;

	PathRemoveFileSpec(sSaveDir.GetBuffer());
	if(!PathIsDirectory(sSaveDir))
		hr=CAppPath::Instance().CreateFullPath(sSaveDir);
	//先比较下载文件是否存在
	if(PathFileExists(savePath))
	{
		dwCliCrc=CalcCrc(savePath);
		if(dwCliCrc!=crc) //校验不通过,重新下载
		{
			goto Download;
		}
		else
		{
			hr=S_OK;
			goto Done;
		}
	}

	Download:
	file.SetFileName(savePath);
	sFileName=PathFindFileName(savePath);
	GetDlgItem(IDC_STC_DOWNLOAD_FILE)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_PGS_DOWNLOAD_FILE)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STC_DOWNLOAD_FILE)->SetWindowText(sFileName);
	do{
		hr = downloader.Download(srvPath, (IBkUpdWebFile*)&file, this);
		dwCliCrc=CalcCrc(savePath);
		i++;
	}
	while(hr==S_OK && checkCrc && i<=nCrc32Retry && dwCliCrc!=crc);
	if(dwCliCrc!=crc && checkCrc)
	{
		if(bCrcChecekUp) bCrcChecekUp=FALSE;
		sCrcHint.AppendFormat(_T("%-38s校验不通过,客户端:%08x,服务端:%08x.\r\n"),
			sFileName,dwCliCrc,crc);
	}

	Done:
	GetDlgItem(IDC_STC_DOWNLOAD_FILE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_PGS_DOWNLOAD_FILE)->ShowWindow(SW_HIDE);
	return hr;
}
bool CIntelHexRec::InitFromString(string str)
{
	string strVal;
	char *pEnds;
	unsigned long uVal;
	int i;
	string::size_type strLen;
	string::size_type start, end;
	start = str.find_first_not_of(' ');
	end = str.find_last_not_of(' ');
	str = str.substr(start, end);
	if ((str.size() < 10) || (str[0] != ':'))
		return false;
	errno = 0;
	// extract size
	strVal = str.substr(1, 2);
	uVal = strtoul(strVal.c_str(), &pEnds, 16);
	if ((*pEnds) || errno || (uVal > 255))
		return false;
	m_Size = (unsigned char)uVal;
	strLen = m_Size * 2 + 11;
	if (str.size() != strLen)
		return false;
	// extract address
	strVal = str.substr(3, 4);
	uVal = strtoul(strVal.c_str(), &pEnds, 16);
	if ((*pEnds) || errno || (uVal > 0xFFFF))
		return false;
	m_Addr = (unsigned short)uVal;
	// extract type
	strVal = str.substr(7, 2);
	uVal = strtoul(strVal.c_str(), &pEnds, 16);
	if ((*pEnds) || errno || (uVal > 4))
		return false;
	m_Type = (unsigned char)uVal;
	// extract data
	for (i = 0; i < m_Size; i++)
	{
		strVal = str.substr(9+i*2, 2);
		uVal = strtoul(strVal.c_str(), &pEnds, 16);
		if ((*pEnds) || errno || (uVal > 0xFF))
			return false;
		m_Data[i] = (unsigned char)uVal;
	}
	// compare crc
	strVal = str.substr(9+m_Size*2, 2);
	uVal = strtoul(strVal.c_str(), &pEnds, 16);
	if ((*pEnds) || errno || (uVal > 0xFF))
		return false;
	if (CalcCrc()!=(unsigned char)uVal)
		return false;
	return true;
}
Ejemplo n.º 3
0
static int
CheckCrc(
     void const     *data,
     unsigned short len,
     unsigned short c1,
     unsigned short c2
) {
     unsigned short      crc1 = 0;
     unsigned short      crc2 = 0;

     CalcCrc(data, len, &crc1, &crc2);
     return ((c1 == crc1) && (c2 == crc2));
}
Ejemplo n.º 4
0
CString CIntelHexRec::GetString()
{
	CString Res, strTmp;
	Res.Format(":%02X%04X%02X", m_Size, m_Addr, m_Type);
	for (int i = 0; i < m_Size; i++)
	{
		strTmp.Format("%02X", m_Data[i]);
		Res+=strTmp;
	}
	strTmp.Format("%02X\n", CalcCrc());
	Res+=strTmp;
	return Res;
}
Ejemplo n.º 5
0
bool CIntelHexRec::InitFromString(CString str)
{
	CString strVal;
	char *pEnds;
	ULONG uVal;
	int strLen, i;
	str.TrimLeft();
	str.TrimRight();
	if ((str.GetLength() < 10) || (str[0] != ':')) 
		return false;
	errno = 0;
	// extract size
	strVal = str.Mid(1, 2);
	uVal = strtoul(strVal, &pEnds, 16);
	if ((*pEnds) || errno || (uVal > 255))
		return false;
	m_Size = (BYTE)uVal;
	strLen = m_Size * 2 + 11;
	if (str.GetLength() != strLen)
		return false;
	// extract address
	strVal = str.Mid(3, 4);
	uVal = strtoul(strVal, &pEnds, 16);
	if ((*pEnds) || errno || (uVal > 0xFFFF))
		return false;
	m_Addr = (USHORT)uVal;
	// extract type
	strVal = str.Mid(7, 2);
	uVal = strtoul(strVal, &pEnds, 16);
	if ((*pEnds) || errno || (uVal > 4))
		return false;
	m_Type = (BYTE)uVal;
	// extract data
	for (i = 0; i < m_Size; i++)
	{
		strVal = str.Mid(9+i*2, 2);
		uVal = strtoul(strVal, &pEnds, 16);
		if ((*pEnds) || errno || (uVal > 0xFF))
			return false;
		m_Data[i] = (BYTE)uVal;
	}
	// compare crc
	strVal = str.Mid(9+m_Size*2, 2);
	uVal = strtoul(strVal, &pEnds, 16);
	if ((*pEnds) || errno || (uVal > 0xFF))
		return false;
	if (CalcCrc()!=(BYTE)uVal)
		return false;
	return true;
}
string CIntelHexRec::GetString()
{
	string pc = "";
	const size_t buffer_size = 20;
	char strTmp[buffer_size];
	sprintf(strTmp, ":%02X%04X%02X", m_Size, m_Addr, m_Type);
	pc += strTmp;
	for (int i = 0; i < m_Size; i++)
	{
		sprintf(strTmp, "%02X", m_Data[i]);
		pc+=strTmp;
	}
	sprintf(strTmp, "%02X\n", CalcCrc());

	pc += strTmp;
	return pc;
}
Ejemplo n.º 7
0
//--------------------------------------------------------------------
WORD CModbus::loopback()
{
 WORD temp;
 BYTE ByteArray[8];
 BYTE RByteArray[10];
 WORD Hi,Lo;
 unsigned long lpWbytes,lpRbytes;
 WORD Error=0;
  ByteArray[0]=this->wAddress;
  ByteArray[1]=8;
  ByteArray[2]=0;
  ByteArray[3]=0;
  ByteArray[4]=0;
  ByteArray[5]=0;
  temp=CalcCrc(ByteArray,6);
  Hi=temp>>8;
  ByteArray[6]=(BYTE)Hi;
  Lo=temp&0x00ff;
  ByteArray[7]=(BYTE)Lo;
  if (WriteFile(hCom,ByteArray,8,&lpWbytes,NULL))
  {
   PurgeComm(hCom,PURGE_RXCLEAR | PURGE_TXCLEAR);
   if(ReadFile(hCom,RByteArray,8,&lpRbytes,0))
   {
    if(lpRbytes!=0)
    {
     for (int i=0;i<8;i++) //Если полученный пакет отличается от отправленного
      if (ByteArray[i]!=RByteArray[i]) Error^=ERR_INVALID_ANSWER;
    }
    else //Если число считанных байт=0
     Error^=ERR_NO_READ_BYTES;
   }
   else //Если ошибка в ReadFile
    Error^=ERR_READFILE;
  }
  else //Если ошибка в WriteFile
   Error^=ERR_WRITEFILE;

  return (Error);
}
Ejemplo n.º 8
0
HRESULT CPatchDlg::GetMoudleList()
{
	DWORD ret=0;
	//根据服务端文件列表.找到当前目录,文件版本
	HRESULT hr=S_OK;
	POSITION pos=m_mapSvrFileVersion.GetStartPosition();
	PFILEUPDATESVRDATA pData=NULL;
	PFILEUPDATECLIDATA pCliData=NULL;
	CString sKey;
	BOOL bDiff=FALSE;
	CString sFilePath;
	CString sVersion;
	CString sFileName;
	CFileFind ff;  
	BOOL bFound =FALSE;
	m_mapCliFileVersion.RemoveAll();
	//sUpdataPath.AppendFormat(_T("%s\\%s"),sAppPath,sSavePath);
	TiXmlDocument doc;
	TiXmlElement *root=new TiXmlElement("dsFileVersion");
	TiXmlDeclaration *d=new TiXmlDeclaration("1.0","utf-8","");
	
	doc.LinkEndChild(d);
	doc.LinkEndChild(root);
	
	TiXmlElement 
		*nodeId,
		*nodeFn,
		*nodeFv;
	do{
		//bDiff=FALSE;
		pData=NULL;
		bFound=FALSE;
		sFilePath.Empty();
		sVersion.Empty();
		m_mapSvrFileVersion.GetNextAssoc(pos,sKey,(LPVOID&)pData);
		sFilePath.AppendFormat(_T("%s\\%s"),sAppPath,pData->sFileName);
		bFound=PathFileExists(sFilePath.GetString());
		if(bFound)
		{
			pCliData=new FILEUPDATECLIDATA();
			GetFileVersion(sFilePath.GetString(),sVersion);
			sFileName=pData->sFileName;
			pCliData->sFileName=sFileName;
			if(!sVersion.IsEmpty()) //有些文件没有版本号
				pCliData->sVersion=sVersion;
			pCliData->nCrc32=CalcCrc(sFilePath);
			m_mapCliFileVersion.SetAt(sFileName.MakeUpper(),pCliData);
			TiXmlElement *eTable=new TiXmlElement("sc_FileVersion");
			root->LinkEndChild(eTable);
			nodeId=new TiXmlElement("ID");
			nodeFn=new TiXmlElement("FileName");
			nodeFv=new TiXmlElement("FileVersion");
			TiXmlText *fnContent =new TiXmlText(CT2A(pCliData->sFileName.GetString()));
			TiXmlText *fvContent =new TiXmlText(CT2A(pCliData->sVersion.GetString()));
			nodeFn->LinkEndChild(fnContent);
			nodeFv->LinkEndChild(fvContent);
			eTable->LinkEndChild(nodeId);
			eTable->LinkEndChild(nodeFn);
			eTable->LinkEndChild(nodeFv);
			//Log(_T("客户端文件:%-25s,版本:%10s\r\n"),pCliData->sFileName,pCliData->sVersion);
		}
	    
	}while(pos!=NULL);
	TiXmlPrinter printer;
	doc.Accept(&printer);
	CStringA str2=printer.CStr();
	CString str=CA2T(str2);
	
	return ret;
}
Ejemplo n.º 9
0
uint16_t CRC::CalcCrc(const openpal::RSlice& view)
{
    return CalcCrc(view, view.Size());
}
Ejemplo n.º 10
0
int
main(
     int  argc,
     char **argv
) {
     FILE *fp;
     char *game_file;
     int  level     = 0;
     int  old_level = 0;

     (void) printf(&title_msg[WHAT_OFFSET]);

     /*lint -e506 Ignore constat boolean */
     assert(sizeof(SAVED_GAME) == SAVED_GAME_SIZE);
     /*lint +e506 Ignore constat boolean */

     if (argc != 3) {
          (void) printf("Usage: SetLevel (saved game) (level)\n");
          (void) printf("          1 - Rookie\n");
          (void) printf("          2 - Amateur\n");
          (void) printf("          3 - Semi-Pro\n");
          (void) printf("          4 - Pro\n");
          (void) printf("          5 - Ace\n");
          return -1;
     }

     game_file = argv[1];
     level = atoi(argv[2]);

     if (level < 1 || level > 5) {
          (void) printf("SetLevel: The level value should be between 1 and 5.\n");
          return -1;
     }
     --level;

     if ((fp = fopen(game_file, "rb+")) == NULL) {
          (void) printf("SetLevel: Unable to open saved game file called '%s'\n", game_file);
          return -1;
     }

     if (fread(&game, sizeof(game), 1, fp) != 1) {
          (void) printf("SetLevel: Unable to read from saved game file called '%s'\n", game_file);
          return -1;
     }

     if (!CheckCrc(&game, sizeof(game), game.crc1, game.crc2)) {
          (void) printf("SetLevel: '%s' doesn't appear to be a valid saved game file.\n", game_file);
          return -1;
     }

     /*
     ** Update level and recalculate CRC.
     */
     old_level = game.data[LEVEL_OFFSET];
     game.data[LEVEL_OFFSET] = (unsigned char) level;
     CalcCrc(&game, sizeof(game), &game.crc1, &game.crc2);

     (void) fseek(fp, 0L, SEEK_SET);
     if (fwrite(&game, sizeof(game), 1, fp) != 1) {
          (void) printf("SetLevel: Unable to write to saved game file called '%s'\n", game_file);
          return -1;
     }

     (void) printf("Updated saved game '%s' from '%s' to '%s'\n", game_file, level_txt[old_level], level_txt[level]);

     (void) fclose(fp);

     return 0;
}
Ejemplo n.º 11
0
int
main(
     int  argc,
     char **argv
) {
     FILE *ifp;
     FILE *ofp;
     char *name_file;
     char *game_file;

     (void) printf(&title_msg[WHAT_OFFSET]);

     /*lint -e506 Ignore constat boolean */
     assert(sizeof(SAVED_GAME) == SAVED_GAME_SIZE);
     /*lint +e506 Ignore constat boolean */

     if (argc != 3) {
          (void) printf("Usage: SetNames (name file) (saved game)\n");
          return -1;
     }

     name_file = argv[1];
     game_file = argv[2];

     if ((ifp = fopen(name_file, "rb")) == NULL) {
          (void) printf("SetNames: Unable to open names file called '%s'\n", name_file);
          return -1;
     }

     if ((ofp = fopen(game_file, "rb+")) == NULL) {
          (void) printf("SetNames: Unable to open saved game file called '%s'\n", game_file);
          return -1;
     }

     if (fread(&names, sizeof(names), 1, ifp) != 1) {
          (void) printf("SetNames: Unable to read from names file called '%s'\n", name_file);
          return -1;
     }

     if (!CheckCrc(&names, sizeof(names), names.crc1, names.crc2)) {
          (void) printf("SetNames: '%s' doesn't appear to be a valid names file.\n", name_file);
          return -1;
     }

     if (fread(&game, sizeof(game), 1, ofp) != 1) {
          (void) printf("SetNames: Unable to read from saved game file called '%s'\n", game_file);
          return -1;
     }

     if (!CheckCrc(&game, sizeof(game), game.crc1, game.crc2)) {
          (void) printf("SetNames: '%s' doesn't appear to be a valid saved game file.\n", name_file);
          return -1;
     }

     /*
     ** Copy names and recalculate CRC.
     */
     (void) memcpy(&game.names, &names, sizeof(game.names) - CRC_SIZE);
     CalcCrc(&game, sizeof(game), &game.crc1, &game.crc2);

     (void) fseek(ofp, 0L, SEEK_SET);
     if (fwrite(&game, sizeof(game), 1, ofp) != 1) {
          (void) printf("SetNames: Unable to write to saved game file called '%s'\n", name_file);
          return -1;
     }

     (void) printf("Updated saved game '%s' with names from '%s'\n", game_file, name_file);

     (void) fclose(ifp);
     (void) fclose(ofp);

     return 0;
}
Ejemplo n.º 12
0
bool DNPCrc::IsCorrectCRC(const uint8_t* aInput, size_t aLength)
{
	return CalcCrc(aInput, aLength) == UInt16LE::Read(aInput + aLength);
}