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

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

?? http.c

?? 單片機c語言程序設計100例--基于PIC+PROTEUS
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*********************************************************************
 *
 *               HTTP Implementation for Microchip TCP/IP Stack
 *
 **********************************************************************
 * FileName:        Http.c
 * Dependencies:    string.h
 *                  Stacktsk.h
 *                  Http.h
 *                  MPFS.h
 *                  TCP.h
 * Processor:       PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F
 * Complier:        Microchip C18 v3.02 or higher
 *					Microchip C30 v2.01 or higher
 * Company:         Microchip Technology, Inc.
 *
 * Software License Agreement
 *
 * This software is owned by Microchip Technology Inc. ("Microchip") 
 * and is supplied to you for use exclusively as described in the 
 * associated software agreement.  This software is protected by 
 * software and other intellectual property laws.  Any use in 
 * violation of the software license may subject the user to criminal 
 * sanctions as well as civil liability.  Copyright 2006 Microchip
 * Technology Inc.  All rights reserved.
 *
 * This software is provided "AS IS."  MICROCHIP DISCLAIMS ALL 
 * WARRANTIES, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, NOT LIMITED 
 * TO MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND 
 * INFRINGEMENT.  Microchip shall in no event be liable for special, 
 * incidental, or consequential damages.
 *
 *
 * Author               Date        Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Nilesh Rajbharti     8/14/01     Original
 * Nilesh Rajbharti     9/12/01     Released (Rev. 1.0)
 * Nilesh Rajbharti     2/9/02      Cleanup
 * Nilesh Rajbharti     5/22/02     Rev 2.0 (See version.log for detail)
 * Nilesh Rajbharti     7/9/02      Rev 2.1 (Fixed HTTPParse bug)
 * Howard Schlunder		2/9/05		Fixed variable substitution 
 *									parsing (uses hex now)
 ********************************************************************/
#define THIS_IS_HTTP_SERVER

#include <string.h>

#include "..\Include\StackTsk.h"
#include "..\Include\HTTP.h"
#include "..\Include\MPFS.h"
#include "..\Include\TCP.h"
#include "..\Include\Helpers.h"


#if defined(STACK_USE_HTTP_SERVER)



#if (MAC_TX_BUFFER_SIZE <= 130 || MAC_TX_BUFFER_SIZE > 1500 )
#error HTTP : Invalid MAC_TX_BUFFER_SIZE value specified.
#endif

// Each dynamic variable within a CGI file should be preceeded with this character.
#define HTTP_VAR_ESC_CHAR       '%'
#define HTTP_DYNAMIC_FILE_TYPE  (HTTP_CGI)

// HTTP File Types
#define HTTP_TXT        (0u)
#define HTTP_HTML       (1u)
#define HTTP_CGI        (2u)
#define HTTP_XML        (3u)
#define HTTP_GIF        (4u)
#define HTTP_PNG        (5u)
#define HTTP_JPG        (6u)
#define HTTP_JAVA       (7u)
#define HTTP_WAV        (8u)
#define HTTP_UNKNOWN    (9u)


#define FILE_EXT_LEN    (3u)
typedef struct _FILE_TYPES
{
    char fileExt[FILE_EXT_LEN+1];
} FILE_TYPES;

// Each entry in this structure must be in UPPER case.
// Order of these entries must match with those defined by "HTTP File Types" defines.
static ROM FILE_TYPES httpFiles[] =
{
    { "TXT" },          // HTTP_TXT
    { "HTM" },          // HTTP_HTML
    { "CGI" },          // HTTP_CGI
    { "XML" },          // HTTP_XML
    { "GIF" },          // HTTP_GIF
    { "PNG" },          // HTTP_PNG
    { "JPG" },          // HTTP_JPG
    { "CLA" },          // HTTP_JAVA
    { "WAV" },          // HTTP_WAV
	{ ""    }			// HTTP_UNKNOWN
};
#define TOTAL_FILE_TYPES        ( sizeof(httpFiles)/sizeof(httpFiles[0]) )


