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

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

?? webserve.c

?? 內容包括: 嵌入式TCPIP協議棧應用主機端程序(VC6源碼);如何構造嵌入式Linux系統;基于ARM的嵌入式TCPIP協議的實現等
?? C
?? 第 1 頁 / 共 2 頁
字號:
        ok = 0;
    else if (conn == TCP_OPEN)
    {
        adp->in = 0;
    }
    else if (conn == TCP_DATA)
    {
        if ((len = buff_chrlen(&ts->rxb, '\n'))!=0) /* Got request? */
        {
            len = mini(len+1, HTTP_MAXLEN);         /* Truncate length */
            buff_out(&ts->rxb, (BYTE *)httpreq, (WORD)len);
            httpreq[len] = 0;
            if (webdebug)                           /* Display if debugging */
                printf("%s", httpreq);
            s = strtok(httpreq, " ");               /* Chop into tokens */
            if (!strcmp(s, "GET"))                  /* 1st token is 'GET'? */
            {
                name = strtok(0, " ?\r\n");         /* 2nd token is filename */
                http_get(ts, name);                 /* Process filename */
            }
        }
    }
    http_data(ts);
    return(ok);
}

/* Process the filepath from an HTTP 'get' method */
void http_get(TSOCK *ts, char *fname)
{
    APPDATA *adp;
    char *s=0;

    adp = (APPDATA *)ts->app;
    strcpy(filepath, filedir);          /* Add on base directory */
    if (*fname)                         /* Copy filename without leading '/' */
        strcat(filepath, fname+1);      
    strlwr(filepath);                   /* Force to lower-case */
    if (strlen(fname) <= 1)
    {                                   /* If name is only a '/'.. */
        if (webdebug)                   /* Display if debugging */
            printf("Sending directory\n", filepath);
        strcpy(filepath, filedir);
        strcat(filepath, "*.*");        /* ..display directory */
#if HTML_DIR == 3
        dir_head(&ts->txb, filedir);    /* Send out directory */
        adp->count = 1;
#elif HTML_DIR > 0
        dir_head(&ts->txb, filedir);    /* Send out directory */
        if ((s = find_first(filepath)) != 0) do {
            dir_entry(&ts->txb, s);
        } while ((s = find_next()) != 0);
        dir_tail(&ts->txb);
        close_tcp(ts);
#else
        buff_instr(&ts->txb, HTTP_OK HTTP_TXT HTTP_BLANK);
        buff_instr(&ts->txb, "Directory\r\n");
        if ((s = find_first(filepath)) != 0) do {
            buff_instr(&ts->txb, s);    /* One file per line */
            buff_instr(&ts->txb, "\r\n");
        } while ((s = find_next()) != 0);
        close_tcp(ts);
#endif
    }                                   /* If file not found.. */
    else if ((adp->in = fopen(filepath, "rb")) == 0)
    {                                   /* ..send message */
        if (webdebug)                   /* Display if debugging */
            printf("File '%s' not found\n", filepath);
        buff_instr(&ts->txb, HTTP_NOFILE HTTP_TXT HTTP_BLANK);
        buff_inprintf(&ts->txb, "Webserve v%s\r\n", VERSION);
        buff_inprintf(&ts->txb, "Can't find '%s'\r\n", filepath);
        close_tcp(ts);
    }
    else                                /* File found OK */
    {
#if HTTP_HEAD == 0
                                                    /* No HTTP header or.. */
#elif HTTP_HEAD == 1                                /* Simple OK header or.. */
        buff_instr(&ts->txb, HTTP_OK HTTP_BLANK);
#else                                               /* Content-type header */
        buff_instr(&ts->txb, HTTP_OK);
        s = strstr(filepath, ".htm") ? HTTP_HTM :
            strstr(filepath, ".txt") ? HTTP_TXT :
            strstr(filepath, ".gif") ? HTTP_GIF :
            strstr(filepath, ".xbm") ? HTTP_XBM : "";
        buff_instr(&ts->txb, s);
        buff_instr(&ts->txb, HTTP_BLANK);
#endif
        if (webdebug)                   /* Display if debugging */
            printf("File '%s' %s", filepath, *s ? s : "\n");
    }
}

