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

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

?? tcp_ip.c

?? Analog公司的ADSP_BF532上面實(shí)現(xiàn)以太網(wǎng)接口的源碼
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
                    TCP_StateMachine = CLOSED;
                    TCP_Flags = 0;
                    TCP_SocketStatus = TCP_SOCK_ERR_CONN_RESET;
                }
                // drop segment
                break;
            }

            // SYN??
            if (TCPCode & TCP_CODE_SYN)
            {
                // get remote's ISN
                TCP_Ack_Nr = TCPSegSeq;

                // and increment by one...
                TCP_Ack_Nr++;

                if (TCPCode & TCP_CODE_ACK)
                {
                    // stop retransmission, other TCP got our SYN
                    TCP_StopTimer();

                    // advance our sequence number
                    TCP_Seq_Nr = TCP_UNA_Seq_Nr;

                    // ACK this ISN
                    TCP_Prep_TCP_FRAME(TCP_CODE_ACK);

                    // user may send data now :-)
                    TCP_StateMachine = ESTABLISHED;
                    TCP_SocketStatus |= TCP_SOCK_CONNECTED;
                    TCP_SocketStatus |= TCP_SOCK_TX_BUF_RELEASED;
                }
                else
                {
                    // our SYN isn't ACKed yet, now continue with sending
                    // SYN_ACK frames
                    TCP_StopTimer();
                    TCP_Prep_TCP_FRAME(TCP_CODE_SYN | TCP_CODE_ACK);
                    TCP_LastFrameSent = TCP_SYN_ACK_FRAME;
                    TCP_StartRetryTimer();
                    TCP_StateMachine = SYN_RECD;
                }
            }
            break;
        }

        default :
        {
            // drop segment if IP doesn't belong to current session
            if (memcmp(&TCP_RemoteIP, &TCP_Recd_Frame_IP, 4)) break;

            // drop segment if port doesn't match
            if (TCPSegSourcePort != TCP_RemotePort) break;

            // drop if it's not the segment we expect
            if (TCPSegSeq != TCP_Ack_Nr) break;

            // RST??
            if (TCPCode & TCP_CODE_RST)
            {
                // close the state machine
                // reset all flags, stop retransmission
                // indicate an error to user
                TCP_StateMachine = CLOSED;
                TCP_Flags = 0;
                TCP_SocketStatus = TCP_SOCK_ERR_CONN_RESET;
                break;
            }

            // SYN??
            if (TCPCode & TCP_CODE_SYN)
            {
                // is NOT allowed here! send a reset,
                TCP_Prep_TCP_FRAME(TCP_CODE_RST);

                // close connection...
                // reset all flags, stop retransmission...
                // fatal error!
                // ...and drop the frame
                TCP_StateMachine = CLOSED;
                TCP_Flags = 0;
                TCP_SocketStatus = TCP_SOCK_ERR_REMOTE;
                break;
            }

            // drop segment if the ACK bit is off
            if (!(TCPCode & TCP_CODE_ACK)) break;

            // is our last data sent ACKed?
            if (TCPSegAck == TCP_UNA_Seq_Nr)
            {
                // stop retransmission
                TCP_StopTimer();

                // advance our sequence number
                TCP_Seq_Nr = TCP_UNA_Seq_Nr;

                // change state if necessary
                switch (TCP_StateMachine)
                {
                    // ACK of our SYN?
                    case SYN_RECD :
                    {
                        // user may send data now
                        TCP_StateMachine = ESTABLISHED;
                        TCP_SocketStatus |= TCP_SOCK_CONNECTED;
                        break;
                    }

                    // ACK of our FIN?
                    case FIN_WAIT_1 :
                    {
                        TCP_StateMachine = FIN_WAIT_2;
                        break;
                    }

                    // ACK of our FIN?
                    case CLOSING :
                    {
                        TCP_StateMachine = TIME_WAIT;
                        break;
                    }

                    // ACK of our FIN?
                    case LAST_ACK :
                    {
                        // reset all flags, stop retransmission...
                        // clear all flags but data available
                        TCP_StateMachine = CLOSED;
                        TCP_Flags = 0;
                        TCP_SocketStatus &= TCP_SOCK_DATA_AVAILABLE;
                        break;
                    }

                    case TIME_WAIT :
                    {
                        // ACK a retransmission of remote FIN
                        // restart TIME_WAIT timeout
                        TCP_Prep_TCP_FRAME(TCP_CODE_ACK);
                        TCP_RestartTimer();
                        break;
                    }
                }

                // if true, give the frame buffer back to user
                if (TCP_StateMachine == ESTABLISHED)
                    TCP_SocketStatus |= TCP_SOCK_TX_BUF_RELEASED;
            }

            if ((TCP_StateMachine == ESTABLISHED) || (TCP_StateMachine == FIN_WAIT_1) || (TCP_StateMachine == FIN_WAIT_2))
                // data available?
                if (NrOfDataBytes)
                    // rx data-buffer empty?
                    if (!(TCP_SocketStatus & TCP_SOCK_DATA_AVAILABLE))
                    {
                        // ignore window, checksum, urgent pointer
                        data +=3;
                        // fetch data and tell the user
                        // indicate the new data to user
                        memcpy(&TCP_RxTCPBuffer, data, NrOfDataBytes);
                        TCP_Rx_Data_Count = NrOfDataBytes;

                        TCP_SocketStatus |= TCP_SOCK_DATA_AVAILABLE;
                        TCP_Ack_Nr += NrOfDataBytes;

                        // ACK rec'd data
                        TCP_Prep_TCP_FRAME(TCP_CODE_ACK);
                    }

            // FIN??
            if (TCPCode & TCP_CODE_FIN)
            {
                switch (TCP_StateMachine)
                {
                    case SYN_RECD :
                    case ESTABLISHED :
                    {
                        TCP_StateMachine = CLOSE_WAIT;
                        break;
                    }

                    // if our FIN was ACKed, we automatically
                    // enter FIN_WAIT_2 (look above) and therefore
                    // TIME_WAIT
                    case FIN_WAIT_1 :
                    {
                        TCP_StateMachine = CLOSING;
                        TCP_SocketStatus &= ~TCP_SOCK_CONNECTED;
                        break;
                    }

                    case FIN_WAIT_2 :
                    {
                        TCP_StartTimeWaitTimer();
                        TCP_StateMachine = TIME_WAIT;
                        TCP_SocketStatus &= ~TCP_SOCK_CONNECTED;
                        break;
                    }

                    case TIME_WAIT :
                    {
                        TCP_RestartTimer();
                        break;
                    }
                }
                // ACK remote's FIN flag
                TCP_Ack_Nr++;
                TCP_Prep_TCP_FRAME(TCP_CODE_ACK);
            }
        }
    }
}