typedef struct _HTTP_CONTENT
{
    ROM char typeString[20];
} HTTP_CONTENT;

// Content entry order must match with those "HTTP File Types" define's.
static ROM HTTP_CONTENT httpContents[] =
{
    { "text/plain" },            // HTTP_TXT
    { "text/html" },             // HTTP_HTML
    { "text/html" },             // HTTP_CGI
    { "text/xml" },              // HTTP_XML
    { "image/gif" },             // HTTP_GIF
    { "image/png" },             // HTTP_PNG
    { "image/jpeg" },            // HTTP_JPG
    { "application/java-vm" },   // HTTP_JAVA
    { "audio/x-wave" },          // HTTP_WAV
	{ "" }						 // HTTP_UNKNOWN
};
#define TOTAL_HTTP_CONTENTS     ( sizeof(httpContents)/sizeof(httpConetents[0]) )

// HTTP FSM states for each connection.
typedef enum _SM_HTTP
{
    SM_HTTP_IDLE = 0,
    SM_HTTP_GET,
    SM_HTTP_NOT_FOUND,
    SM_HTTP_GET_READ,
    SM_HTTP_GET_PASS,
    SM_HTTP_GET_DLE,
    SM_HTTP_GET_HANDLE,
    SM_HTTP_GET_HANDLE_NEXT,
    SM_HTTP_GET_VAR,
    SM_HTTP_DISCONNECT,
    SM_HTTP_DISCONNECT_WAIT,
    SM_HTTP_HEADER,
    SM_HTTP_DISCARD
} SM_HTTP;

// Supported HTTP Commands
typedef enum _HTTP_COMMAND
{
    HTTP_GET,
    HTTP_POST,
    HTTP_NOT_SUPPORTED,
    HTTP_INVALID_COMMAND
} HTTP_COMMAND;

// HTTP Connection Info - one for each connection.
typedef struct _HTTP_INFO
{
    TCP_SOCKET socket;
    MPFS file;
    SM_HTTP smHTTP;
    BYTE smHTTPGet;
    WORD VarRef;
    BYTE bProcess;
    BYTE Variable;
    BYTE fileType;
} HTTP_INFO;
typedef BYTE HTTP_HANDLE;


typedef enum
{
    HTTP_NOT_FOUND,
    HTTP_NOT_AVAILABLE
} HTTP_MESSAGES;

// Following message order must match with that of HTTP_MESSAGES enum.
static ROM char *HTTPMessages[] =
{
	    "HTTP/1.0 404 Not found\r\n\r\nNot found.\r\n",
	    "HTTP/1.0 503 \r\n\r\nService Unavailable\r\n"
};

// Standard HTTP messages.
ROM BYTE HTTP_OK_STRING[] = "HTTP/1.0 200 OK\r\nContent-type: ";
ROM BYTE HTTP_OK_NO_CACHE_STRING[] = "HTTP/1.0 200 OK\r\nDate: Wed, 05 Apr 2006 02:53:05 GMT\r\nExpires: Wed, 05 Apr 2006 02:52:05 GMT\r\nCache-control: private\r\nContent-type: ";
#define HTTP_OK_STRING_LEN 	(sizeof(HTTP_OK_STRING)-1)
#define HTTP_OK_NO_CACHE_STRING_LEN 	(sizeof(HTTP_OK_NO_CACHE_STRING)-1)

ROM BYTE HTTP_HEADER_END_STRING[]               =           \
                        "\r\n\r\n";
#define HTTP_HEADER_END_STRING_LEN                          \
                        (sizeof(HTTP_HEADER_END_STRING)-1)

// HTTP Command Strings
ROM BYTE HTTP_GET_STRING[]                      =           \
                        "GET";
#define HTTP_GET_STRING_LEN                                 \
                        (sizeof(HTTP_GET_STRING)-1)

// Default HTML file.
ROM BYTE HTTP_DEFAULT_FILE_STRING[]             =           \
                        "INDEX.HTM";