/* If there is space in the transmit buffer, send HTTP data */
void http_data(TSOCK *ts)
{
    APPDATA *adp;
    int count=0, ok, len;
    char *s;

    adp = (APPDATA *)ts->app;
    if (adp->count)                     /* If sending a directory.. */
    {                                   /* Skip filenames already sent */
        ok = (s = find_first(filepath)) != 0;
        while (ok && ++count<adp->count)
            ok = (s = find_next()) != 0;
        while (ok && dir_entry(&ts->txb, s))
        {                               /* Send as many entries as will fit */
            adp->count++;
            ok = (s = find_next()) != 0;
        }
        if (!ok && dir_tail(&ts->txb))  /* If no more entries.. */
        {
            adp->count = 0;             /* ..start closing connection */
            close_tcp(ts);
        }
    }                                   /* If sending a file.. */
    if (adp->in && (len = buff_freelen(&ts->txb)) > 0)
    {                                   /* ..put out as much as possible */
        if ((len = buff_infile(&ts->txb, adp->in, (WORD)len)) == 0)
        {                               /* If end of file, close it.. */
            fclose(adp->in);
            adp->in = 0;
            close_tcp(ts);              /* ..and start closing connection */
        }
    }
}

/* Write out head of HTML file dir, given filepath. Return 0 if error */
int dir_head(CBUFF *bp, char *path)
{
#if HTML_DIR > 1
    return(buff_instr(bp, HTTP_OK HTTP_HTM HTTP_BLANK) &&
           buff_instr(bp, "<html><head><title>Directory</title></head>\r\n") &&
           buff_inprintf(bp, "<body><h2>Directory of %s</h2>\r\n", path) &&
           buff_instr(bp, "<table><th>File</th><th>Size</th>\r\n"));
#else
    return(buff_instr(bp, HTTP_OK HTTP_HTM HTTP_BLANK) &&
           buff_instr(bp, "<html><head><title>Directory</title></head>\r\n") &&
           buff_inprintf(bp, "<body><h2>Directory of %s</h2>\r\n", path));
#endif
}

/* Write out HTML file dir entry, given name. Return 0 if buffer full */
int dir_entry(CBUFF *bp, char *name)
{
#if HTML_DIR > 1
    return(buff_inprintf(bp, "<tr><td><a href='%s'>%s</a></td>", name, name) &&
           buff_inprintf(bp, "<td>%lu</td></tr>\r\n", find_filesize()));
#else
    return(buff_inprintf(bp, "<a href='%s'>%s</a><br>\r\n", name, name));
#endif
}

/* Write out tail of HTML file dir. Return length, 0 if error */
int dir_tail(CBUFF *bp)
{
#if HTML_DIR > 1
    return(buff_instr(bp, "</table></body></html>\r\n"));
#else
    return(buff_instr(bp, "</body></html>\r\n"));
#endif
}

/* Check for incoming packets, send response if required */
void do_receive(GENFRAME *gfp)
{
    NODE node;
    ARPKT *arp;
    IPKT *ip;
    ICMPKT *icmp;
    int rxlen, txlen, len;

    if ((rxlen=get_frame(gfp)) > 0)                 /* Any incoming frames? */
    {
        ip = getframe_datap(gfp);
        if (is_arp(gfp, rxlen))
        {                                           /* ARP response? */
            arp = getframe_datap(gfp);
            if (arp->op==ARPREQ && arp->dip==locnode.ip)
            {                                       /* ARP request? */
                node.ip = arp->sip;                 /* Make ARP response */
                memcpy(node.mac, arp->smac, MACLEN);
                txlen = make_arp(gfp, &locnode, &node, ARPRESP);
                put_frame(gfp, txlen);              /* Send packet */
            }
            if (arp->op==ARPRESP && arp->dip==locnode.ip)
            {                                       /* ARP response? */
                arp_receive(tsocks, NSOCKS, gfp);
            }
        }
        else if ((rxlen=is_ip(gfp, rxlen))!=0 &&    /* IP datagram? */
                 ip->i.dip==locnode.ip || ip->i.dip==BCASTIP)
        {
            getip_srce(gfp, &node);
            if ((len=is_icmp(ip, rxlen))!=0)        /* ICMP? */
            {
                icmp = (ICMPKT *)ip;
                if (icmp->c.type==ICREQ)            /* Echo request? */
                {
                    len = (WORD)maxi(len, 0);       /* Make response */
                    txlen = make_icmp(gfp, &locnode, &node, ICREP,
                                      icmp->c.code, (WORD)len);
                    put_frame(gfp, txlen);          /* Send packet */
                }
            }
            else if ((len=is_tcp(ip, rxlen))!=0)    /* TCP? */
            {
                tcp_receive(tsocks, NSOCKS, gfp, len);
            }
        }
    }
}

