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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? scratchp.c

?? 嵌入式小型TCPIP協(xié)議棧
?? C
?? 第 1 頁 / 共 3 頁
字號:
    BYTE rxflags=0, *p;
    SCRATCHPKT *sp;

    sp = getframe_datap(nfp);               /* Get pointer to frame data */
    if (rxlen)                              /* If packet received.. */
    {
        rxflags = sp->h.flags;              /* Decode command & data areas */
        if (rxflags&FLAG_CMD || rxflags&FLAG_RESP)
            crlen = strlen((char *)sp->data) + 1;
        dlen = sp->h.dlen - crlen;          /* Actual data is after command */
        diaghdrs[diagidx] = sp->h;          /* Store hdr in diagnostic log */
        diaghdrs[diagidx].ver = DIAG_RX;
        diagidx = (diagidx + 1) % NDIAGS;
        if (rxflags & FLAG_ERR)             /* Convert flags into signals */
            sig = SIG_ERR;
        else if (rxflags & FLAG_STOP)
            sig = SIG_STOP;
        else if (rxflags & FLAG_CMD)
            sig = SIG_CMD;
        else if (rxflags & FLAG_RESP)
            sig = SIG_RESP;
        else if (rxflags & FLAG_START)
            sig = SIG_START;
        else if (rxflags & FLAG_CONN)
            sig = SIG_CONN;
    }
    if (sigdebug && sig && sig!=SIG_CONN && sig<USER_SIGS)
        printf("Signal %s ", signames[sig]);
    if (connstate == STATE_IDLE)            /* If idle state.. */
    {
        timeout(&errtimer, 0);              /* Refresh timer */
        switch (sig)                        /* Check signals */
        {
        case SIG_USER_IDENT:                 /* User IDENT request? */
            txlen = make_scratchpds(nfp, bcast, CMD_IDENT, FLAG_CMD, "");
            break;

        case SIG_USER_OPEN:                 /* User OPEN request? */
            txlen = make_scratchpds(nfp, bcast, CMD_IDENT, FLAG_CMD, remid);
            buff_setall(&txbuff, 1);        /* My distinctive SEQ value */
            newconnstate(STATE_IDENT);      /* Start ident cycle */
            break;

        case SIG_CMD:                       /* Command signal? */
            if (!strcmp((char *)sp->data, CMD_IDENT))
            {                               /* IDENT cmd with my ID or null? */
                if (dlen<2 || !strncmp((char *)&sp->data[crlen], locid, dlen))
                {                           /* Respond to sender */
                    txlen = make_scratchp(nfp, getframe_srcep(nfp), CMD_IDENT,
                                          FLAG_RESP, locid, strlen(locid)+1);
                }
            }
            break;

        case SIG_RESP:                      /* Response signal? */
            if (!strcmp((char *)sp->data, CMD_IDENT))
            {                               /* IDENT response? */
                printf("Ident '%s'", (char *)&sp->data[crlen]);
                if ((p=getframe_srcep(nfp)) !=0 )
                    printf(" address  %s", ethstr(p, temps));
                printf("\n");
            }
            break;

        case SIG_START:                     /* START signal? */
            getframe_srce(nfp, remaddr);
            buff_setall(&txbuff, 0x8001);   /* My distinctive SEQ value */
            txack = sp->h.seq;              /* My ack is his SEQ */
            buff_setall(&rxbuff, txack);
            *remid = 0;                     /* Clear remote ID */
            txlen = make_scratchp(nfp, remaddr, 0, FLAG_CONN, 0, 0);
            newconnstate(STATE_CONNECTED);  /* Go connected */
            break;

        case SIG_CONN:                      /* CONNECTED or STOP signal? */
        case SIG_STOP:
            txlen = make_scratchp(nfp, getframe_srcep(nfp), 0, FLAG_ERR, 0, 0);
            break;                          /* Send error */
        }
    }
    else if (connstate == STATE_IDENT)      /* If in identification cycle.. */
    {
        switch (sig)                        /* Check signals */
        {
        case SIG_RESP:                      /* Got IDENT response? */
            if (!strcmp((char *)sp->data, CMD_IDENT) && dlen<=IDLEN)
            {
                if (!remid[0] || !strcmp((char *)&sp->data[crlen], remid))
                {                           /* Get remote addr and ID */
                    getframe_srce(nfp, remaddr);
                    strcpy(remid, (char *)&sp->data[crlen]);
                    txlen = make_scratchp(nfp, remaddr, 0, FLAG_START, 0, 0);
                    newconnstate(STATE_OPEN);
                }                           /* Open up the connection */
            }
            break;

        case SIG_ERR:                       /* Error response? */
            newconnstate(STATE_IDLE);       /* Go idle */
            break;

        case SIG_TIMEOUT:                   /* Timeout on response? */
            n = strlen(remid) + 1;          /* Resend IDENT command */
            txlen = make_scratchp(nfp, bcast, CMD_IDENT, FLAG_CMD, remid, n);
            break;

        case SIG_FAIL:                      /* Failed? */
            newconnstate(STATE_IDLE);       /* Go idle */
            break;
        }
    }
    else if (connstate == STATE_OPEN)       /* If I requested a connection.. */
    {
        switch (sig)                        /* Check signals */
        {
        case SIG_START:
        case SIG_CONN:                      /*  Response OK? */
            buff_setall(&rxbuff, sp->h.seq);
            txlen = make_scratchp(nfp, remaddr, 0, FLAG_CONN, 0, 0);
            newconnstate(STATE_CONNECTED);  /* Send connect, go connected */
            break;

        case SIG_STOP:                      /* Stop already? */
            txlen = make_scratchp(nfp, remaddr, 0, FLAG_STOP, 0, 0);
            newconnstate(STATE_IDLE);       /* Send stop, go idle */
            break;

        case SIG_ERR:                       /* Error response? */
            newconnstate(STATE_IDLE);
            break;                          /* Go idle */

        case SIG_TIMEOUT:                   /* Timeout on response? */
            txlen = make_scratchp(nfp, remaddr, 0, FLAG_START, 0, 0);
            break;                          /* Resend request */

        case SIG_FAIL:                      /* Failed? */
            newconnstate(STATE_IDLE);       /* Go idle */
            break;

        }
    }
    else if (connstate == STATE_CONNECTED)  /* If connected.. */
    {
        switch (sig)                        /* Check signals */
        {
        case SIG_START:                     /* Duplicate START? */
            txlen = make_scratchp(nfp, remaddr, 0, FLAG_CONN, 0, 0);
            break;                          /* Still connected */

        case SIG_TIMEOUT:                   /* Timeout on acknowledge? */
            buff_retry(&txbuff, buff_trylen(&txbuff));
                                            /* Rewind data O/P buffer */
            /* Fall through to normal connect.. */
        case SIG_CONN:                      /* If newly connected.. */
        case SIG_NULL:                      /* ..or still connected.. */
            /* Check received packet */
            if (rxlen > 0)                  /* Received packet? */
            {
                newconnstate(connstate);    /* Refresh timeout timer */
                /* Rx seq shows how much of his data he thinks I've received */
                oldrx = rxbuff.in - sp->h.seq;  /* Check for his repeat data */
                if (oldrx == 0)                 /* Accept up-to-date data */
                    buff_in(&rxbuff, &sp->data[crlen], dlen);
                else if (oldrx <= WINDOWSIZE)   /* Respond to repeat data.. */
                    tx = 1;                     /* ..with forced (repeat) ack */
                else                            /* Reject out-of-window data */
                    errstr = "invalid SEQ";
                /* Rx ack shows how much of my data he's actually received */
                acked = sp->h.ack - txbuff.out; /* Check amount acked */
                if (acked <= buff_trylen(&txbuff))
                    buff_out(&txbuff, 0, (WORD)acked);  /* My Tx data acked */
                else
                    errstr = "invalid ACK";
                rxw = rxbuff.in - txack;        /* Check Rx window.. */
                if (rxw >= WINDOWSIZE/2)        /* ..force Tx ack if 1/2 full */
                    tx = 1;
                if (errstr)                     /* If error, close connection */
                {
                    printf("Protocol error: %s\n", errstr);
                    txlen = make_scratchp(nfp, remaddr, 0, FLAG_ERR, 0, 0);
                    newconnstate(STATE_IDLE);
                }
            }
            /* Check whether a transmission is needed */
            txw = WINDOWSIZE - buff_trylen(&txbuff);/* Check Tx window space */
            trylen = minw(buff_untriedlen(&txbuff), /* ..size of data avail */
                          minw(SCRATCHPDLEN, txw)); /* ..and max packet len */
            if (trylen>0 || sig==SIG_TIMEOUT || tx) /* If >0, or timeout.. */
            {                                       /* ..or forced Tx.. */
                txlen = make_scratchp(nfp, remaddr, 0, FLAG_CONN, 0, trylen);
                buff_try(&txbuff, sp->data, trylen);/* ..do a transmission */
                txack = rxbuff.in;
            }
            if (buff_trylen(&txbuff) == 0)  /* If all data acked.. */
                newconnstate(connstate);    /* refresh timer (so no timeout) */
            break;

        case SIG_USER_CLOSE:                /* User closing connection? */
            txlen = make_scratchp(nfp, remaddr, 0, FLAG_STOP, 0, 0);
            newconnstate(STATE_CLOSE);      /* Send stop command, go close */
            break;

        case SIG_STOP:                      /* STOP command? */
            txlen = make_scratchp(nfp, remaddr, 0, FLAG_STOP, 0, 0);
            newconnstate(STATE_IDLE);       /* Send ack, go idle */
            break;

        case SIG_ERR:                       /* Error command? */
            newconnstate(STATE_IDLE);       /* Go idle */
            break;

        case SIG_FAIL:                      /* Application failed? */
            txlen = make_scratchp(nfp, remaddr, 0, FLAG_ERR, 0, 0);
            newconnstate(STATE_IDLE);       /* Send stop command, go idle */
            break;

        }
    }
    else if (connstate == STATE_CLOSE)      /* If I'm closing connection.. */
    {
        switch (sig)                        /* Check signals */
        {
        case SIG_STOP:                      /* Stop or error command? */
        case SIG_ERR:
            newconnstate(STATE_IDLE);       /* Go idle */
            break;

        case SIG_TIMEOUT:                   /* Timeout on response? */
            txlen = make_scratchp(nfp, remaddr, 0, FLAG_STOP, 0, 0);
            break;                          /* Resend stop command */
        }
    }
    return(txlen);
}