#define HTTP_DEFAULT_FILE_STRING_LEN                        \
                        (sizeof(HTTP_DEFAULT_FILE_STRING)-1)


// Maximum nuber of arguments supported by this HTTP Server.
#define MAX_HTTP_ARGS       (11)

// Maximum HTML Command String length.
#define MAX_HTML_CMD_LEN    (100)


static HTTP_INFO HCB[MAX_HTTP_CONNECTIONS];


static void HTTPProcess(HTTP_HANDLE h);
static HTTP_COMMAND HTTPParse(BYTE *string,
                              BYTE** arg,
                              BYTE* argc,
                              BYTE* type);
static BOOL SendFile(HTTP_INFO* ph);




/*********************************************************************
 * Function:        void HTTPInit(void)
 *
 * PreCondition:    TCP must already be initialized.
 *
 * Input:           None
 *
 * Output:          HTTP FSM and connections are initialized
 *
 * Side Effects:    None
 *
 * Overview:        Set all HTTP connections to Listening state.
 *                  Initialize FSM for each connection.
 *
 * Note:            This function is called only one during lifetime
 *                  of the application.
 ********************************************************************/
void HTTPInit(void)
{
    BYTE i;

    for ( i = 0; i <  MAX_HTTP_CONNECTIONS; i++ )
    {
        HCB[i].socket = TCPListen(HTTP_PORT);
        HCB[i].smHTTP = SM_HTTP_IDLE;
    }
}



/*********************************************************************
 * Function:        void HTTPServer(void)
 *
 * PreCondition:    HTTPInit() must already be called.
 *
 * Input:           None
 *
 * Output:          Opened HTTP connections are served.
 *
 * Side Effects:    None
 *
 * Overview:        Browse through each connections and let it
 *                  handle its connection.
 *                  If a connection is not finished, do not process
 *                  next connections.  This must be done, all
 *                  connections use some static variables that are
 *                  common.
 *
 * Note:            This function acts as a task (similar to one in
 *                  RTOS).  This function performs its task in
 *                  co-operative manner.  Main application must call
 *                  this function repeatdly to ensure all open
 *                  or new connections are served on time.
 ********************************************************************/
void HTTPServer(void)
{
    BYTE conn;

    for ( conn = 0;  conn < MAX_HTTP_CONNECTIONS; conn++ )
        HTTPProcess(conn);
}


/*********************************************************************
 * Function:        static BOOL HTTPProcess(HTTP_HANDLE h)
 *
 * PreCondition:    HTTPInit() called.
 *
 * Input:           h   -   Index to the handle which needs to be
 *                          processed.
 *
 * Output:          Connection referred by 'h' is served.
 *
 * Side Effects:    None
 *
 * Overview:
 *
 * Note:            None.
 ********************************************************************/
