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

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

?? web_egi.c

?? 開源的嵌入式WEB服務器
?? C
?? 第 1 頁 / 共 2 頁
字號:
    char *start, *end;

    adp = (APPDATA *)ts->app;
    if (adp->in && (len = buff_freelen(&ts->txb)) >= EGI_BUFFLEN)
    {
        if (adp->egi)                   /* If EGI is active.. */
        {
            len = fread(egibuff, 1, EGI_BUFFLEN, adp->in);
            egibuff[len] = 0;
            if (len <= 0)
            {                           /* If end of file, close it.. */
                fclose(adp->in);
                adp->in = 0;
                close_tcp(ts);          /* ..and start closing connection */
            }
            else
            {                           /* Check for start of EGI tag */
                if ((start = strstr(egibuff, EGI_STARTS)) == 0)
                    start = strchr(&egibuff[len-EGI_STARTLEN], '<');
                if (start==egibuff && (end=strstr(egibuff, EGI_ENDS))!=0)
                {                       /* If tag is at start of buffer.. */
                    n = (int)(end - start) + sizeof(EGI_ENDS) - 1;
                    fseek(adp->in, n-len, SEEK_CUR);
                    egibuff[n] = 0;     /* ..call handler */
                    adp->egi(ts, egibuff);
                    len = 0;
                }                       /* If tag not at start of buffer.. */
                else if (start)
                {                       /* ..send file up to tag */
                    n = (int)(start - egibuff);
                    fseek(adp->in, n-len, SEEK_CUR);
                    len = n;
                }
                if (len > 0)            /* Send next chunk of file */
                    buff_in(&ts->txb, (BYTE *)egibuff, (WORD)len);
            }
        }
        else if (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 */
        }
    }
}

/* 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);
}

/* Add a variable to the connection variable space, return 0 if no room */
int put_connvar(TSOCK *ts, char *name, char *val)
{
    return(put_connvarlen(ts, name, strlen(name), val, strlen(val)));
}

/* Add a variable to the connection variable space, return 0 if no room
** String aren't necessarily null-terminated; they are pointers & lengths */
int put_connvarlen(TSOCK *ts, char *name, int namlen, char *val, int valen)
{
    int ok=0;
    APPDATA *adp;

    adp = (APPDATA *)ts->app;
    if (adp->vlen+namlen+valen+3<VARSPACE &&
        namlen<MAX_EGINAME && valen<MAX_EGIVAL)
    {
        adp->vars[adp->vlen++] = (char)(namlen | 0x80);
        strncpy(&adp->vars[adp->vlen], name, namlen);
        adp->vlen += namlen;
        adp->vars[adp->vlen++] = 0;
        strncpy(&adp->vars[adp->vlen], val, valen);
        adp->vlen += valen;
        adp->vars[adp->vlen++] = 0;
    }
    return(ok);
}

/* Get variable from the connection space, return null string if not found */
char *get_connvar(TSOCK *ts, char *name)
{
    int n, len;
    APPDATA *adp;
    char *s=0, *end;

    adp = (APPDATA *)ts->app;
    end = &adp->vars[adp->vlen];
    n = strlen(name);
    if (n < MAX_EGINAME)
    {
        s = memchr(adp->vars, (char)(n | 0x80), adp->vlen-3);
        while (s && strncmp(s+1, name, n) && (len=(int)(end-s))>3)
            s = memchr(s+1, (char)(n | 0x80), len);
    }
    return(s ? s+n+2 : "");
}

/* Find variable in the connection space, by matching first few chars
** Return full name string, null string if not found */
char *find_connvar(TSOCK *ts, char *name)
{
    int n;
    APPDATA *adp;
    char *s=0, *end;

    adp = (APPDATA *)ts->app;
    end = &adp->vars[adp->vlen];
    n = strlen(name);
    if (n < MAX_EGINAME)
    {
        s = adp->vars;
        while (*s && strncmp(s+1, name, n) && (int)(end-s)>2)
        {
            do {
                s++;
            } while (s<end-2 && !(*s & 0x80));
        }
    }
    return(*s & 0x80 ? s+1 : "");
}

/* Display all vars in the connection variable space, for debugging */
void disp_connvars(TSOCK *ts)
{
    int len=0, n;
    APPDATA *adp;

    adp = (APPDATA *)ts->app;
    while (len < adp->vlen)
    {
        n = (int)adp->vars[len++] & 0x7f;
        printf("Var %s", &adp->vars[len]);
        len += n + 1;
        printf("=%s\n", &adp->vars[len]);
        len += strlen(&adp->vars[len]) + 1;
    }
}

