Esempio n. 1
0
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;
}
Esempio n. 2
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;
}
Esempio n. 3
0
// Чтение из хранилища
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;
}
Esempio n. 4
0
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;
        }

    }
}