/* Poll the network interface to keep it alive */
void do_poll(GENFRAME *gfp)
{
    tcp_poll(tsocks, NSOCKS, gfp);
    poll_net(gfp->g.dtype);
}

/* Version of printf() to write a string into a circular buffer.
** Return string length, or zero if insufficient room in buffer */
int buff_inprintf(CBUFF *bp, char *str, ...)
{
    char temps[200];
    int len;

    va_list argptr;
    va_start(argptr, str);
    len = vsprintf(temps, str, argptr);
    va_end(argptr);
    if (len<=0 || len>buff_freelen(bp))
        len = 0;
    else
        buff_in(bp, (BYTE *)temps, (WORD)len);
    return(len);
}

/* Display usage help */
void disp_usage(void)
{
    printf("Usage:    WEBSERVE [ options ] [ directory ]\n");
    printf("          If no directory specified, default is '%s'\n", FILEDIR);
    printf("Options:  -c name   Config filename (default %s)\n", CFGFILE);
    printf("          -s        State display\n");
    printf("          -t        TCP segment display\n");
    printf("          -v        Verbose packet display\n");
    printf("          -w        Web (HTTP) diagnostics\n");
    printf("          -x        Hex packet display\n");
    printf("Example:  WEBSERVE c:\\mydocs\n");
}

/* Ctrl-break handler: set flag and return */
void break_handler(int sig)
{
    breakflag = sig;
}

