亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? http.c

?? 單片機c語言程序設計100例--基于PIC+PROTEUS
?? C
?? 第 1 頁 / 共 2 頁
字號:
                    {
                        ph->Variable = HTTP_NOT_AVAILABLE;
                        ph->smHTTP = SM_HTTP_NOT_FOUND;
                    }
                    else
                    {
                        ph->smHTTP = SM_HTTP_HEADER;
                    }
                }
            }
            break;

        case SM_HTTP_NOT_FOUND:
            if ( TCPIsPutReady(ph->socket) )
            {
                romString = HTTPMessages[ph->Variable];

                while( (i = *romString++) )
                    TCPPut(ph->socket, i);

                TCPFlush(ph->socket);
                ph->smHTTP = SM_HTTP_DISCONNECT;
            }
            break;

        case SM_HTTP_HEADER:
            if ( TCPIsPutReady(ph->socket) )
            {
                lbContinue = TRUE;

                if ( ph->fileType == HTTP_DYNAMIC_FILE_TYPE )
				{
                    ph->bProcess = TRUE;
	                for ( i = 0; i < HTTP_OK_NO_CACHE_STRING_LEN; i++ )
	                    TCPPut(ph->socket, HTTP_OK_NO_CACHE_STRING[i]);
				}
                else
				{
                    ph->bProcess = FALSE;
	                for ( i = 0; i < HTTP_OK_STRING_LEN; i++ )
	                    TCPPut(ph->socket, HTTP_OK_STRING[i]);
				}


                romString = httpContents[ph->fileType].typeString;
                while( (i = *romString++) )
                    TCPPut(ph->socket, i);

                for ( i = 0; i < HTTP_HEADER_END_STRING_LEN; i++ )
                    TCPPut(ph->socket, HTTP_HEADER_END_STRING[i]);

                ph->smHTTPGet = SM_HTTP_GET_READ;
                ph->smHTTP = SM_HTTP_GET;
            }
            break;


        case SM_HTTP_GET:
            if ( TCPIsGetReady(ph->socket) )
                TCPDiscard(ph->socket);

            if ( SendFile(ph) )
            {
                MPFSClose();
                ph->smHTTP = SM_HTTP_DISCONNECT;
            }
            break;

        case SM_HTTP_DISCONNECT:
            if(TCPIsConnected(ph->socket))
            {
                if(TCPIsPutReady(ph->socket))
                {
                    TCPDisconnect(ph->socket);

                    // Switch to not-handled state.  This FSM has
                    // one common action that checks for disconnect
                    // condition and returns to Idle state.
                    ph->smHTTP = SM_HTTP_DISCONNECT_WAIT;
                }
            }
            break;

        }
    } while( lbContinue );
}


/*********************************************************************
 * Function:        static BOOL SendFile(HTTP_INFO* ph)
 *
 * PreCondition:    None
 *
 * Input:           ph      -   A HTTP connection info.
 *
 * Output:          File reference by this connection is served.
 *
 * Side Effects:    None
 *
 * Overview:        None
 *
 * Note:            None.
 ********************************************************************/
