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

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

?? tcpip.c

?? 單片機開發儀態網通訊用的用的TCP/IP程序包
?? C
?? 第 1 頁 / 共 4 頁
字號:
      break;
    case CLOSE_WAIT :
      if (!(TransmitControl & (SEND_FRAME2 | SEND_FRAME1)))     // buffers free?
        if (TCPSeqNr == TCPUNASeqNr)                            // all data ACKed?
        {
          TCPUNASeqNr++;                                        // count FIN as a byte
          PrepareTCP_FRAME(TCPSeqNr, TCPAckNr, TCP_CODE_FIN | TCP_CODE_ACK);  // we NEED a retry-timeout
          LastFrameSent = TCP_FIN_FRAME;                        // time to say goodbye...
          TCPStartRetryTimer();
          TCPStateMachine = LAST_ACK;
        }
      break;
  }

  if (TransmitControl & SEND_FRAME2)
  {
    RequestSend(TxFrame2Size);

    if (Rdy4Tx())                                // NOTE: when using a very fast MCU,
    {                                            // maybe the CS8900 isn't ready yet
      CopyToFrame8900((unsigned char *)TxFrame2Mem, TxFrame2Size);
    }
    else
    {
      TCPStateMachine = CLOSED;
      SocketStatus = SOCK_ERR_ETHERNET;          // indicate an error to user
      TCPFlags = 0;                              // clear all flags, stop timers etc.
    }

    TransmitControl &= ~SEND_FRAME2;             // clear tx-flag
  }

  if (TransmitControl & SEND_FRAME1)
  {
    PrepareTCP_DATA_FRAME();                     // build frame w/ actual SEQ, ACK....
    RequestSend(TxFrame1Size);
  
    if (Rdy4Tx())                                // CS8900 ready to accept our frame?
    {                                            // (see note above)
      CopyToFrame8900((unsigned char *)TxFrame1Mem, TxFrame1Size);
    }
    else
    {
      TCPStateMachine = CLOSED;
      SocketStatus = SOCK_ERR_ETHERNET;          // indicate an error to user
      TCPFlags = 0;                              // clear all flags, stop timers etc.
    }

    TransmitControl &= ~SEND_FRAME1;             // clear tx-flag
  }
}
//------------------------------------------------------------------------------
// easyWEB internal function
// handles an incoming broadcast frame
//------------------------------------------------------------------------------
static void ProcessEthBroadcastFrame(void)
{
  unsigned int TargetIP[2];

  // next two words MUST be read with High-Byte 1st (CS8900 AN181 Page 2)
  ReadHB1ST8900(RX_FRAME_PORT);                  // ignore RxStatus Word
  RecdFrameLength = ReadHB1ST8900(RX_FRAME_PORT);// get real length of frame 
    
  DummyReadFrame8900(6);                         // ignore DA (FF-FF-FF-FF-FF-FF)
  CopyFromFrame8900(&RecdFrameMAC, 6);           // store SA (for our answer)

  if (ReadFrameBE8900() == FRAME_ARP)            // get frame type, check for ARP
    if (ReadFrameBE8900() == HARDW_ETH10)        // Ethernet frame
      if (ReadFrameBE8900() == FRAME_IP)         // check protocol
        if (ReadFrameBE8900() == IP_HLEN_PLEN)   // check HLEN, PLEN
          if (ReadFrameBE8900() == OP_ARP_REQUEST)
          {
            DummyReadFrame8900(6);               // ignore sender's hardware address
            CopyFromFrame8900(&RecdFrameIP, 4);  // read sender's protocol address
            DummyReadFrame8900(6);               // ignore target's hardware address
            CopyFromFrame8900(&TargetIP, 4);     // read target's protocol address
            if ((MyIP[0] == TargetIP[0]) && (MyIP[1] == TargetIP[1]))  // is it for us?
              PrepareARP_ANSWER();               // yes->create ARP_ANSWER frame
          }
}
//------------------------------------------------------------------------------
// easyWEB internal function
// handles an incoming frame that passed CS8900's address filter
// (individual addressed = IA)
//------------------------------------------------------------------------------
static void ProcessEthIAFrame(void)
{
  unsigned int TargetIP[2];
  unsigned char ProtocolType;

  // next two words MUST be read with High-Byte 1st (CS8900 AN181 Page 2)
  ReadHB1ST8900(RX_FRAME_PORT);                  // ignore RxStatus Word
  RecdFrameLength = ReadHB1ST8900(RX_FRAME_PORT);// get real length of frame 
  
  DummyReadFrame8900(6);                         // ignore DA
  CopyFromFrame8900(&RecdFrameMAC, 6);           // store SA (for our answer)

  switch (ReadFrameBE8900())                     // get frame type
  {
    case FRAME_ARP :                             // check for ARP
      if ((TCPFlags & (TCP_ACTIVE_OPEN | IP_ADDR_RESOLVED)) == TCP_ACTIVE_OPEN)
        if (ReadFrameBE8900() == HARDW_ETH10)         // check for the right prot. etc.
          if (ReadFrameBE8900() == FRAME_IP)
            if (ReadFrameBE8900() == IP_HLEN_PLEN)
              if (ReadFrameBE8900() == OP_ARP_ANSWER)
              {
                TCPStopTimer();                       // OK, now we've the MAC we wanted ;-)
                CopyFromFrame8900(&RemoteMAC, 6);     // extract opponents MAC
                TCPFlags |= IP_ADDR_RESOLVED;
              }
      break;
    case FRAME_IP :                                        // check for IP-type
      if ((ReadFrameBE8900() & 0xff00 ) == IP_VER_IHL)     // IPv4, IHL=5 (20 Bytes Header)
      {                                                    // ignore Type Of Service
        RecdIPFrameLength = ReadFrameBE8900();             // get IP frame's length
        ReadFrameBE8900();                                 // ignore identification

        if (!(ReadFrameBE8900() & (IP_FLAG_MOREFRAG | IP_FRAGOFS_MASK)))  // only unfragm. frames
        {
          ProtocolType = ReadFrameBE8900();                // get protocol, ignore TTL
          ReadFrameBE8900();                               // ignore checksum
          RecdFrameIP[0] = ReadFrame8900();                // get source IP
          RecdFrameIP[1] = ReadFrame8900();
          TargetIP[0] = ReadFrame8900();                   // get destination IP
          TargetIP[1] = ReadFrame8900();

          if ((MyIP[0] == TargetIP[0]) && (MyIP[1] == TargetIP[1]))  // is it for us?
            switch (ProtocolType)
            {
              case PROT_ICMP :
                ProcessICMPFrame();
                break;
              case PROT_TCP :
                ProcessTCPFrame();
                break;
              case PROT_UDP :                              // not implemented!
                break;
            }
        }      
      break;
    }
  }
}
//------------------------------------------------------------------------------
// easyWEB internal function
// we've just rec'd an ICMP-frame (Internet Control Message Protocol)
// check what to do and branch to the appropriate sub-function
//------------------------------------------------------------------------------
static void ProcessICMPFrame(void)
{
  unsigned int ICMPTypeAndCode;

  ICMPTypeAndCode = ReadFrameBE8900();           // get Message Type and Code
  ReadFrameBE8900();                             // ignore ICMP checksum

  switch (ICMPTypeAndCode >> 8)                  // check type
  {
    case ICMP_ECHO :                             // is echo request?
      PrepareICMP_ECHO_REPLY();                  // echo as much as we can...
      break;
  }
}
//------------------------------------------------------------------------------
// easyWEB internal function
// we've just rec'd an TCP-frame (Transmission Control Protocol)
// this function mainly implements the TCP state machine according to RFC793
//------------------------------------------------------------------------------
static void ProcessTCPFrame(void)
{
  unsigned int TCPSegSourcePort;                 // segment's source port
  unsigned int TCPSegDestPort;                   // segment's destination port
  unsigned long TCPSegSeq;                       // segment's sequence number
  unsigned long TCPSegAck;                       // segment's acknowledge number
  unsigned int TCPCode;                          // TCP code and header length
  unsigned char TCPHeaderSize;                   // real TCP header length
  unsigned int NrOfDataBytes;                    // real number of data
    
  TCPSegSourcePort = ReadFrameBE8900();                    // get ports
  TCPSegDestPort = ReadFrameBE8900();

  if (TCPSegDestPort != TCPLocalPort) return;              // drop segment if port doesn't match

  TCPSegSeq = (unsigned long)ReadFrameBE8900() << 16;      // get segment sequence nr.
  TCPSegSeq |= ReadFrameBE8900();

  TCPSegAck = (unsigned long)ReadFrameBE8900() << 16;      // get segment acknowledge nr.
  TCPSegAck |= ReadFrameBE8900();

  TCPCode = ReadFrameBE8900();                             // get control bits, header length...

  TCPHeaderSize = (TCPCode & DATA_OFS_MASK) >> 10;         // header length in bytes
  NrOfDataBytes = RecdIPFrameLength - IP_HEADER_SIZE - TCPHeaderSize;     // seg. text length

  if (NrOfDataBytes > MAX_TCP_RX_DATA_SIZE) return;        // drop, packet too large for us :'(

  if (TCPHeaderSize > TCP_HEADER_SIZE)                     // ignore options if any
    DummyReadFrame8900(TCPHeaderSize - TCP_HEADER_SIZE);

  switch (TCPStateMachine)                                 // implement the TCP state machine
  {                                                        // RFC793
    case CLOSED :
      if (!(TCPCode & TCP_CODE_RST))
      {
        TCPRemotePort = TCPSegSourcePort;                  // get remote TCP port
        
        RemoteMAC[0] = RecdFrameMAC[0];                    // save opponents MAC and IP
        RemoteMAC[1] = RecdFrameMAC[1];                    // for later use
        RemoteMAC[2] = RecdFrameMAC[2];
        RemoteIP[0] = RecdFrameIP[0];
        RemoteIP[1] = RecdFrameIP[1];
        
        if (TCPCode & TCP_CODE_ACK)                        // make the reset sequence
        {                                                  // acceptable to the other
          PrepareTCP_FRAME(TCPSegAck, 0, TCP_CODE_RST);    // TCP
        }
        else
        {
          TCPAckNr = TCPSegSeq + NrOfDataBytes;
          if (TCPCode & (TCP_CODE_SYN | TCP_CODE_FIN)) TCPAckNr++;
          PrepareTCP_FRAME(0, TCPAckNr, TCP_CODE_RST | TCP_CODE_ACK);
        }
      }
      break;
    case LISTENING :
      if (!(TCPCode & TCP_CODE_RST))                       // ignore segment containing RST
      {
        TCPRemotePort = TCPSegSourcePort;                  // get remote TCP port

        RemoteMAC[0] = RecdFrameMAC[0];                    // save opponents MAC and IP
        RemoteMAC[1] = RecdFrameMAC[1];                    // for later use
        RemoteMAC[2] = RecdFrameMAC[2];
        RemoteIP[0] = RecdFrameIP[0];
        RemoteIP[1] = RecdFrameIP[1];

        if (TCPCode & TCP_CODE_ACK)                        // reset a bad
        {                                                  // acknowledgement
          PrepareTCP_FRAME(TCPSegAck, 0, TCP_CODE_RST);
        }
        else if (TCPCode & TCP_CODE_SYN)
        {
          // initialize global connection variables
          TCPAckNr = TCPSegSeq + 1;                           // get remote ISN, next byte we expect
          TCPSeqNr = ((unsigned long)ISNGenHigh << 16) | TAR; // set local ISN
          TCPUNASeqNr = TCPSeqNr + 1;                         // one byte out -> increase by one
          PrepareTCP_FRAME(TCPSeqNr, TCPAckNr, TCP_CODE_SYN | TCP_CODE_ACK); // acknowledge connection request
          LastFrameSent = TCP_SYN_ACK_FRAME;
          TCPStartRetryTimer();
          TCPStateMachine = SYN_RECD;
        }
      }
      break;
    case SYN_SENT :
      // drop segment if its IP doesn't belong to current session
      if ((RemoteIP[0] != RecdFrameIP[0]) || (RemoteIP[1] != RecdFrameIP[1]))
        break;      

      // drop segment if port doesn't match
      if (TCPSegSourcePort != TCPRemotePort)
        break;   
      
      if (TCPCode & TCP_CODE_ACK)                // ACK field significant?
        if (TCPSegAck != TCPUNASeqNr)            // is our ISN ACKed?
        {
          if (!(TCPCode & TCP_CODE_RST))
          {
            PrepareTCP_FRAME(TCPSegAck, 0, TCP_CODE_RST);
          }
          break;                                 // drop segment
        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久99久久久精品齐齐| 成人av资源在线| 一区二区三区成人| 亚洲欧洲精品成人久久奇米网| 久久久久亚洲综合| 久久久91精品国产一区二区三区| 久久久久久久免费视频了| 久久久99久久| 最新国产精品久久精品| 亚洲欧美激情插| 亚洲国产精品一区二区久久| 亚洲国产毛片aaaaa无费看| 亚洲午夜在线视频| 免费观看在线综合色| 久久er99热精品一区二区| 韩国午夜理伦三级不卡影院| 国产伦精品一区二区三区免费| 懂色一区二区三区免费观看| 91在线观看下载| 欧美人与z0zoxxxx视频| 精品国产一二三区| 亚洲欧洲精品一区二区三区| 亚洲国产成人av网| 国产在线精品一区二区不卡了| 成人av网站在线观看| 色婷婷激情一区二区三区| 欧美疯狂性受xxxxx喷水图片| 久久综合九色综合97婷婷 | 亚洲风情在线资源站| 日韩不卡在线观看日韩不卡视频| 国产毛片精品一区| 欧美视频一区二区三区在线观看| 日韩欧美一级片| 亚洲人成在线播放网站岛国 | 久久久.com| 伊人婷婷欧美激情| 狠狠色丁香久久婷婷综| 欧美综合欧美视频| 久久精品视频一区| 日韩黄色免费网站| 成人黄色在线视频| 精品国产一区二区三区久久久蜜月 | www.欧美日韩国产在线| 欧美精品乱人伦久久久久久| 国产拍揄自揄精品视频麻豆| 亚洲国产日日夜夜| 91丨九色丨国产丨porny| 欧美mv和日韩mv国产网站| 亚洲一区二区三区四区五区黄 | 欧美亚洲一区三区| 中文字幕欧美区| 精品一区二区久久久| 91黄色免费网站| 国产精品美女久久久久aⅴ| 免费人成精品欧美精品 | 欧美大胆一级视频| 亚洲成人黄色影院| 色欧美日韩亚洲| 国产精品三级在线观看| 国产二区国产一区在线观看| 日韩美女视频在线| 视频一区二区三区在线| 91传媒视频在线播放| 国产精品三级av| 成人一区二区三区| 久久精品无码一区二区三区| 久久99久久99精品免视看婷婷| 91精品国产欧美日韩| 婷婷中文字幕综合| 欧美精品xxxxbbbb| 亚洲成av人**亚洲成av**| 欧美在线视频你懂得| 亚洲一线二线三线视频| 99久久99久久综合| 亚洲精品精品亚洲| 欧美日韩一卡二卡三卡| 亚洲成人动漫在线免费观看| 777xxx欧美| 日韩电影一区二区三区| 欧美一区二区三区日韩视频| 日本 国产 欧美色综合| 欧美一区二区三区成人| 久久国产精品色| 久久久久久久免费视频了| 高清beeg欧美| 一区二区视频在线| 欧美丰满嫩嫩电影| 久久精品久久99精品久久| 久久综合久久鬼色| 99视频一区二区三区| 亚洲自拍偷拍麻豆| 欧美精品在线观看播放| 黑人精品欧美一区二区蜜桃| 久久蜜桃av一区二区天堂 | 精品国产乱码久久久久久久 | 日韩av在线免费观看不卡| 精品国产一区二区在线观看| 高清av一区二区| 亚洲国产另类精品专区| 欧美电视剧免费观看| 成人ar影院免费观看视频| 亚洲影院久久精品| 久久久久久久久久久久久夜| 99视频热这里只有精品免费| 午夜国产不卡在线观看视频| 久久蜜桃av一区精品变态类天堂| 91一区二区三区在线播放| 日本大胆欧美人术艺术动态| 久久精品欧美一区二区三区麻豆| 日本精品一级二级| 精品一区二区三区在线视频| 亚洲色图.com| 2020国产精品久久精品美国| 色94色欧美sute亚洲线路一久| 免费精品视频最新在线| 亚洲人快播电影网| 久久日韩粉嫩一区二区三区 | 免播放器亚洲一区| 国产精品久久久久aaaa| 日韩一区二区电影在线| 成人h精品动漫一区二区三区| 天堂在线一区二区| 1024成人网色www| 精品噜噜噜噜久久久久久久久试看| 91丨porny丨在线| 国产在线精品一区在线观看麻豆| 亚洲一区国产视频| 国产午夜精品一区二区三区视频 | 国产精品免费视频观看| 91麻豆精品国产91久久久久久| 成人蜜臀av电影| 国产精品白丝av| 麻豆精品国产91久久久久久 | 日韩天堂在线观看| 91久久香蕉国产日韩欧美9色| 成人免费av资源| 国产综合色视频| 久久99久久久久| 免费精品视频在线| 日本少妇一区二区| 日精品一区二区| 日韩精品福利网| 三级欧美在线一区| 日本亚洲一区二区| 亚洲一区二区精品视频| 亚洲综合色噜噜狠狠| 一区二区三区在线视频免费观看| 国产精品女同互慰在线看| 久久新电视剧免费观看| 久久影院视频免费| 久久嫩草精品久久久精品一| 精品精品欲导航| 欧美tickling挠脚心丨vk| 欧美一区二区久久久| 欧美sm美女调教| 久久久久久综合| 日本一区二区视频在线观看| 亚洲国产电影在线观看| 国产精品女人毛片| 一区二区三区自拍| 亚洲国产精品久久久久秋霞影院| 婷婷综合另类小说色区| 麻豆成人久久精品二区三区红 | 精品亚洲国内自在自线福利| 免费成人在线观看视频| 久久99精品一区二区三区| 国产美女一区二区三区| 成人福利在线看| 欧美性受极品xxxx喷水| 欧美日本乱大交xxxxx| 精品少妇一区二区三区免费观看| 欧美不卡一区二区三区四区| 日本一区二区视频在线| 亚洲精品午夜久久久| 蜜桃视频在线一区| 粉嫩绯色av一区二区在线观看| 成人精品视频网站| 欧美三级日韩三级| 久久先锋影音av鲁色资源网| 1024成人网色www| 日本不卡一区二区| 岛国精品一区二区| 欧美日韩视频在线观看一区二区三区| 69堂成人精品免费视频| 国产清纯美女被跳蛋高潮一区二区久久w | 加勒比av一区二区| 91欧美一区二区| 69成人精品免费视频| 国产视频一区不卡| 日一区二区三区| 成人久久久精品乱码一区二区三区| 欧美色图第一页| 国产日韩精品一区| 日本不卡视频在线| 91老师片黄在线观看| 26uuu久久天堂性欧美| 亚洲精品亚洲人成人网在线播放| 激情综合色播五月| 91精品国产全国免费观看| 国产精品第四页|