/******************************************************************************
 * TCP_IP_STACK: TCP_Prep_ARP_REQUEST()
 *
 * Purpose:
 *  prepares the TxFrame2-buffer to send an ARP-request
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_Prep_ARP_REQUEST(void)
{
    // Ethernet
    // we don't know opposites MAC!
    memset(&TCP_TxFrame2[ETH_DA_OFS], 0xFF, 6);
    memcpy(&TCP_TxFrame2[ETH_SA_OFS], &TCP_MyMAC, 6);
    *(WORD*)&TCP_TxFrame2[ETH_TYPE_OFS] = FRAME_ARP;

    // ARP
    *(WORD *)&TCP_TxFrame2[ARP_HARDW_OFS] = HARDW_ETH10;
    *(WORD *)&TCP_TxFrame2[ARP_PROT_OFS] = FRAME_IP;
    *(WORD *)&TCP_TxFrame2[ARP_HLEN_PLEN_OFS] = IP_HLEN_PLEN;
    *(WORD *)&TCP_TxFrame2[ARP_OPCODE_OFS] = OP_ARP_REQUEST;
    memcpy( &TCP_TxFrame2[ARP_SENDER_HA_OFS], &TCP_MyMAC, 6);
    memcpy( &TCP_TxFrame2[ARP_SENDER_IP_OFS], &TCP_Local_IP, 4);

    // we don't know remote's MAC!
    memset( &TCP_TxFrame2[ARP_TARGET_HA_OFS], 0x00, 6);

    if (((TCP_RemoteIP[0] ^ TCP_Local_IP[0]) & TCP_SubnetMask[0]) || ((TCP_RemoteIP[1] ^ TCP_Local_IP[1]) & TCP_SubnetMask[1]))
        // IP not in subnet, use gateway
        memcpy(&TCP_TxFrame2[ARP_TARGET_IP_OFS], &TCP_GatewayIP, 4);
    else
        // other IP is next to us...
        memcpy(&TCP_TxFrame2[ARP_TARGET_IP_OFS], &TCP_RemoteIP, 4);

    TCP_TxFrame2Size = ETH_HEADER_SIZE + ARP_FRAME_SIZE;
    TCP_TransmitControl |= TCP_SEND_FRAME2;
}


/******************************************************************************
 * TCP_IP_STACK: TCP_Prep_ARP_ANSWER()
 *
 * Purpose:
 *  prepares the TxFrame2-buffer to send an ARP-answer (reply)
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_Prep_ARP_ANSWER(void)
{
    // Ethernet
    memcpy( &TCP_TxFrame2[ETH_DA_OFS], &TCP_Recd_Frame_MAC, 6);
    memcpy( &TCP_TxFrame2[ETH_SA_OFS], &TCP_MyMAC, 6);
    *(WORD*)&TCP_TxFrame2[ETH_TYPE_OFS] = FRAME_ARP;

    // ARP
    *(WORD*)&TCP_TxFrame2[ARP_HARDW_OFS] = HARDW_ETH10;
    *(WORD*)&TCP_TxFrame2[ARP_PROT_OFS] = FRAME_IP;
    *(WORD*)&TCP_TxFrame2[ARP_HLEN_PLEN_OFS] = IP_HLEN_PLEN;
    *(WORD*)&TCP_TxFrame2[ARP_OPCODE_OFS] = OP_ARP_ANSWER;
    memcpy( &TCP_TxFrame2[ARP_SENDER_HA_OFS], &TCP_MyMAC, 6);
    memcpy( &TCP_TxFrame2[ARP_SENDER_IP_OFS], &TCP_Local_IP, 4);
    memcpy( &TCP_TxFrame2[ARP_TARGET_HA_OFS], &TCP_Recd_Frame_MAC, 6);
    memcpy( &TCP_TxFrame2[ARP_TARGET_IP_OFS], &TCP_Recd_Frame_IP, 4);

    TCP_TxFrame2Size = ETH_HEADER_SIZE + ARP_FRAME_SIZE;
    TCP_TransmitControl |= TCP_SEND_FRAME2;
}


/******************************************************************************
 * TCP_IP_STACK: TCP_Prep_ICMP_ECHO_REPLY()
 *
 * Purpose:
 *  prepares the TxFrame2-buffer to send an ICMP-echo-reply
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_Prep_ICMP_ECHO_REPLY(void)
{
    WORD ICMPDataCount;
    BYTE *bicmp = (BYTE*) LAN_rx_packet.data;
    bicmp += ICMP_DATA_OFS;


    // don't overload TX-buffer
    if (TCP_Recd_IP_Frame_Length > MAX_ETH_TX_SIZE)
        ICMPDataCount = MAX_ETH_TX_SIZE - IP_HEADER_SIZE - ICMP_HEADER_SIZE;
    else
        ICMPDataCount = TCP_Recd_IP_Frame_Length - IP_HEADER_SIZE - ICMP_HEADER_SIZE;

    // Ethernet
    memcpy( &TCP_TxFrame2[ETH_DA_OFS], &TCP_Recd_Frame_MAC, 6);
    memcpy( &TCP_TxFrame2[ETH_SA_OFS], &TCP_MyMAC, 6);
    *(WORD*)&TCP_TxFrame2[ETH_TYPE_OFS] = FRAME_IP;

    // IP
    *(WORD*)&TCP_TxFrame2[IP_VER_IHL_TOS_OFS] = swap_bytes(IP_VER_IHL);
    *(WORD*)&TCP_TxFrame2[IP_TOTAL_LENGTH_OFS] = swap_bytes(IP_HEADER_SIZE + ICMP_HEADER_SIZE + ICMPDataCount);

    *(WORD*)&TCP_TxFrame2[IP_IDENT_OFS] = 0;
    *(WORD*)&TCP_TxFrame2[IP_FLAGS_FRAG_OFS] = 0;
    *(WORD*)&TCP_TxFrame2[IP_TTL_PROT_OFS] = swap_bytes((DEFAULT_TTL << 8) | PROT_ICMP);
    *(WORD*)&TCP_TxFrame2[IP_HEAD_CHKSUM_OFS] = 0;
    memcpy( &TCP_TxFrame2[IP_SOURCE_OFS], &TCP_Local_IP, 4);
    memcpy( &TCP_TxFrame2[IP_DESTINATION_OFS], &TCP_Recd_Frame_IP, 4);
    *(WORD*)&TCP_TxFrame2[IP_HEAD_CHKSUM_OFS] = TCP_CalcChecksum(&TCP_TxFrame2[IP_VER_IHL_TOS_OFS], IP_HEADER_SIZE, 0);

    // ICMP
    *(WORD*)&TCP_TxFrame2[ICMP_TYPE_CODE_OFS] = swap_bytes(ICMP_ECHO_REPLY << 8);

    // initialize checksum field
    *(WORD*)&TCP_TxFrame2[ICMP_CHKSUM_OFS] = 0;

    // get data to echo...
    memcpy( &TCP_TxFrame2[ICMP_DATA_OFS], bicmp, ICMPDataCount);

    // compute checksum
    *(WORD*)&TCP_TxFrame2[ICMP_CHKSUM_OFS] = TCP_CalcChecksum(&TCP_TxFrame2[IP_DATA_OFS], ICMPDataCount + ICMP_HEADER_SIZE, 0);

    TCP_TxFrame2Size = ETH_HEADER_SIZE + IP_HEADER_SIZE + ICMP_HEADER_SIZE + ICMPDataCount;
    TCP_TransmitControl |= TCP_SEND_FRAME2;

}


/******************************************************************************
 * TCP_IP_STACK: TCP_Prep_TCP_FRAME()
 *
 * Purpose:
 *  prepares the TxFrame2-buffer to send a general TCP frame
 *  the TCPCode-field is passed as an argument
 *
 * Actions:
 *
 *****************************************************************************/