/* Get connection variable values from URL */
void url_connvars(TSOCK *ts, char *str)
{
    int nlen, vlen, n;

    if (*str == '/')
        str++;
    vlen = strcspn(str, " .?");
    put_connvarlen(ts, "fname", 5, str, vlen);
    str += vlen;
    if (*str == '.')
    {
        str++;
        vlen = strcspn(str, " ?");
        put_connvarlen(ts, "fext", 4, str, vlen);
        str += vlen;
    }
    if (*str++ == '?')
    {
        while ((nlen=strcspn(str, "="))!=0 && (vlen=strcspn(str+nlen, "&"))!=0)
        {
            n = url_decode(str+nlen+1, vlen-1);
            put_connvarlen(ts, str, nlen, str+nlen+1, n);
            str += nlen + vlen;
            if (*str == '&')
                str++;
        }
    }
}

/* Decode a URL-encoded string (with length), return new length */
int url_decode(char *str, int len)
{
    int n=0, d=0;
    char c, c2, *dest;

    dest = str;
    while (n < len)
    {
        if ((c = str[n++]) == '+')
            c = ' ';
        else if (c=='%' && n+2<=len &&
                 isxdigit(c=str[n++]) && isxdigit(c2=str[n++]))
        {
            c = c<='9' ? (c-'0')*16 : (toupper(c)-'A'+10)*16;
            c += c2<='9' ? c2-'0' : toupper(c2)-'A'+10;
        }
        dest[d++] = c;
    }
    return(d);
}

/* Open a file, given the URL filename. Return file handle, 0 if error */
FILE *url_fopen(char *str)
{
    char fpath[MAXPATH+1];
    int n;

    if (*str == '/')                        /* Strip leading '/' */
        str++;
    strcpy(fpath, filedir);                 /* Copy base directory */
    if (*str <= ' ')                        /* No filename left? */
    {
        strcat(fpath, DEFAULTFILE);         /* Use default if none */
    }
    else
    {
        n = strlen(fpath);                  /* Copy requested filename */
        while (n<MAXPATH && *str>' ' && *str!='?')
            fpath[n++] = *str++;
        fpath[n] = 0;
    }
    return(fopen(fpath, "rb"));             /* Open file */
}

/* Execute the EGI function corresponding to a string, return 0 if not found */
int egi_execstr(TSOCK *ts, char *str)
{
    int ok=0, n=0;

    while (egifuncs[n].func && !(ok=!stricmp(str, egifuncs[n].name)))
        n++;
    if (ok)
        egifuncs[n].func(ts, 0);
    return(ok);
}

