int main() { int i = 0; while (i < 3) { char chUser[15]; //abc char chPwd[15]; //123456 int key = 0; //45 0x2d printf("username:\r\n"); scanf("%15s", chUser); printf("password:\r\n"); scanf("%15s", chPwd); //通过crc判断输入的用户名密码是否正确 key = createkey(chUser, chPwd); unsigned char *pkey = (unsigned char *)&key; if (GetCrc(pkey, sizeof(key)) == CrcValue) { puts("OK!"); break; } else { puts("error!"); } i++; } return 0; }
// Сохранение кода в хранилище bool Save(IRCode *code, const uint16_t number) { FIL file; FRESULT res; UINT bw; uint16_t crc = 0xFFFF; char fName[8 + 1 + 3 + 1] = {'\0'}; // 8 name, + .bin + \0 if (!StorageInit) { print("Storage not init\n\r"); return false; } crc = GetCrc(code); code->Crc = crc; MakeFileName(number, fName); res = f_open(&file, fName, FA_CREATE_ALWAYS | FA_WRITE); f_sync(&file); if (res) { printf("Create file error: %d\n\r", res); return false; } res = f_write(&file, code, sizeof(IRCode), &bw); f_sync(&file); if (res || bw != sizeof(IRCode)) { printf("Write file error: %d, bytes to write: %d\n\r", res, bw); return false; } f_close(&file); return true; }
// Чтение из хранилища bool Open(IRCode *code, const uint16_t number) { char fName[8 + 1 + 3 + 1] = {'\0'}; // 8 name, + .bin + \0 FRESULT res; FIL file; UINT btr = 0; uint16_t crc = 0xFFFF; if (!StorageInit) { print("Storage not init\n\r"); return false; } if (!code) { print("Null pointer reference\n\r"); return false; } MakeFileName(number, fName); res = f_open(&file, fName, FA_OPEN_EXISTING | FA_READ); // f_sync(&file); if (res) { printf("Error open file: %s, res: %d\n\r", fName, res); return false; } res = f_read(&file, code, sizeof(IRCode), &btr); // f_sync(&file); if (res || btr != sizeof(IRCode)) { printf("Error reading file: %d, bytes to read: %d\n\r", res, btr); return false; } f_close(&file); crc = GetCrc(code); return crc == code->Crc; }
void CMobileServer::OnPut(WORKSESSION *pSession, LPSTR pszBuffer, int nLength) { MFRAMEHEADER *pHeader; MFRAME *pFrame; WORD crc, crc1; BOOL bChecksum; int i, len, nSeek=1; BYTE c, *p; char buffer[1024]; for(i=0; i<nLength; i+=nSeek) { nSeek = 1; c = pszBuffer[i]; switch(m_theHeader.nState) { case PUT_STATE_WHITE : if (c != '[') break; m_Chunk.Add(c); m_theHeader.nState = PUT_STATE_IDENT; break; case PUT_STATE_IDENT : if (c != '@') { m_Chunk.Flush(); m_theHeader.nState = PUT_STATE_WHITE; break; } m_Chunk.Add(c); m_theHeader.nState = PUT_STATE_SEQ; break; case PUT_STATE_SEQ : if (m_theHeader.nSeq != c) { m_Chunk.Flush(); WriteToModem(MOBILE_NAK); m_theHeader.nState = PUT_STATE_WHITE; break; } m_Chunk.Add(c); m_theHeader.nState = PUT_STATE_HEADER; break; case PUT_STATE_HEADER : nSeek = MIN(nLength-i, (int)sizeof(MFRAMEHEADER)-m_Chunk.GetSize()); m_Chunk.Add(pszBuffer+i, nSeek); if (m_Chunk.GetSize() < (int)sizeof(MFRAMEHEADER)) break; pHeader = (MFRAMEHEADER *)m_Chunk.GetBuffer(); if (pHeader->len > 4096) { m_Chunk.Flush(); WriteToModem(MOBILE_NAK); m_theHeader.nState = PUT_STATE_WHITE; break; } m_theHeader.nFrameSize = pHeader->len; m_theHeader.nState = PUT_STATE_DATA; break; case PUT_STATE_DATA : len = m_theHeader.nFrameSize + sizeof(MFRAMEHEADER) + sizeof(MFRAMETAIL); nSeek = MIN(nLength-i, len-m_Chunk.GetSize()); m_Chunk.Add(pszBuffer+i, nSeek); if (m_Chunk.GetSize() < len) break; pFrame = (MFRAME *)m_Chunk.GetBuffer(); crc = GetCrc((BYTE *)m_Chunk.GetBuffer(), pFrame->hdr.len+sizeof(MFRAMEHEADER), 0); p = (BYTE *)(m_Chunk.GetBuffer() + pFrame->hdr.len + sizeof(MFRAMEHEADER)); memcpy(&crc1, p, sizeof(WORD)); bChecksum = (crc == crc1) ? TRUE : FALSE; // printf("MOBILE-PUT: SEQ=%d, CRC=0x%04X(0x%04X), Checksum=%s\r\n", // pFrame->hdr.seq, crc1, crc, bChecksum ? "Ok" : "Error"); if (bChecksum) { m_theHeader.nSeq++; fwrite(pFrame->data, 1, m_theHeader.nFrameSize, m_theHeader.fp); m_theHeader.nSeek += m_theHeader.nFrameSize; m_theHeader.nErrorCount = 0; WriteToModem(MOBILE_ACK); } else { m_theHeader.nErrorCount++; WriteToModem(MOBILE_NAK); } /* printf("Total=%d, Current=%d, Packet=%d\r\n", m_theHeader.nLength, m_theHeader.nSeek, m_theHeader.nFrameSize); printf("szURL=%s, bInstall=%s\r\n", m_theHeader.szURL, m_theHeader.bInstall ? "yes" : "no"); */ if (m_theHeader.nLength <= m_theHeader.nSeek) { // Download Ok fclose(m_theHeader.fp); m_theHeader.fp = NULL; if (m_theHeader.bInstall) SendResult(MTPERR_INSTALL_START); sprintf(buffer, "mv /tmp/upload.tmp %s", m_theHeader.szURL); system(buffer); if (m_theHeader.bInstall) FirmwareUpdate(m_theHeader.szURL); if (m_theHeader.bInstall) SendResult(MTPERR_INSTALL_END); } m_Chunk.Flush(); m_theHeader.nState = PUT_STATE_WHITE; break; } } }