Exemplo n.º 1
0
void HttpcHandleContent(USHORT sLen, PCHAR pBuf)
{
	UCHAR iVal;
	USHORT sLeftLen, sLen2;

	if (_sHttpcRespCode != 200)
	{
		goto SkipContent;
	}
	if (_iHttpcTask == HTTPC_TASK_GET_PROV || _iHttpcTask == HTTPC_TASK_GET_CFG || _iHttpcTask == HTTPC_TASK_CFG_AUTH)
	{
		sLen2 = sLen;
		if (_bHttpcEncrypt)
		{
			TaskRC4Calc(pBuf, pBuf, sLen2);
		}
		while (sLen2 --)
		{
			iVal = *pBuf ++;
			if (iVal == 0x0d || iVal == 0x0a)
			{
				if (_iHttpcTask == HTTPC_TASK_GET_PROV)
				{
					HandleProvParam();
				}
				else
				{
					HttpcHandleSettings();
				}
			}
			else if (iVal != (UCHAR)'"')
			{
				HttpcSaveRecv(iVal);
			}
		}
		goto SkipContent;
	}

	if (_iHttpcTask == HTTPC_TASK_GET_SW)
	{
		if (_iHttpcUpdatePage == SYSTEM_INVALID_PAGE)
			goto SkipContent;

		sLeftLen = FILE_FULL_PAGE_SIZE - _sHttpcPostLen;
		if (sLen < sLeftLen || !sLeftLen)
		{
			BufWrite(pBuf, sLen);
			BufForward(sLen);
			_sHttpcPostLen += sLen; 
		}
		else
		{
			BufWrite(pBuf, sLeftLen);
			BufForward(sLeftLen);
			_sHttpcPostLen = 0;
			TaskUIHandler(UI_UPDATE_PROGRESS, (USHORT)_iHttpcCurPage);
			if (FlashWritePage(_iHttpcCurPage))
			{
				_iHttpcUpdatePage = SYSTEM_INVALID_PAGE;
				goto SkipContent;
			}
			_iHttpcCurPage ++;
			if ((_iHttpcCurPage - _iHttpcUpdatePage) >= SYSTEM_PROGRAM_PAGE_NUM)
			{
				TaskSystemHandler(SYS_UPDATE_FLAG, _iHttpcCurPage);
				_iHttpcTask = HTTPC_TASK_REBOOT;
			}
			else
			{
				sLen2 = (USHORT)(sLen - sLeftLen);
				BufSeek(0);
				BufWrite((PCHAR)(pBuf + sLeftLen), sLen2);
				BufForward(sLen2);
				_sHttpcPostLen = sLen2;
			}
		}
	}

SkipContent:
	if (_lHttpcContentLen > (ULONG)sLen)
	{
		_lHttpcContentLen -= (ULONG)sLen;
	}
	else
	{
		_lHttpcContentLen = 0;
		HttpcNextTask();
	}
}
Exemplo n.º 2
0
/*
 * doMore - process a file
 */