static BOOL SendFile(HTTP_INFO* ph)
{
    BOOL lbTransmit;
    BYTE c;
    WORD_VAL HexNumber;

    MPFSGetBegin(ph->file);

	// Check if file is dynamic (.cgi) -- need to look for and 
	// process escape sequences
	if(ph->bProcess)					
	{
	    while(TCPIsPutReady(ph->socket))
	    {
	        lbTransmit = FALSE;
	
	        if(ph->smHTTPGet != SM_HTTP_GET_VAR)
	        {
	            c = MPFSGet();
	            if(MPFSIsEOF())
	            {
	                MPFSGetEnd();
	                TCPFlush(ph->socket);
	                return TRUE;
	            }
	        }
	
			switch(ph->smHTTPGet)
			{
			case SM_HTTP_GET_READ:
			    if ( c == HTTP_VAR_ESC_CHAR )
			        ph->smHTTPGet = SM_HTTP_GET_DLE;
			    else
			        lbTransmit = TRUE;
			    break;
			
			case SM_HTTP_GET_DLE:
			    if ( c == HTTP_VAR_ESC_CHAR )
			    {
			        lbTransmit = TRUE;
			        ph->smHTTPGet = SM_HTTP_GET_READ;
			    }
			    else
			    {
			        HexNumber.v[1] = c;
			        ph->smHTTPGet = SM_HTTP_GET_HANDLE;
			    }
			    break;
			
			case SM_HTTP_GET_HANDLE:
			    HexNumber.v[0] = c;
			    ph->Variable = hexatob(HexNumber);
			
			    ph->smHTTPGet = SM_HTTP_GET_VAR;
			    ph->VarRef = HTTP_START_OF_VAR;
			    break;
			
			case SM_HTTP_GET_VAR:
			    ph->VarRef = HTTPGetVar(ph->Variable, ph->VarRef, &c);
			    lbTransmit = TRUE;
			    if ( ph->VarRef == HTTP_END_OF_VAR )
			        ph->smHTTPGet = SM_HTTP_GET_READ;
			    break;
			}
			
			if(lbTransmit)
			    TCPPut(ph->socket, c);
		}
    }	
	else	// Static page content -- no processing required
	{
	    while(TCPIsPutReady(ph->socket))
		{
            c = MPFSGet();
            if(MPFSIsEOF())
            {
                MPFSGetEnd();
                TCPFlush(ph->socket);
                return TRUE;
            }
			else
	            TCPPut(ph->socket, c);
		}
	}

    ph->file = MPFSGetEnd();

    // We are not done sending a file yet...
    return FALSE;
}


/*********************************************************************
 * Function:        static HTTP_COMMAND HTTPParse(BYTE *string,
 *                                              BYTE** arg,
 *                                              BYTE* argc,
 *                                              BYTE* type)
 *
 * PreCondition:    None
 *
 * Input:           string      - HTTP Command String
 *                  arg         - List of string pointer to hold
 *                                HTTP arguments.
 *                  argc        - Pointer to hold total number of
 *                                arguments in this command string/
 *                  type        - Pointer to hold type of file
 *                                received.
 *                              Valid values are:
 *                                  HTTP_TXT
 *                                  HTTP_HTML
 *                                  HTTP_GIF
 *                                  HTTP_CGI
 *                                  HTTP_UNKNOWN
 *
 * Output:          HTTP FSM and connections are initialized
 *
 * Side Effects:    None
 *
 * Overview:        None
 *
 * Note:            This function parses URL that may or may not
 *                  contain arguments.
 *                  e.g. "GET HTTP/1.0 thank.htm?name=MCHP&age=12"
 *                      would be returned as below:
 *                          arg[0] => GET
 *                          arg[1] => thank.htm
 *                          arg[2] => name
 *                          arg[3] => MCHP
 *                          arg[4] => 12
 *                          argc = 5
 *
 *                  This parses does not "de-escape" URL string.
 ********************************************************************/