/* Do application-specific tasks, given I/P and O/P buffers, and command string
** Return a connection signal value, 0 if no signal */
int do_apps(CBUFF *rxb, CBUFF *txb, int usersig)
{
    WORD len;
    BYTE lenb;
    int connsig=0;
    char cmd[CMDLEN+1];

    if (sigdebug && usersig && usersig>=USER_SIGS)
        printf("Signal %s ", signames[usersig]);
    connsig = usersig;                      /* Send signal to connection */
    if (connstate != STATE_CONNECTED)       /* If not connected.. */
        ;                                   /* Do nothing! */
    else if (appstate == APP_IDLE)          /* If application is idle.. */
    {
        if (usersig == SIG_USER_DIR)        /* User requested directory? */
        {                                   /* Send command */
            buff_in(txb, (BYTE *)CMD_DIR, sizeof(CMD_DIR));
        }
        else if (usersig == SIG_USER_GET)   /* User 'GET' command? */
        {
            filelen = 0;                    /* Open file */
            if ((fhandle = fopen(filename, "wb"))==0)
                printf("Can't open file\n");
            else
            {                               /* Send command & name to remote */
                buff_instr(txb, CMD_GET " ");
                buff_in(txb, (BYTE *)filename, (WORD)(strlen(filename)+1));
                newappstate(APP_FILE_RECEIVER); /* Become receiver */
            }
        }
        else if (usersig == SIG_USER_PUT)   /* User 'PUT' command? */
        {
            filelen = 0;                    /* Open file */
            if ((fhandle = fopen(filename, "rb"))==0)
                printf("Can't open file\n");
            else
            {                               /* Send command & name to remote */
                buff_instr(txb, CMD_PUT " ");
                buff_in(txb, (BYTE *)filename, (WORD)(strlen(filename)+1));
                newappstate(APP_FILE_SENDER);   /* Become sender */
            }
        }
        else if (usersig == SIG_USER_ECHO)  /* User equested echo? */
        {
            buff_in(txb, (BYTE *)CMD_ECHO, sizeof(CMD_ECHO));
            txoff = rxoff = 0;              /* Send echo command */
            newappstate(APP_ECHO_CLIENT);   /* Become echo client */
        }
        else if ((len=buff_strlen(rxb))>0 && len<=CMDLEN)
        {
            len++;                          /* Possible command string? */
            buff_out(rxb, (BYTE *)cmd, len);
            if (!strcmp(cmd, CMD_ECHO))     /* Echo command? */
                newappstate(APP_ECHO_SERVER);   /* Become echo server */
            else if (!strcmp(cmd, CMD_DIR)) /* DIR command? */
                do_dir(txb);                    /* Send DIR O/P to buffer */
            else if (!strncmp(cmd, CMD_GET, 3)) /* GET command? */
            {                                   /* Try to open file */
                filelen = 0;
                strcpy(filename, &cmd[4]);
                if ((fhandle = fopen(filename, "rb"))!=0)
                    newappstate(APP_FILE_SENDER);   /* If OK, become sender */
                else                            /* If not, respond with null */
                    buff_in(txb, (BYTE *)"\0", 1);
            }
            else if (!strncmp(cmd, CMD_PUT, 3)) /* PUT command? */
            {
                filelen = 0;
                strcpy(filename, &cmd[4]);      /* Try to open file */
                fhandle = fopen(filename, "wb");
                newappstate(APP_FILE_RECEIVER); /* Become receiver */
            }
        }
        else                                /* Default: show data from remote */
        {
            len = buff_out(rxb, apptemp, TESTLEN);
            apptemp[len] = 0;
            printf("%s", apptemp);
        }
    }
    else if (appstate == APP_ECHO_CLIENT)   /* If I'm an echo client.. */
    {
        if (usersig==SIG_USER_CLOSE)        /* User closing connection? */
            newappstate(APP_IDLE);
        else
        {                                   /* Generate echo data.. */
            if ((len = minw(buff_freelen(txb), TESTLEN)) > TESTLEN/2)
            {
                len = rand() % len;             /* ..random data length */
                buff_in(&txbuff, &testdata[txoff], len);
                txoff = (txoff + len) % TESTLEN;/* ..move & wrap data pointer */
            }
            if ((len = buff_out(rxb, apptemp, TESTLEN)) > 0)
            {                               /* Check response data */
                if (!memcmp(apptemp, &testdata[rxoff], len))
                {                               /* ..match with data buffer */
                    rxoff = (rxoff + len) % TESTLEN;/* ..move & wrap data ptr */
                    testlen += len;
                    printf("%lu bytes OK      \r", testlen);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级在线播放| 国产精品久久久久久久久免费丝袜| 91色婷婷久久久久合中文| 激情六月婷婷久久| 久久精品国产99国产| 免费的成人av| 亚洲丝袜另类动漫二区| 国产精品一二三区| 国产精品一区二区果冻传媒| 五月天中文字幕一区二区| 欧美大片一区二区三区| 国产在线视视频有精品| 国产精品乱人伦一区二区| 在线观看日韩一区| 日本欧美肥老太交大片| 国产午夜精品理论片a级大结局| 不卡电影一区二区三区| 亚洲第一成人在线| 精品久久久久久无| 一本到不卡免费一区二区| 青娱乐精品在线视频| 国产三级欧美三级日产三级99 | 色综合久久综合| 亚洲成av人片一区二区梦乃| 337p粉嫩大胆噜噜噜噜噜91av | 性做久久久久久免费观看 | 精品国产在天天线2019| 成人精品国产福利| 热久久免费视频| 国产午夜精品久久| 91精品国产一区二区三区蜜臀| 高潮精品一区videoshd| 亚洲综合在线观看视频| 久久新电视剧免费观看| 欧美日韩在线亚洲一区蜜芽| 国产精品一区二区久久精品爱涩 | 99国产精品视频免费观看| 午夜视频在线观看一区二区| 久久精品免视看| 在线电影一区二区三区| 99综合电影在线视频| 另类小说视频一区二区| 一级日本不卡的影视| 国产三级精品在线| 欧美一二三四区在线| 日本久久电影网| 国产suv一区二区三区88区| 日韩精品欧美成人高清一区二区| 中文字幕一区二区三区不卡在线 | 亚洲国产激情av| 日韩一区二区在线看片| 欧美系列一区二区| 不卡的av中国片| 国产精品1区2区3区| 免费精品99久久国产综合精品| 一区二区三区在线视频免费| 亚洲一区二区三区四区五区黄| 国产亚洲短视频| 精品成人免费观看| 国产精品一区二区久久不卡| 亚洲成av人片在线观看无码| 亚洲欧美另类在线| 国产欧美一区二区三区网站| 久久婷婷国产综合国色天香| 91精品国产一区二区三区| 欧美日韩成人综合天天影院| 91国偷自产一区二区开放时间| 99久久久久久| 99在线精品一区二区三区| 国产不卡视频在线播放| 国产99精品视频| 丁香五精品蜜臀久久久久99网站| 国产在线播精品第三| 国产真实精品久久二三区| 久久99国产乱子伦精品免费| 狠狠色2019综合网| 国产在线视频不卡二| 国产一区二区在线免费观看| 国产精品一区不卡| 国产福利一区二区三区视频在线| 国产一区二区0| 懂色av一区二区三区免费观看| 国产精品18久久久| 99视频精品全部免费在线| www.日韩精品| 在线免费视频一区二区| 欧美做爰猛烈大尺度电影无法无天| 91麻豆精东视频| 欧美日韩的一区二区| 欧美成人精精品一区二区频| 久久综合资源网| 一区在线播放视频| 亚洲成人在线观看视频| 麻豆精品视频在线观看| 国产成人午夜片在线观看高清观看| 国产精品一二三四| 色婷婷亚洲综合| 欧美精品日韩精品| 亚洲国产婷婷综合在线精品| 狠狠色丁香九九婷婷综合五月| 久久精品国产成人一区二区三区| 韩国视频一区二区| 成人av在线网站| 欧美日韩一区在线| 精品久久国产字幕高潮| 国产精品网站一区| 亚洲123区在线观看| 国产永久精品大片wwwapp| 91网站在线观看视频| 欧美一区二区三区色| 国产日韩精品一区| 亚洲一区视频在线观看视频| 蜜桃一区二区三区四区| 91在线你懂得| 欧美一区日韩一区| 久久综合久久99| 亚洲国产aⅴ天堂久久| 国产在线看一区| 欧美日韩在线综合| 亚洲一线二线三线视频| 国产曰批免费观看久久久| 欧洲一区二区三区免费视频| 久久夜色精品国产噜噜av| 亚洲精品ww久久久久久p站| 激情图片小说一区| 欧美色精品天天在线观看视频| 国产婷婷精品av在线| 石原莉奈一区二区三区在线观看| 国产成人精品www牛牛影视| 正在播放亚洲一区| 亚洲三级免费观看| 国产精品一区二区无线| 欧美精品 国产精品| 亚洲色图色小说| 国产精品一卡二| 日韩三级在线免费观看| 亚洲一区二区三区三| 成人h动漫精品一区二区| 精品日韩一区二区三区免费视频| 亚洲国产综合人成综合网站| 成人av集中营| 日本一区二区三区电影| 久久99国产精品免费| 精品视频一区 二区 三区| 国产精品的网站| 国产精品原创巨作av| 日韩三区在线观看| 日韩av电影免费观看高清完整版在线观看| 95精品视频在线| 欧美国产精品久久| 国产一区91精品张津瑜| 欧美mv和日韩mv的网站| 天涯成人国产亚洲精品一区av| 欧美中文字幕亚洲一区二区va在线 | 一区在线中文字幕| 国产aⅴ精品一区二区三区色成熟| 精品国偷自产国产一区| 看片的网站亚洲| 欧美一级日韩不卡播放免费| 丝袜国产日韩另类美女| 欧美日本乱大交xxxxx| 亚洲成av人影院| 7777女厕盗摄久久久| 日本美女视频一区二区| 日韩一区二区三区四区五区六区| 日韩精品1区2区3区| 欧美另类一区二区三区| 日韩电影一区二区三区四区| 91精品麻豆日日躁夜夜躁| 三级在线观看一区二区| 欧美成人r级一区二区三区| 久久99深爱久久99精品| 久久久99精品免费观看| 懂色中文一区二区在线播放| 国产精品欧美综合在线| 91麻豆蜜桃一区二区三区| 亚洲香蕉伊在人在线观| 宅男噜噜噜66一区二区66| 美女视频一区二区| 久久青草欧美一区二区三区| 东方欧美亚洲色图在线| 成人免费在线视频观看| 日本韩国精品在线| 视频一区在线视频| 欧美精品一区二区三区蜜桃视频| 国产一区二区三区四区在线观看| 欧美韩国日本不卡| 91美女片黄在线观看| 性做久久久久久| 久久综合国产精品| 99精品偷自拍| 亚洲成av人影院| 久久久久亚洲蜜桃| 在线观看日韩av先锋影音电影院| 午夜视频在线观看一区二区| 久久亚洲一级片| 在线视频中文字幕一区二区| 美女国产一区二区三区| 国产精品麻豆网站| 91精品国产综合久久久蜜臀粉嫩 |