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

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

?? web_egi.c

?? 嵌入式TCPIP協議棧的源代碼!
?? 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一区二区三区免费野_久草精品视频
久久在线观看免费| 久久电影网站中文字幕| 日韩精品五月天| 豆国产96在线|亚洲| 91精品免费在线| 国产精品家庭影院| 国产一区二区免费视频| 欧美午夜一区二区三区免费大片| 久久久精品免费观看| 日本午夜精品一区二区三区电影| 99re亚洲国产精品| 久久久久久久久久久黄色| 日本亚洲免费观看| 欧美麻豆精品久久久久久| 亚洲欧美日韩中文播放| 高清不卡一区二区在线| 欧美精品一区二区在线播放| 水野朝阳av一区二区三区| 色综合网色综合| 国产精品另类一区| 国产成+人+日韩+欧美+亚洲| 欧美成人免费网站| 久久精品久久综合| 日韩一级二级三级精品视频| 亚洲一区免费视频| 在线观看日韩电影| 夜夜爽夜夜爽精品视频| 色婷婷精品大在线视频| 亚洲情趣在线观看| 欧洲精品中文字幕| 亚洲v中文字幕| 欧美日韩aaaaaa| 五月天丁香久久| 91精品欧美久久久久久动漫 | 国产人伦精品一区二区| 狠狠色综合色综合网络| 26uuu国产一区二区三区| 久久97超碰色| 久久日一线二线三线suv| 国内不卡的二区三区中文字幕 | 国产一区二区在线电影| www国产精品av| 粉嫩av一区二区三区粉嫩| 国产精品人成在线观看免费| 99久久久久免费精品国产| 最新国产成人在线观看| 在线欧美一区二区| 日韩av不卡在线观看| 欧美成人一区二区三区片免费| 久久99精品网久久| 欧美国产1区2区| 色诱亚洲精品久久久久久| 亚洲成人一区在线| 日韩欧美一区二区在线视频| 国产麻豆精品视频| 亚洲精品成人a在线观看| 欧美福利视频一区| 国产高清成人在线| 亚洲伦理在线免费看| 69成人精品免费视频| 国产一区二区三区四区五区美女| 亚洲国产精品国自产拍av| 欧美系列一区二区| 国产在线播放一区三区四| 国产精品伦理在线| 日韩欧美资源站| 成人国产精品免费观看动漫| 五月天网站亚洲| 国产精品你懂的在线欣赏| 欧美二区在线观看| av网站免费线看精品| 日本午夜精品视频在线观看| 国产精品久久久久久久午夜片| 欧美疯狂做受xxxx富婆| 成人天堂资源www在线| 肉丝袜脚交视频一区二区| 中文字幕国产精品一区二区| 欧美日韩成人高清| 91网站视频在线观看| 精品一区二区影视| 亚洲国产精品自拍| 国产精品成人午夜| 欧美电影免费观看高清完整版在| 色婷婷综合久色| 国产精品亚洲一区二区三区妖精 | 26uuu精品一区二区在线观看| 色综合久久99| 成人美女在线观看| 狠狠色狠狠色合久久伊人| 午夜精品福利一区二区三区av| 成人欧美一区二区三区1314| 精品sm在线观看| 91精品国产综合久久婷婷香蕉| 91在线云播放| 成人午夜在线播放| 九九精品一区二区| 无码av免费一区二区三区试看| 自拍偷拍国产精品| 国产精品视频一区二区三区不卡| 日韩欧美色综合| 欧美区视频在线观看| 91免费国产在线观看| 成人动漫av在线| 国产一区美女在线| 精品在线你懂的| 久久精品av麻豆的观看方式| 丝袜国产日韩另类美女| 亚洲国产欧美一区二区三区丁香婷| 国产精品卡一卡二卡三| 亚洲国产高清aⅴ视频| 国产视频一区不卡| 国产午夜精品一区二区| 国产三区在线成人av| 久久久青草青青国产亚洲免观| 亚洲精品在线免费观看视频| 久久综合99re88久久爱| 久久美女艺术照精彩视频福利播放| 欧美刺激脚交jootjob| 日韩精品一区二区三区中文不卡 | 欧美色视频在线| 欧美亚洲高清一区二区三区不卡| 91看片淫黄大片一级在线观看| av欧美精品.com| 9i看片成人免费高清| 99久久婷婷国产综合精品电影 | 国产成人av影院| 国产大陆精品国产| av福利精品导航| 色呦呦国产精品| 欧美日韩国产一区| 日韩女同互慰一区二区| 国产午夜精品在线观看| 日韩毛片视频在线看| 亚洲精品va在线观看| 五月综合激情日本mⅴ| 男人的j进女人的j一区| 国产精品一区二区黑丝| 99国产精品99久久久久久| 在线观看91视频| 日韩精品中文字幕一区 | eeuss影院一区二区三区| 91在线观看美女| 91精品在线一区二区| 久久久激情视频| 亚洲第一成人在线| 国产精一区二区三区| 色妞www精品视频| 日韩久久精品一区| 亚洲色图另类专区| 蜜桃av一区二区在线观看| 岛国精品一区二区| 欧美激情在线一区二区| 天天色图综合网| 国产精品羞羞答答xxdd| 蜜乳av一区二区| 成人av免费网站| 欧美日韩免费视频| 久久精品一级爱片| 亚洲国产wwwccc36天堂| 国产一区二区三区免费观看| 99热99精品| 欧美不卡视频一区| 亚洲午夜在线电影| 国产a精品视频| 欧美日本乱大交xxxxx| 中文字幕精品一区二区三区精品| 日韩精品免费专区| 91在线播放网址| 久久综合精品国产一区二区三区| 亚洲国产一二三| 成人av小说网| 精品久久久久久久久久久久久久久久久 | 亚洲午夜视频在线| 国产激情偷乱视频一区二区三区| 在线亚洲+欧美+日本专区| 久久人人超碰精品| 免费高清视频精品| 欧美日韩中文国产| 一区二区免费在线播放| 成人激情免费视频| 久久久久久久久97黄色工厂| 午夜一区二区三区视频| 91亚洲永久精品| 国产精品久久久久精k8| 国产91精品一区二区| 日韩美女在线视频| 热久久久久久久| 欧美夫妻性生活| 婷婷亚洲久悠悠色悠在线播放| 色悠悠亚洲一区二区| |精品福利一区二区三区| 懂色一区二区三区免费观看| 精品国产sm最大网站免费看| 日本不卡高清视频| 欧美一区二视频| 麻豆精品在线视频| 欧美大片一区二区| 久久疯狂做爰流白浆xx| 精品成人一区二区三区四区| 精品亚洲成a人在线观看|