static void HTTPProcess(HTTP_HANDLE h)
{
    BYTE httpData[MAX_HTML_CMD_LEN+1];
    HTTP_COMMAND httpCommand;
    WORD httpLength;
    BOOL lbContinue;
    BYTE *arg[MAX_HTTP_ARGS];
    BYTE argc;
    BYTE i;
    HTTP_INFO* ph;
    ROM char* romString;

    ph = &HCB[h];

    do
    {
        lbContinue = FALSE;

        // If during handling of HTTP socket, it gets disconnected,
        // forget about previous processing and return to idle state.
        if(!TCPIsConnected(ph->socket))
        {
            ph->smHTTP = SM_HTTP_IDLE;
            break;
        }


        switch(ph->smHTTP)
        {
        case SM_HTTP_IDLE:
            if(TCPIsGetReady(ph->socket))
            {
                lbContinue = TRUE;

                httpLength = 0;
                while(httpLength < MAX_HTML_CMD_LEN &&
                      TCPGet(ph->socket, &httpData[httpLength++]) );
                httpData[httpLength] = '\0';
                TCPDiscard(ph->socket);

                ph->smHTTP = SM_HTTP_NOT_FOUND;
                argc = MAX_HTTP_ARGS;
                httpCommand = HTTPParse(httpData, arg, &argc, &ph->fileType);
                if ( httpCommand == HTTP_GET )
                {
                    // If there are any arguments, this must be a remote command.
                    // Execute it and then send the file.
                    // The file name may be modified by command handler.
                    if ( argc > 1u )
                    {
                        // Let main application handle this remote command.
                        HTTPExecCmd(&arg[0], argc);

                        // Command handler must have modified arg[0] which now
                        // points to actual file that will be sent as a result of
                        // this remote command.

                        // Assume that Web author will only use CGI or HTML
                        // file for remote command.
                        ph->fileType = HTTP_CGI;
                    }

                    ph->file = MPFSOpen(arg[0]);
                    if ( ph->file == MPFS_INVALID )
                    {
                        ph->Variable = HTTP_NOT_FOUND;
                        ph->smHTTP = SM_HTTP_NOT_FOUND;
                    }
                    else if ( ph->file == MPFS_NOT_AVAILABLE )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产馆在线真实露脸 | 91.xcao| 亚洲欧美成aⅴ人在线观看| 99精品视频免费在线观看| 亚洲欧美成aⅴ人在线观看| 欧美专区亚洲专区| 全国精品久久少妇| 久久久美女毛片| 9i在线看片成人免费| 亚洲黄色片在线观看| 欧美一级艳片视频免费观看| 久久av老司机精品网站导航| 国产亚洲精品aa午夜观看| 91丝袜高跟美女视频| 日韩av在线免费观看不卡| 欧美mv日韩mv国产网站| 丁香婷婷综合网| 一区二区三区日韩精品视频| 欧美精品xxxxbbbb| 福利一区二区在线观看| 亚洲自拍偷拍图区| 日韩欧美在线综合网| 国产精品69久久久久水密桃| 亚洲最大色网站| 久久网站热最新地址| 色哟哟一区二区| 国产在线精品免费av| 亚洲色图都市小说| 亚洲精品一区二区三区影院| 色婷婷激情一区二区三区| 精品午夜一区二区三区在线观看| 中文字幕一区二区三区视频| 欧美一卡二卡三卡| 91免费精品国自产拍在线不卡| 日韩va欧美va亚洲va久久| 中文字幕一区二区三区在线播放| 欧美一二三区精品| 色婷婷久久综合| 国产九九视频一区二区三区| 婷婷综合在线观看| 国产精品久久99| 日韩欧美123| 欧美福利一区二区| 99久久免费精品高清特色大片| 精品影视av免费| 亚洲国产欧美一区二区三区丁香婷| 亚洲国产精品激情在线观看| 日韩欧美另类在线| 欧美片在线播放| 一本色道**综合亚洲精品蜜桃冫| 国产在线日韩欧美| 美女爽到高潮91| 天天综合日日夜夜精品| 一区二区高清免费观看影视大全 | 欧美激情资源网| 日韩免费看的电影| 91麻豆精品国产自产在线| 91丝袜美腿高跟国产极品老师 | 欧美日韩精品一区视频| av在线不卡免费看| 成人午夜在线免费| 国内成+人亚洲+欧美+综合在线| 五月激情综合婷婷| 亚洲国产精品尤物yw在线观看| 亚洲伦理在线精品| 亚洲欧洲一区二区三区| 国产精品久久久久9999吃药| 国产精品欧美一级免费| 欧美激情中文字幕| 国产精品色噜噜| 国产精品国产三级国产aⅴ入口| 国产日本一区二区| 国产精品色在线观看| 中文幕一区二区三区久久蜜桃| 欧美国产精品一区| 欧美国产国产综合| 1区2区3区精品视频| 国产精品福利影院| 亚洲人精品午夜| 亚洲国产一区二区在线播放| 亚洲成人精品影院| 日韩国产一区二| 麻豆国产精品视频| 国产精品亚洲专一区二区三区| 国产精品一区在线| 99久精品国产| 欧美三级视频在线播放| 91精品国产综合久久精品性色 | 国产不卡免费视频| 99久久99久久精品免费观看| 色94色欧美sute亚洲线路二| 欧美日韩在线播放一区| 正在播放亚洲一区| 久久久另类综合| 中文字幕亚洲区| 五月婷婷久久综合| 久久国产精品免费| 成人毛片在线观看| 欧美在线观看视频一区二区三区| 欧美日韩精品一区二区天天拍小说| 这里只有精品电影| 中文在线免费一区三区高中清不卡| 中文字幕一区二区5566日韩| 亚洲成人免费在线观看| 国内久久精品视频| 97久久精品人人做人人爽50路 | 精品久久久久久最新网址| 久久久久久免费网| 亚洲欧美视频在线观看| 男女男精品网站| 成人av在线影院| 欧美乱妇15p| 中文字幕电影一区| 亚洲一二三专区| 国产一区二区久久| 色综合久久久久久久久久久| 日韩精品一区二区三区在线观看| 一区在线观看免费| 狠狠色丁香久久婷婷综| 欧美伊人久久久久久久久影院| 精品av综合导航| 亚洲国产视频直播| 国产成人综合在线| 日韩一区二区精品葵司在线| 亚洲欧洲精品一区二区三区| 日韩国产精品久久| 99国产精品久久久久久久久久久| 91精品国产高清一区二区三区 | 无码av免费一区二区三区试看| 国产黄色91视频| 91精选在线观看| 亚洲欧美成人一区二区三区| 国产精品一级在线| 3d成人动漫网站| 亚洲精品国产精华液| 国产高清不卡一区二区| 69久久99精品久久久久婷婷| 一区二区三区四区乱视频| 丰满少妇久久久久久久| 日韩欧美一二三区| 五月天激情综合| 欧美最新大片在线看| 国产精品国产三级国产aⅴ原创| 狠狠色丁香久久婷婷综合_中 | 亚洲欧美日韩在线| 成人综合婷婷国产精品久久蜜臀 | 中文字幕+乱码+中文字幕一区| 麻豆精品新av中文字幕| 欧美日韩综合在线| 亚洲一区在线观看网站| bt7086福利一区国产| 国产视频视频一区| 韩国一区二区在线观看| 欧美一区二区福利视频| 手机精品视频在线观看| 欧美日韩高清一区二区| 夜夜爽夜夜爽精品视频| 在线观看日韩精品| 亚洲欧美日韩在线播放| 91丨porny丨国产| 亚洲天堂福利av| 色婷婷香蕉在线一区二区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产91丝袜在线播放九色| 久久久久9999亚洲精品| 国产乱码一区二区三区| 国产女主播在线一区二区| 成人午夜视频福利| 国产精品三级久久久久三级| 9久草视频在线视频精品| 亚洲欧洲av色图| 色天使久久综合网天天| 亚洲美女免费视频| 欧美日韩国产色站一区二区三区| 日日摸夜夜添夜夜添国产精品| 欧美另类z0zxhd电影| 欧美96一区二区免费视频| 精品久久一区二区三区| 国产成人高清视频| 亚洲欧美怡红院| 欧美三级中文字幕在线观看| 日韩精品电影在线观看| 久久久亚洲国产美女国产盗摄| 岛国一区二区在线观看| 亚洲免费av网站| 欧美一区二区三区在线观看视频| 美女在线一区二区| 国产视频在线观看一区二区三区| 9人人澡人人爽人人精品| 亚洲成人免费在线观看| 精品福利av导航| 国v精品久久久网| 悠悠色在线精品| 欧美一卡二卡三卡四卡| 成人午夜免费视频| 亚洲国产日韩一级| 久久精品人人爽人人爽| 在线日韩国产精品| 国内成+人亚洲+欧美+综合在线 | 不卡的看片网站|