static HTTP_COMMAND HTTPParse(BYTE *string,
                            BYTE** arg,
                            BYTE* argc,
                            BYTE* type)
{
    BYTE i;
    BYTE smParse;
    HTTP_COMMAND cmd;
    BYTE *ext;
    BYTE c;
    ROM char* fileType;

    enum
    {
        SM_PARSE_IDLE,
        SM_PARSE_ARG,
        SM_PARSE_ARG_FORMAT
    };

    smParse = SM_PARSE_IDLE;
    ext = NULL;
    i = 0;

    // Only "GET" is supported for time being.
    if ( !memcmppgm2ram(string, (ROM void*) HTTP_GET_STRING, HTTP_GET_STRING_LEN) )
    {
        string += (HTTP_GET_STRING_LEN + 1);
        cmd = HTTP_GET;
    }
    else
    {
        return HTTP_NOT_SUPPORTED;
    }

    // Skip white spaces.
    while( *string == ' ' )
        string++;

    c = *string;

    while ( c != ' ' &&  c != '\0' && c != '\r' && c != '\n' )

    {
        // Do not accept any more arguments than we haved designed to.
        if ( i >= *argc )
            break;

        switch(smParse)
        {
        case SM_PARSE_IDLE:
            arg[i] = string;
            c = *string;
            if ( c == '/' || c == '\\' )
                smParse = SM_PARSE_ARG;
            break;

        case SM_PARSE_ARG:
            arg[i++] = string;
            smParse = SM_PARSE_ARG_FORMAT;
            /*
             * Do not break.
             * Parameter may be empty.
             */

        case SM_PARSE_ARG_FORMAT:
            c = *string;
            if ( c == '?' || c == '&' )
            {
                *string = '\0';
                smParse = SM_PARSE_ARG;
            }
            else
            {
                // Recover space characters.
                if ( c == '+' )
                    *string = ' ';

                // Remember where file extension starts.
                else if ( c == '.' && i == 1u )
                {
                    ext = ++string;
                }

                else if ( c == '=' )
                {
                    *string = '\0';
                    smParse = SM_PARSE_ARG;
                }

                // Only interested in file name - not a path.
                else if ( c == '/' || c == '\\' )
                    arg[i-1] = string+1;

            }
            break;
        }
        string++;
        c = *string;
    }
    *string = '\0';

    *type = HTTP_UNKNOWN;
    if ( ext != NULL )
    {
        ext = (BYTE*)strupr((char*)ext);

        fileType = httpFiles[0].fileExt;
        for ( c = 0; c < TOTAL_FILE_TYPES; c++ )
        {
            if ( !memcmppgm2ram((void*)ext, (ROM void*)fileType, FILE_EXT_LEN) )
            {
                *type = c;
                break;
            }
            fileType += sizeof(FILE_TYPES);

        }
    }

    if ( i == 0u )
    {
        memcpypgm2ram(arg[0], (ROM void*)HTTP_DEFAULT_FILE_STRING,
                                     HTTP_DEFAULT_FILE_STRING_LEN);
        arg[0][HTTP_DEFAULT_FILE_STRING_LEN] = '\0';
        *type = HTTP_HTML;
        i++;
    }
    *argc = i;

    return cmd;
}