/* Display usage help */
void disp_usage(void)
{
    printf("Usage:    WEB_EGI [ 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一区二区三区免费野_久草精品视频
精品视频在线免费观看| 午夜一区二区三区视频| 99精品热视频| 国产精品久久久久久久久免费樱桃| 美女精品自拍一二三四| 欧美成人性战久久| 国产成人综合精品三级| 欧美高清一级片在线观看| 国产91色综合久久免费分享| 国产精品免费免费| 色欧美日韩亚洲| 亚州成人在线电影| 精品福利一二区| 97久久超碰精品国产| 视频在线在亚洲| 国产欧美久久久精品影院| 色婷婷久久久久swag精品| 日韩激情视频在线观看| 国产欧美va欧美不卡在线| 色老汉av一区二区三区| 久久国产人妖系列| 夜夜操天天操亚洲| 欧美激情一区二区三区全黄| 国产精品看片你懂得| www.在线欧美| 免费成人美女在线观看.| 国产精品私人影院| 欧美一区午夜精品| 97精品视频在线观看自产线路二| 麻豆精品视频在线| 一区二区在线看| 国产欧美一区视频| 精品国产一区二区三区久久影院 | 国产欧美日本一区二区三区| 在线日韩一区二区| 成人免费的视频| 精品伊人久久久久7777人| 亚洲成av人在线观看| 一区二区国产视频| 一区二区激情小说| 一区二区三区高清| 亚洲欧美日韩久久精品| 国产精品区一区二区三| 久久婷婷色综合| 中文字幕免费不卡| 欧美激情资源网| 亚洲丝袜精品丝袜在线| 亚洲欧洲日韩一区二区三区| 国产精品伦理在线| 一区二区三区日韩| 亚洲成av人影院| 麻豆成人综合网| 国产美女久久久久| av在线播放一区二区三区| 99久久国产综合精品女不卡| 91麻豆精东视频| 欧美日韩国产小视频| 日韩欧美色综合| 国产日韩欧美综合在线| 亚洲品质自拍视频| 性做久久久久久久久| 国产精品自拍毛片| 在线一区二区三区做爰视频网站| 欧美三级三级三级| 精品久久久久久综合日本欧美| 国产精品系列在线| 一区二区三区不卡在线观看| 午夜精品久久久久久不卡8050| 精品午夜一区二区三区在线观看 | 国产在线精品不卡| 色偷偷88欧美精品久久久| 日韩一区二区三区视频在线观看| 精品国产人成亚洲区| 一区二区三区在线免费| 精品伊人久久久久7777人| 欧洲精品一区二区三区在线观看| 欧美一区二区免费观在线| 亚洲欧美在线aaa| 久久精品国产99国产精品| 色噜噜狠狠色综合中国| 久久无码av三级| 免费成人在线视频观看| 91国产成人在线| 国产精品超碰97尤物18| 国产伦精一区二区三区| 欧美一区三区二区| 日韩制服丝袜先锋影音| 欧洲精品一区二区三区在线观看| 国产精品美女久久久久久久| 国产精品2024| 国产精品久久久久影院亚瑟| 国产盗摄精品一区二区三区在线| 制服丝袜国产精品| 亚洲成人午夜电影| 欧美理论片在线| 日韩精品一级中文字幕精品视频免费观看| 成人高清在线视频| 亚洲精品视频在线观看网站| k8久久久一区二区三区| 尤物视频一区二区| 欧美日韩午夜影院| 久久99这里只有精品| 久久青草欧美一区二区三区| 国产一区二区三区在线观看免费视频 | 日韩免费观看高清完整版| 蜜臀av在线播放一区二区三区| 欧美一区二区二区| 国产一区在线看| 国产精品日韩成人| 欧美性色欧美a在线播放| 视频在线观看91| 亚洲国产精品高清| 欧美午夜精品一区| 国产在线播放一区| 亚洲男女一区二区三区| 制服丝袜一区二区三区| 国产精品99久久久久久久女警| 中文字幕在线观看一区| 欧美一卡2卡三卡4卡5免费| 福利电影一区二区| 亚洲国产你懂的| 国产三级久久久| 欧美电影一区二区三区| 91色综合久久久久婷婷| 狠狠色丁香久久婷婷综| 一区二区三区日本| 亚洲日本丝袜连裤袜办公室| 精品国产青草久久久久福利| 欧美色大人视频| 91啪亚洲精品| 不卡影院免费观看| 国产精品一区二区久激情瑜伽| 亚洲午夜在线观看视频在线| 日韩伦理av电影| 中文字幕第一区二区| 欧美精品一区二区三区在线| 欧美精品乱码久久久久久| 91视频免费观看| 色综合激情五月| 91在线国产观看| a级精品国产片在线观看| 国产成人一区二区精品非洲| 激情偷乱视频一区二区三区| 日本aⅴ免费视频一区二区三区| 婷婷六月综合网| 日本大胆欧美人术艺术动态| 五月天欧美精品| 麻豆国产欧美一区二区三区| 精品一区二区三区香蕉蜜桃| 奇米亚洲午夜久久精品| 老汉av免费一区二区三区| 看电影不卡的网站| 国产一区二区视频在线| 成人高清伦理免费影院在线观看| 不卡的av网站| 欧美日韩精品一区二区天天拍小说| 欧美精品1区2区| 久久久亚洲高清| 亚洲视频精选在线| 美脚の诱脚舐め脚责91 | 欧美亚一区二区| 91精品婷婷国产综合久久| 26uuu色噜噜精品一区二区| 中文一区一区三区高中清不卡| 亚洲欧美日韩在线| 久久99久久久久| 色婷婷av一区二区三区软件| 欧美日韩一级二级| 久久久久一区二区三区四区| 亚洲美腿欧美偷拍| 国产激情一区二区三区四区 | 亚洲精品在线观看视频| 国产精品久久久久毛片软件| 日韩成人午夜精品| 色欧美片视频在线观看| 久久久久久黄色| 婷婷国产在线综合| 在线视频欧美区| 成人欧美一区二区三区小说| 看电视剧不卡顿的网站| 91碰在线视频| 亚洲日本韩国一区| 成人精品免费视频| 亚洲国产精品av| 国产一区二区按摩在线观看| 欧美一级欧美三级在线观看| 一区二区三区在线播放| 一本色道a无线码一区v| 国产精品美女一区二区| 不卡免费追剧大全电视剧网站| 精品国免费一区二区三区| 蜜桃视频一区二区三区在线观看| 欧美日韩国产乱码电影| 婷婷六月综合亚洲| 在线播放中文一区| 麻豆国产精品一区二区三区 | 在线一区二区视频| 亚洲成人午夜电影| 欧美一级艳片视频免费观看| 激情深爱一区二区|