/* EOF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美成人一区| 95精品视频在线| 国产精品自拍三区| 欧美精选一区二区| 欧美一区二区三区在线看| 欧美色视频一区| 久久久99免费| 亚洲狠狠爱一区二区三区| 国产91精品免费| 日韩精品一区二区在线| 欧美综合欧美视频| 国产片一区二区| 久久se这里有精品| 欧美日韩视频在线观看一区二区三区| 久久久99精品免费观看| 亚洲大片在线观看| 色综合久久久网| 91丨porny丨户外露出| 久久久久久久久伊人| 亚洲国产成人va在线观看天堂| 精品一区中文字幕| 日韩欧美自拍偷拍| 日韩精品一区二区三区中文不卡| 亚洲综合在线视频| 欧美妇女性影城| 性做久久久久久久久| 欧美三级视频在线| 欧美激情中文不卡| 成人免费观看视频| 欧美国产综合一区二区| 国产成人综合自拍| 亚洲欧美日韩在线| 欧美无砖砖区免费| 狠狠色综合播放一区二区| 久久美女艺术照精彩视频福利播放| 亚洲高清免费一级二级三级| 51久久夜色精品国产麻豆| 亚洲精品伦理在线| 欧美性猛交xxxxxx富婆| 婷婷久久综合九色综合伊人色| 欧美性欧美巨大黑白大战| 亚洲一区二区三区视频在线播放| 欧美人与性动xxxx| 国产资源精品在线观看| 国产天堂亚洲国产碰碰| 粉嫩av亚洲一区二区图片| 亚洲另类在线视频| 亚洲精品一区二区三区蜜桃下载| 美女视频一区二区三区| 国产精品福利一区| 亚洲国产乱码最新视频 | 亚洲在线成人精品| 成人免费福利片| 波多野结衣亚洲| 狠狠色丁香久久婷婷综合_中| 1024亚洲合集| 91精品国产麻豆| 99免费精品在线| 狠狠色狠狠色合久久伊人| 中文字幕成人av| 99re这里只有精品6| 日韩理论片一区二区| 不卡免费追剧大全电视剧网站| 亚洲国产精品久久人人爱蜜臀| 久久久久久久久久久久久久久99 | 国产精品动漫网站| 精品一区二区三区在线播放视频| 自拍偷拍亚洲欧美日韩| 日本一区免费视频| 国产精品久久一级| 色婷婷久久久久swag精品 | 国产精品99久久久久久有的能看| 亚洲精品乱码久久久久久黑人 | 精品少妇一区二区三区免费观看| 久久精品国产77777蜜臀| 91精品在线一区二区| 99热精品国产| 欧美日韩一区二区三区免费看 | 国产精品一二三四五| 国产伦理精品不卡| 在线播放中文一区| 午夜精彩视频在线观看不卡| 99re热这里只有精品视频| 亚洲色大成网站www久久九九| 丁香桃色午夜亚洲一区二区三区 | 国产成人精品午夜视频免费| 欧美久久久一区| 日本欧美一区二区三区| 欧美天天综合网| 亚洲美女免费视频| 91豆麻精品91久久久久久| 韩国中文字幕2020精品| 欧美乱妇23p| 丝袜诱惑制服诱惑色一区在线观看 | 国产午夜精品美女毛片视频| 波多野结衣在线一区| 一区二区三区中文字幕在线观看| 国产美女一区二区三区| 欧美在线免费观看亚洲| 成人影视亚洲图片在线| www.成人网.com| 精品欧美乱码久久久久久| 久久久91精品国产一区二区三区| 亚洲九九爱视频| 国产99久久久久久免费看农村| 精品国产欧美一区二区| 欧美日韩电影在线播放| 国产精品18久久久久久久网站| 777色狠狠一区二区三区| 中文字幕精品在线不卡| 免费在线看成人av| 欧美在线不卡一区| 国产精品伦理一区二区| 精品亚洲aⅴ乱码一区二区三区| 欧美日韩一级片在线观看| 中文字幕一区在线| 成人妖精视频yjsp地址| 久久综合网色—综合色88| 午夜欧美电影在线观看| 在线精品亚洲一区二区不卡| 亚洲欧洲成人av每日更新| 懂色av中文一区二区三区| 久久久蜜桃精品| 极品少妇一区二区三区精品视频| 欧美精三区欧美精三区| 亚洲国产综合在线| 欧洲国内综合视频| 亚洲综合色在线| 欧美性猛交xxxx乱大交退制版| 亚洲人123区| 色又黄又爽网站www久久| 国产精品久久久久久久久图文区| 国产寡妇亲子伦一区二区| 26uuu成人网一区二区三区| 美国毛片一区二区三区| 日韩欧美中文一区二区| 看电影不卡的网站| 欧美不卡一区二区| 欧美午夜免费电影| 亚洲精品中文在线影院| 色综合色综合色综合色综合色综合 | 欧美日韩国产一级二级| 亚洲国产日韩在线一区模特| 欧美亚洲禁片免费| 香蕉成人伊视频在线观看| 欧美日韩黄色一区二区| 天天操天天综合网| 日韩欧美三级在线| 国产一区亚洲一区| 国产午夜久久久久| 国产精品欧美精品| 欧美麻豆精品久久久久久| 激情偷乱视频一区二区三区| 亚洲免费观看高清完整版在线观看| 日韩视频123| 精品999久久久| 欧美一二三四区在线| 在线免费av一区| 97久久精品人人澡人人爽| 狠狠色综合日日| 日韩成人精品在线| 亚洲自拍偷拍av| 亚洲欧美日韩一区二区三区在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 成人激情文学综合网| 狠狠网亚洲精品| 精品无码三级在线观看视频| 亚洲成a人片在线观看中文| 69久久夜色精品国产69蝌蚪网| 日韩精品在线看片z| 久久欧美一区二区| 欧美zozozo| 亚洲欧洲99久久| 久久成人久久爱| 国产一区二区在线看| 午夜精品久久久久影视| 欧美日韩一区二区在线视频| 国内不卡的二区三区中文字幕| 中文字幕av免费专区久久| 久久综合九色欧美综合狠狠| 欧美r级在线观看| 国产日韩欧美在线一区| 亚洲综合精品久久| 欧美日韩精品系列| 狠狠色狠狠色综合| 欧美日韩国产a| 亚洲欧洲无码一区二区三区| 国产视频一区二区在线观看| 色婷婷综合久久久中文字幕| 久久9热精品视频| 一区二区三区美女视频| xnxx国产精品| 欧美日韩一区二区在线视频| 国产成人精品亚洲午夜麻豆| 午夜电影久久久| 亚洲欧美一区二区久久| 久久亚洲精精品中文字幕早川悠里| 91福利在线播放| 成人精品视频一区二区三区尤物| 美女在线观看视频一区二区|