static void doMore( char *name, FILE *f )
{
    int         ch;
    long        file_size;
    int         done;
    long        curr_line=0;
    long        tline;
    int         char_cnt;
    int         percent;
    char        buff[_MAX_PATH*2];

    if( f != stdin ) {
        fseek( f, 0, SEEK_END );
        file_size = ftell( f );
        fseek( f, 0, SEEK_SET );
        InitFileBuffer( file_size );
    }
    char_cnt = 0;

    for( ;; ) {
        ch = ReadChar( f );
        if( ch == EOF ) {
            break;
        }
        char_cnt++;
        if( curr_line < startLine ) {
            if( ch == '\n' ) {
                curr_line++;
            }
        } else {
            if( ch != '\n' ) {
                if( char_cnt < screenWidth - 1 ) {
                    fputc( ch, stdout );
                    continue;
                }
                if( !foldLines ) {
                    fputc( '\r', stdout );
                    continue;
                }
                fputc( ch, stdout );
            } else {
                fputc( '\n', stdout );
                curr_line++;
            }
            char_cnt = 0;
            fflush( stdout );
            lineCount--;
            if( lineCount == 0 ) {
                lineCount = screenHeight-1;
                if( f != stdin ) {
                    percent = (100L*BufferPos)/file_size;
                } else {
                    percent = 0;
                }
                fprintf( stdout,"%s(%d%%)", promptString, percent );
                fflush( stdout );
                done = 0;
                while( !done ) {
                    done = 1;
                    ch = getChar();
                    fputs( "\r                                                                        \r", stdout );
                    fflush( stdout );
                    switch( ch ) {
                    case '\r':
                    case '+':
                        lineCount = 1;
                        break;
                    case CTRL( 'F' ):
                    case ' ':
                        if( clearScreen ) {
                            system( "cls" );
                        }
                        break;
                    case '=':
                        fputs( ltoa( curr_line, buff, 10 ), stdout );
                        fflush( stdout );
                        done = 0;
                        break;
                    case 'q':
                        fclose( f );
                        return;
                    case '0':
                        if( f != stdin ) {
                            BufSeek( 0 );
                            curr_line = 0;
                        } else {
                            done = 0;
                        }
                        break;
                    case '$':
                        if( f != stdin ) {
                            BufSeek( file_size );
                            curr_line -= backUpLines( f, screenHeight );
                        } else {
                            done = 0;
                        }
                        break;
                    case CTRL( 'B' ):
                    case 'b':
                        if( clearScreen ) {
                            system( "cls" );
                        }
                        if( f != stdin ) {
                            curr_line -= backUpLines( f, 2*screenHeight-1 );
                        } else {
                            done = 0;
                        }
                        break;
                    case '-':
                        if( f != stdin ) {
                            curr_line -= backUpLines( f, screenHeight+1 );
                        } else {
                            done = 0;
                        }
                        break;
                    case '?':
                        fprintf( stdout, "\"%s\", %ld of %ld bytes", name,
                                BufferPos, file_size );
                        fflush( stdout );
                        done = 0;
                        break;
                    case 'v':
                        tline = curr_line - screenHeight+2;
                        if( tline < 1 ) {
                            tline = 1;
                        }
                        sprintf( buff, "vi %s -k%ldGz\\n", name, tline );
                        system( buff );
                        if( clearScreen ) {
                            system( "cls" );
                        }
                        if( f != stdin ) {
                            curr_line -= backUpLines( f, screenHeight );
                        }
                        break;
                    default:
                        fputs( "use ENTER,SPACE,?,0,$,+,-,=,q,v,^F,b,^B", stdout );
                        fflush( stdout );
                        done = 0;
                        break;
                    }
                }
            }
        }
    }
    fclose( f );

} /* doMore */
Exemplo n.º 3
0
void HttpcHandleLine(PCHAR pBuf, UCHAR iLen)
{
	PCHAR pCur;
	
	pBuf[iLen] = 0;
	if (_iHttpcState == HCS_INIT)
	{
		pCur = pBuf;
		if (!memcmp_str(pCur, "HTTP/1.1 "))
		{
			pCur += 9;
			UdpDebugString(pCur);
			_sHttpcRespCode = atoi(pCur, 10);
			_iHttpcState = HCS_HEADER_BEGIN;
			_bHttpcEncrypt = FALSE;
		}
	}
	else if (_iHttpcState == HCS_HEADER_BEGIN)
	{
		if (iLen)
		{
			HttpcHandleHeader(pBuf);
		}
		else 
		{
			if (_lHttpcContentLen)
			{
				_iHttpcState = HCS_HEADER_END;
				if (_sHttpcRespCode == 200)
				{
					if (_iHttpcTask == HTTPC_TASK_GET_PROV)
					{
						// use MAC as public key
						mac2str(Sys_pMacAddress, _pProvPubKey);
						ChangeSeparator(_pProvPubKey, '-', ':');
						HttpcInitKey();
						_bHttpcEncrypt = TRUE;
					}
					else if (_iHttpcTask == HTTPC_TASK_GET_CFG || _iHttpcTask == HTTPC_TASK_CFG_AUTH)
					{
						if (_bHttpcEncrypt)
						{
							HttpcInitKey();
						}
						ReadFlashPage(SYSTEM_SETTINGS_PAGE);
					}
					else if (_iHttpcTask == HTTPC_TASK_GET_SW)
					{
						_iHttpcUpdatePage = (Sys_iSystemPage == SYSTEM_1ST_PAGE) ? SYSTEM_2ND_PAGE : SYSTEM_1ST_PAGE;
						_sHttpcPostLen = 0;
						_iHttpcCurPage = _iHttpcUpdatePage;
						BufSeek(0);
					}
				}
			}
			else
			{
				HttpcNextTask();
			}
		}
	}
}