亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
中文字幕亚洲一区二区av在线| 免费在线看一区| 亚瑟在线精品视频| 国产成人aaaa| 日韩欧美一区二区三区在线| 国产精品免费人成网站| 免费欧美高清视频| 欧美无砖专区一中文字| 国产精品美女久久久久av爽李琼| 日本成人在线一区| 精品婷婷伊人一区三区三| 国产精品美女一区二区| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩中文一区| 亚洲在线视频免费观看| eeuss鲁片一区二区三区| 久久久噜噜噜久噜久久综合| 日本欧美大码aⅴ在线播放| 在线一区二区三区四区五区| 中文字幕国产一区| 国产91精品久久久久久久网曝门| 久久一日本道色综合| 国产一区在线看| 精品少妇一区二区三区在线视频| 日韩不卡一二三区| 欧美猛男男办公室激情| 午夜私人影院久久久久| 欧美在线观看一区| 亚洲午夜电影在线观看| 欧美日韩免费观看一区二区三区| 亚洲自拍偷拍网站| 欧美色爱综合网| 亚洲一区视频在线| 欧美日韩在线播放一区| 亚洲国产中文字幕在线视频综合 | 色婷婷av一区二区三区之一色屋| 国产婷婷精品av在线| 国产成人小视频| 中文字幕第一区| 色综合久久久久| 亚洲成a人v欧美综合天堂下载 | 欧美电影免费观看高清完整版在线观看 | 精品日韩在线观看| 国产精品综合一区二区三区| 久久影视一区二区| 国产91精品一区二区麻豆亚洲| 欧美—级在线免费片| 成人天堂资源www在线| 中文字幕亚洲视频| 欧美日韩精品一区二区天天拍小说 | 91精品国产综合久久小美女| 免费成人在线观看视频| 国产亚洲欧美日韩日本| 成人网男人的天堂| 亚洲综合色自拍一区| 欧美一区二区女人| 丁香五精品蜜臀久久久久99网站 | 久久精品免费观看| 亚洲国产精品t66y| 欧美三级日本三级少妇99| 欧美aaa在线| 中文字幕一区二区在线观看| 欧美无砖砖区免费| 国产麻豆精品95视频| 亚洲日本丝袜连裤袜办公室| 欧美精品色综合| 国产91在线观看| 亚洲国产sm捆绑调教视频| 欧美精品一区二区三区久久久| 成人精品小蝌蚪| 五月婷婷激情综合网| 久久精品人人爽人人爽| 精品视频免费在线| 国产一区二区91| 亚洲成人一区在线| 国产精品热久久久久夜色精品三区| 欧美性videosxxxxx| 国产精品综合av一区二区国产馆| 夜夜嗨av一区二区三区四季av | 国产精品亚洲а∨天堂免在线| 亚洲裸体在线观看| 久久综合久久综合久久| 欧美日韩国产在线观看| www.在线成人| 国产综合一区二区| 亚洲网友自拍偷拍| 亚洲欧美日韩国产综合在线| 精品精品欲导航| 精品视频1区2区3区| 97se亚洲国产综合自在线观| 激情图片小说一区| 日本不卡一二三区黄网| 一区二区三区欧美激情| 国产精品久久免费看| 日韩三级视频中文字幕| 欧美色图片你懂的| 91女人视频在线观看| 国产.欧美.日韩| 国产精品99精品久久免费| 日本不卡视频在线观看| 日韩国产精品久久| 亚洲国产精品久久人人爱| 亚洲免费伊人电影| 亚洲视频综合在线| 国产精品福利av| 亚洲国产成人在线| 久久久九九九九| 国产性天天综合网| 精品久久久久久久久久久久久久久| 欧美在线你懂的| 欧美日韩一区中文字幕| 欧美日韩亚洲丝袜制服| 欧亚洲嫩模精品一区三区| 99久久精品费精品国产一区二区| 风间由美性色一区二区三区| 国产成人免费av在线| 成人一区二区视频| 96av麻豆蜜桃一区二区| 97久久精品人人做人人爽| www.日韩大片| 在线亚洲免费视频| 欧美三级一区二区| 欧美精品色综合| 欧美大度的电影原声| 欧美本精品男人aⅴ天堂| 久久女同性恋中文字幕| 国产女主播视频一区二区| 国产精品卡一卡二卡三| 亚洲精品福利视频网站| 视频一区二区欧美| 国内一区二区在线| 成人激情午夜影院| 99精品视频在线免费观看| 欧美丝袜丝交足nylons图片| 欧美日韩极品在线观看一区| 欧美一区二区啪啪| 久久精品一二三| 亚洲综合区在线| 蜜臀久久99精品久久久久宅男 | 日本v片在线高清不卡在线观看| 精品一区二区免费在线观看| 国产麻豆精品一区二区| 色素色在线综合| 日韩精品一区在线观看| 国产精品不卡视频| 三级成人在线视频| 粉嫩一区二区三区性色av| 91国偷自产一区二区开放时间| 欧美一区二区视频在线观看2020| 26uuu亚洲| 亚洲综合色网站| 国产一区二区三区在线看麻豆| 91尤物视频在线观看| 欧美一区二区精品久久911| 国产欧美日韩不卡免费| 午夜视频在线观看一区二区| 国产高清不卡一区二区| 欧美日韩黄色一区二区| 国产精品女主播在线观看| 日本不卡1234视频| 欧美男男青年gay1069videost| 26uuu精品一区二区在线观看| 亚洲精品久久久蜜桃| 国产一区999| 欧美日本一区二区三区| 自拍偷自拍亚洲精品播放| 蜜桃精品视频在线| 色拍拍在线精品视频8848| 久久众筹精品私拍模特| 亚洲国产色一区| av在线一区二区三区| 26uuu精品一区二区| 视频在线观看一区| 91视视频在线观看入口直接观看www| 日韩欧美一区在线| 亚洲一区二区三区四区的| 成人开心网精品视频| 精品国产乱子伦一区| 婷婷丁香久久五月婷婷| 日本乱人伦aⅴ精品| 中文字幕日韩av资源站| 国产suv一区二区三区88区| 日韩三区在线观看| 青娱乐精品视频在线| 欧美三级日韩三级| 亚洲香肠在线观看| 在线观看日韩电影| 亚洲精品久久7777| 99久久99久久综合| 亚洲欧洲一区二区在线播放| 国产99久久久久久免费看农村| 精品国产乱码久久久久久影片| 日韩av在线播放中文字幕| 欧美精品丝袜中出| 日本不卡123| 精品理论电影在线| 极品尤物av久久免费看| 久久免费美女视频| 国产盗摄视频一区二区三区| 久久亚洲精品国产精品紫薇|