MC void TCP_Prep_TCP_FRAME(WORD TCPCode)
{
    // Ethernet
    memcpy( &TCP_TxFrame2[ETH_DA_OFS], &TCP_RemoteMAC, 6);
    memcpy( &TCP_TxFrame2[ETH_SA_OFS], &TCP_MyMAC, 6);
    *(WORD*)&TCP_TxFrame2[ETH_TYPE_OFS] = FRAME_IP;

    // IP
    *(WORD*)&TCP_TxFrame2[IP_VER_IHL_TOS_OFS] = swap_bytes(IP_VER_IHL | IP_TOS_D);

    // if SYN, we want to use the MSS option
    if (TCPCode & TCP_CODE_SYN)
        *(WORD*)&TCP_TxFrame2[IP_TOTAL_LENGTH_OFS] = swap_bytes(IP_HEADER_SIZE + TCP_HEADER_SIZE + TCP_OPT_MSS_SIZE);
    else
        *(WORD*)&TCP_TxFrame2[IP_TOTAL_LENGTH_OFS] = swap_bytes(IP_HEADER_SIZE + TCP_HEADER_SIZE);

    *(WORD*)&TCP_TxFrame2[IP_IDENT_OFS] = 0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久综合精品| 国产精品久久午夜| 波波电影院一区二区三区| 婷婷中文字幕一区三区| 国产精品污www在线观看| 欧美日韩一区久久| 99精品视频一区| 国产精品一二三区| 日韩vs国产vs欧美| 亚洲精品视频免费观看| 国产欧美日韩三级| 欧美mv日韩mv国产网站| 欧美主播一区二区三区美女| 成人午夜免费视频| 久久99久久久久| 日韩和欧美一区二区| 亚洲精品免费播放| 国产精品久久久久婷婷二区次| 欧美一区二区不卡视频| 欧美午夜一区二区三区 | 国产电影一区二区三区| 日韩精品电影在线观看| 亚洲一区免费视频| 亚洲视频一区二区免费在线观看| 国产清纯美女被跳蛋高潮一区二区久久w| 91精品久久久久久久99蜜桃 | 国内久久精品视频| 蜜臀av一区二区三区| 婷婷综合久久一区二区三区| 亚洲小少妇裸体bbw| 一区二区三区中文免费| 亚洲图片欧美激情| 国产精品短视频| 国产精品久久久99| 成人欧美一区二区三区视频网页| 国产日韩欧美综合一区| 国产日韩欧美激情| 欧美激情一二三区| 欧美国产日产图区| 国产精品国产三级国产普通话蜜臀| 久久亚洲影视婷婷| 久久九九久久九九| 中文字幕不卡的av| 亚洲欧美中日韩| 亚洲美女在线国产| 亚洲一级不卡视频| 成人av中文字幕| 懂色av一区二区夜夜嗨| 成人黄色软件下载| 色综合天天综合网天天狠天天| 99在线视频精品| 在线免费观看不卡av| 欧美日韩国产一区二区三区地区| 欧美日韩国产另类一区| 欧美一区二区高清| 国产亚洲综合在线| 中文字幕亚洲不卡| 亚洲福利一区二区| 六月丁香婷婷久久| 成人一道本在线| 色视频成人在线观看免| 777久久久精品| 国产色爱av资源综合区| 中文字幕在线一区免费| 亚洲第一久久影院| 国内精品视频666| a美女胸又www黄视频久久| 欧美在线观看一区二区| 欧美一级午夜免费电影| 国产精品色婷婷| 亚洲成人免费在线观看| 国产中文字幕精品| 色婷婷综合久久久中文字幕| 5858s免费视频成人| 国产亚洲精品7777| 夜夜夜精品看看| 国产在线视视频有精品| 91啪亚洲精品| 日韩一区二区视频| 国产精品久久久久一区二区三区| 亚洲va在线va天堂| 国产成人精品影视| 在线成人午夜影院| 国产精品久久久久天堂| 日本成人中文字幕在线视频| 成人h动漫精品一区二| 91精品久久久久久久99蜜桃| 欧美激情综合网| 日韩精品一卡二卡三卡四卡无卡| 国产成人在线影院| 51久久夜色精品国产麻豆| 国产三级精品视频| 日日夜夜一区二区| 色一情一乱一乱一91av| 久久一日本道色综合| 一卡二卡三卡日韩欧美| 国产 日韩 欧美大片| 91精品在线免费| 亚洲三级小视频| 国产酒店精品激情| 欧美一区二区视频在线观看| 日韩理论片网站| 国产精品99久久久| 日韩欧美国产wwwww| 极品少妇xxxx精品少妇| 欧美另类高清zo欧美| 最新不卡av在线| 国产.欧美.日韩| 精品剧情v国产在线观看在线| 樱桃国产成人精品视频| 国产999精品久久久久久| 日韩欧美国产三级| 天天色图综合网| 欧美亚州韩日在线看免费版国语版| 中文幕一区二区三区久久蜜桃| 激情综合一区二区三区| 日韩一区二区三区电影在线观看| 一区二区三区日韩欧美精品| 不卡一区中文字幕| 国产日韩欧美在线一区| 国内精品伊人久久久久影院对白| 欧美一区二区三区电影| 婷婷丁香久久五月婷婷| 欧美丝袜第三区| 亚洲午夜私人影院| 欧美无砖砖区免费| 亚洲午夜电影在线| 欧美日韩视频一区二区| 夜夜嗨av一区二区三区中文字幕| av电影天堂一区二区在线观看| 国产精品无遮挡| 本田岬高潮一区二区三区| 国产日韩欧美一区二区三区乱码| 国产精品一区二区三区99| 久久午夜免费电影| 国产成人av一区二区三区在线观看| 久久久久久久久久久电影| 国产精品综合在线视频| 久久久久久久电影| 成人91在线观看| 亚洲品质自拍视频网站| 一本久久a久久精品亚洲| 亚洲精品视频在线观看网站| 色综合天天在线| 亚洲一区免费视频| 91精品国产综合久久国产大片| 青青草视频一区| 久久综合九色综合欧美就去吻| 国产麻豆精品95视频| 中文成人av在线| 色婷婷精品久久二区二区蜜臂av| 一区二区三区日韩精品| 欧美日韩精品一区二区在线播放| 婷婷久久综合九色综合伊人色| 在线播放中文一区| 韩国三级中文字幕hd久久精品| 国产欧美一区二区三区在线看蜜臀 | 欧美日本一道本| 蜜臀精品久久久久久蜜臀 | 日韩欧美三级在线| 国产伦精一区二区三区| 国产亚洲成年网址在线观看| 白白色亚洲国产精品| 亚洲已满18点击进入久久| 在线播放日韩导航| 国产精品1区二区.| 亚洲美女屁股眼交3| 在线综合视频播放| 成人午夜电影久久影院| 亚洲国产精品久久久久秋霞影院| 欧美一区二区久久| 成人黄色综合网站| 日韩国产欧美在线视频| 国产欧美一区视频| 欧美亚男人的天堂| 国产酒店精品激情| 亚洲午夜久久久久中文字幕久| 欧美电视剧免费全集观看| 成人av免费网站| 欧美a一区二区| 亚洲男人天堂av网| 欧美成人一级视频| 91色在线porny| 国内久久婷婷综合| 亚洲最新视频在线播放| 久久久蜜臀国产一区二区| 欧美午夜免费电影| 成人中文字幕合集| 视频精品一区二区| 中文字幕一区二区三区在线观看| 欧美日韩精品一区二区三区四区| 国产传媒一区在线| 日韩vs国产vs欧美| 伊人性伊人情综合网| 精品免费日韩av| 欧美中文一区二区三区| 懂色av一区二区三区蜜臀| 三级久久三级久久| 亚洲日本免费电影| 国产午夜精品在线观看|