#endif //#if defined(STACK_USE_HTTP_SERVER)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产盗摄一区二区| av在线不卡电影| 黄一区二区三区| 国产不卡在线视频| 91麻豆国产在线观看| 欧美视频在线一区二区三区 | 久久夜色精品一区| 国产精品国产a| 午夜精品久久久久影视| 国内精品免费**视频| voyeur盗摄精品| 欧美精品aⅴ在线视频| 26uuu精品一区二区| 亚洲美女视频一区| 日韩精彩视频在线观看| 国产不卡在线播放| 欧美中文字幕亚洲一区二区va在线 | 中文字幕免费一区| 亚洲精品菠萝久久久久久久| 日韩黄色免费电影| 成人av网站在线观看免费| 欧美日韩亚洲高清一区二区| 欧美精品一区二区高清在线观看| 国产精品超碰97尤物18| 日韩精品亚洲专区| 成人免费观看av| 宅男噜噜噜66一区二区66| 国产亚洲制服色| 亚洲成a天堂v人片| 国产91丝袜在线18| 这里只有精品电影| 亚洲美女精品一区| 国产剧情一区二区| 91精品婷婷国产综合久久竹菊| 国产精品日韩成人| 蜜臀av一区二区在线免费观看| 99久久久国产精品免费蜜臀| 日韩精品一区二区三区四区视频| 亚洲免费在线电影| 国内精品久久久久影院色| 色婷婷精品大在线视频| 久久人人97超碰com| 天天综合日日夜夜精品| 91麻豆精东视频| 国产日韩欧美a| 免费成人在线观看| 欧美性做爰猛烈叫床潮| 欧美韩国一区二区| 乱一区二区av| 欧美日韩亚洲综合在线| 一区二区中文字幕在线| 极品少妇xxxx精品少妇| 欧美绝品在线观看成人午夜影视| 国产精品久久久久桃色tv| 国内偷窥港台综合视频在线播放| 欧美日韩国产一级二级| 亚洲人成在线播放网站岛国| 国产aⅴ精品一区二区三区色成熟| 欧美一级欧美三级| 舔着乳尖日韩一区| 欧洲一区二区三区免费视频| 国产精品福利一区二区三区| 国产曰批免费观看久久久| 欧美一区二区播放| 亚洲国产欧美另类丝袜| 色一情一乱一乱一91av| 中文字幕一区二区在线观看| 国产成人精品影院| 欧美三级乱人伦电影| 国产精品毛片大码女人| 国产福利一区二区三区视频 | 亚洲色图欧美偷拍| 成人免费视频网站在线观看| 国产亚洲欧洲997久久综合| 精品一区二区在线播放| 精品毛片乱码1区2区3区| 日本欧美一区二区三区乱码| 91.com视频| 偷拍亚洲欧洲综合| 8v天堂国产在线一区二区| 天堂va蜜桃一区二区三区| 欧美久久一二区| 热久久久久久久| 日韩欧美国产麻豆| 精品一区二区综合| 久久亚洲精华国产精华液 | 国产精品久久久久三级| 99亚偷拍自图区亚洲| 中文字幕一区二区在线播放| 99亚偷拍自图区亚洲| 亚洲另类春色校园小说| 欧美伊人精品成人久久综合97| 亚洲bt欧美bt精品777| 欧美一区二区久久久| 欧美在线制服丝袜| 欧美一区二区在线不卡| 日韩**一区毛片| 日韩小视频在线观看专区| 麻豆高清免费国产一区| 精品88久久久久88久久久| 国产盗摄精品一区二区三区在线 | 国产高清成人在线| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲免费观看在线观看| 欧美色精品天天在线观看视频| 视频一区二区欧美| 久久香蕉国产线看观看99| 不卡的电影网站| 亚洲一二三区在线观看| 日韩欧美国产小视频| 风流少妇一区二区| 亚洲另类一区二区| 欧美一区二区三区免费观看视频 | 国产欧美精品日韩区二区麻豆天美| 成人av免费观看| 亚洲成在人线在线播放| 欧美成人官网二区| 成人毛片在线观看| 午夜不卡av免费| www久久精品| 国产精品久久精品日日| 成人免费毛片片v| 亚洲高清视频中文字幕| 精品国产区一区| 99精品欧美一区| 日本免费新一区视频| 国产欧美日产一区| 欧美日韩不卡在线| 国产精品18久久久久久久久| 一区二区在线观看免费视频播放| 日韩三级高清在线| 99久久99久久精品免费观看| 日韩**一区毛片| 亚洲日本在线a| 精品国产制服丝袜高跟| 91麻豆免费观看| 国产一区二区三区日韩| 亚洲综合激情小说| 国产精品三级电影| 日韩精品专区在线影院重磅| 91九色最新地址| 国产激情一区二区三区| 午夜欧美在线一二页| 国产精品麻豆99久久久久久| 日韩一级片在线播放| 色综合一区二区| 国产裸体歌舞团一区二区| 亚洲h精品动漫在线观看| 中文字幕在线观看不卡视频| 2023国产精品自拍| 欧美日韩一级视频| jlzzjlzz欧美大全| 韩国v欧美v日本v亚洲v| 天天做天天摸天天爽国产一区| 懂色中文一区二区在线播放| 亚洲国产精品精华液ab| 欧美色中文字幕| 成人h动漫精品一区二| 久久激情综合网| 亚洲福利国产精品| 中文字幕一区二区三区四区不卡 | 亚洲裸体在线观看| 久久久噜噜噜久久人人看| 制服丝袜一区二区三区| 欧美日免费三级在线| 色综合久久中文字幕| 成人看片黄a免费看在线| 国内精品国产三级国产a久久| 蜜桃视频一区二区三区| 一区二区三区鲁丝不卡| 国产日产精品1区| 91精品国产一区二区三区 | 国产精品婷婷午夜在线观看| 欧美理论片在线| 欧美日韩在线三区| 91丨九色丨黑人外教| 国产乱码一区二区三区| 亚洲va天堂va国产va久| 亚洲高清在线精品| 亚洲猫色日本管| 国产精品久久毛片av大全日韩| 久久久99免费| 欧美mv日韩mv亚洲| 欧美疯狂做受xxxx富婆| 99久久伊人久久99| 天天影视涩香欲综合网 | 美女尤物国产一区| 夜夜嗨av一区二区三区中文字幕| 亚洲男人的天堂在线观看| 国产三级精品三级| 精品国产一区二区三区av性色| 欧美顶级少妇做爰| 欧美三级电影网站| 日本精品一区二区三区高清| 不卡的av网站| 色综合天天视频在线观看 | 中文字幕精品综合| 久久免费偷拍视频| 精品久久人人做人人爱| 26uuu精品一区二区|