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

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

?? uip.c

?? IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR IAR
?? C
?? 第 1 頁 / 共 5 頁
字號:
    conn = 0;
    for(c = 0; c < UIP_UDP_CONNS; ++c) {
                      if(uip_udp_conns[c].lport == 0) {
                                      conn = &uip_udp_conns[c];
                                      break;
                      }
    }
    if(conn == 0) {
              return 0;
    }

   conn->lport = HTONS(lastport);
   conn->rport = HTONS(rport);
   conn->ripaddr[0] = ripaddr[0];
   conn->ripaddr[1] = ripaddr[1];

    return conn;
}
#endif /* UIP_UDP */
/*-----------------------------------------------------------------------------------*/
void uip_unlisten(u16_t port)
{
  for(c = 0; c < UIP_LISTENPORTS; ++c) {
                if(uip_listenports[c] == port) {
                                uip_listenports[c] = 0;
                                return;
                }
  }
}
/*-----------------------------------------------------------------------------------*/
void uip_listen(u16_t port)
{
  for(c = 0; c < UIP_LISTENPORTS; ++c) {
                    if(uip_listenports[c] == 0) {
                                  uip_listenports[c] = port;
                                  return;
                     }
  }
}
/*-----------------------------------------------------------------------------------*/
/* XXX: IP fragment reassembly: not well-tested. */
#if UIP_REASSEMBLY
  #define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN)
  static u8_t uip_reassbuf[UIP_REASS_BUFSIZE];
  static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)];
  static const u8_t bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f,0x0f, 0x07, 0x03, 0x01};
  static u16_t uip_reasslen;
  static u8_t uip_reassflags;
  #define UIP_REASS_FLAG_LASTFRAG 0x01
  static u8_t uip_reasstmr;

  #define IP_HLEN 20
  #define IP_MF   0x20

static u8_t uip_reass(void)
{
    u16_t offset, len;
    u16_t i;

  /* If ip_reasstmr is zero, no packet is present in the buffer, so we
     write the IP header of the fragment into the reassembly
     buffer. The timer is updated with the maximum age. */
    if(uip_reasstmr == 0) {
              memcpy(uip_reassbuf, &BUF->vhl, IP_HLEN);
              uip_reasstmr = UIP_REASS_MAXAGE;
              uip_reassflags = 0;
              memset(uip_reassbitmap, sizeof(uip_reassbitmap), 0);/* Clear the bitmap. */
    }

  /* Check if the incoming fragment matches the one currently present
     in the reasembly buffer. If so, we proceed with copying the
     fragment into the buffer. */
  if(BUF->srcipaddr[0] ==  FBUF->srcipaddr[0]   &&
     BUF->srcipaddr[1] ==  FBUF->srcipaddr[1]   &&
     BUF->destipaddr[0] == FBUF->destipaddr[0]  &&
     BUF->destipaddr[1] == FBUF->destipaddr[1]  &&
     BUF->ipid[0] == FBUF->ipid[0]              &&
     BUF->ipid[1] == FBUF->ipid[1]) {

                len = (BUF->len[0] << 8) + BUF->len[1] - (BUF->vhl & 0x0f) * 4;
                offset = (((BUF->ipoffset[0] & 0x3f) << 8) + BUF->ipoffset[1]) * 8;

                /* If the offset or the offset + fragment length overflows the
                 reassembly buffer, we discard the entire packet. */
                if(offset > UIP_REASS_BUFSIZE || offset + len > UIP_REASS_BUFSIZE) {
                                                    uip_reasstmr = 0;
                                                    goto nullreturn;
                }

                /* Copy the fragment into the reassembly buffer, at the right
                 offset. */
                memcpy(&uip_reassbuf[IP_HLEN + offset],(char *)BUF + (int)((BUF->vhl & 0x0f) * 4),len);
                /* Update the bitmap. */
                if(offset / (8 * 8) == (offset + len) / (8 * 8)) {
                                    /* If the two endpoints are in the same byte, we only update
                                     that byte. */
	                              uip_reassbitmap[offset / (8 * 8)] |= bitmap_bits[(offset / 8 ) & 7] & ~bitmap_bits[((offset + len) / 8 ) & 7];
                }
                else {
                              /* If the two endpoints are in different bytes, we update the
                        	 bytes in the endpoints and fill the stuff inbetween with
                        	 0xff. */
                    uip_reassbitmap[offset / (8 * 8)] |= bitmap_bits[(offset / 8 ) & 7];
                    for(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) {
                                                       	uip_reassbitmap[i] = 0xff;
                    }
                    uip_reassbitmap[(offset + len) / (8 * 8)] |= ~bitmap_bits[((offset + len) / 8 ) & 7];
                }

                /* If this fragment has the More Fragments flag set to zero, we
                 know that this is the last fragment, so we can calculate the
                 size of the entire packet. We also set the
                 IP_REASS_FLAG_LASTFRAG flag to indicate that we have received
                 the final fragment. */

                 if((BUF->ipoffset[0] & IP_MF) == 0) {
                               uip_reassflags |= UIP_REASS_FLAG_LASTFRAG;
                               uip_reasslen = offset + len;
                 }

                  /* Finally, we check if we have a full packet in the buffer. We do
                   this by checking if we have the last fragment and if all bits
                   in the bitmap are set. */
                 if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) {
                                  /* Check all bytes up to and including all but the last byte in
                                	 the bitmap. */
                                  for(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) {
                                              	if(uip_reassbitmap[i] != 0xff) {
                                                        	  goto nullreturn;
                                              	}
                                  }
                                  /* Check the last byte in the bitmap. It should contain just the
                              	 right amount of bits. */
                                  if(uip_reassbitmap[uip_reasslen / (8 * 8)] != (u8_t)~bitmap_bits[uip_reasslen / 8 & 7]) {
                                                                  goto nullreturn;
                                  }

                                  /* If we have come this far, we have a full packet in the
                                	 buffer, so we allocate a pbuf and copy the packet into it. We
                                	 also reset the timer. */
                                  uip_reasstmr = 0;
                                  memcpy(BUF, FBUF, uip_reasslen);

                                  /* Pretend to be a "normal" (i.e., not fragmented) IP packet
                                	 from now on. */
                                  BUF->ipoffset[0] = BUF->ipoffset[1] = 0;
                                  BUF->len[0] = uip_reasslen >> 8;
                                  BUF->len[1] = uip_reasslen & 0xff;
                                  BUF->ipchksum = 0;
                                  BUF->ipchksum = ~(uip_ipchksum());

                                  return uip_reasslen;
                 }
  }
  nullreturn:
  return 0;
}
#endif /* UIP_REASSEMBL */
/*-----------------------------------------------------------------------------------*/
static void uip_add_rcv_nxt(u16_t n)
{
    uip_add32(uip_conn->rcv_nxt, n);
    uip_conn->rcv_nxt[0] = uip_acc32[0];
    uip_conn->rcv_nxt[1] = uip_acc32[1];
    uip_conn->rcv_nxt[2] = uip_acc32[2];
    uip_conn->rcv_nxt[3] = uip_acc32[3];
}
/*-----------------------------------------------------------------------------------*/
void uip_process(u8_t flag)
{
    register struct uip_conn *uip_connr = uip_conn;

    uip_appdata = &uip_buf[40 + UIP_LLH_LEN];


    
    if(flag == UIP_TIMER) {       /* Check if we were invoked because of the perodic timer fireing. */
           #if UIP_REASSEMBLY
           if(uip_reasstmr != 0) {
                   --uip_reasstmr;
            }
          #endif /* UIP_REASSEMBLY */
              /* Increase the initial sequence number. */
          if(++iss[3] == 0) {
                if(++iss[2] == 0) {
                    	if(++iss[1] == 0) {
                                  ++iss[0];
                      	}
                }
          }
          uip_len = 0;
          if(uip_connr->tcpstateflags == TIME_WAIT || uip_connr->tcpstateflags == FIN_WAIT_2) { 
                              ++(uip_connr->timer);
                              if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) {
                                        	uip_connr->tcpstateflags = CLOSED;
                              }
          } 
          else if(uip_connr->tcpstateflags != CLOSED) {
                        /* If the connection has outstanding data, we increase the
	               connection's timer and see if it has reached the RTO value
                      	 in which case we retransmit. */
                        if(uip_outstanding(uip_connr)) {
                            	if(uip_connr->timer-- == 0) {
                                      	  if(uip_connr->nrtx == UIP_MAXRTX          || 
                                             ((uip_connr->tcpstateflags == SYN_SENT ||
                                              uip_connr->tcpstateflags == SYN_RCVD) &&
                                              uip_connr->nrtx == UIP_MAXSYNRTX)) {
                                                
                                              	        uip_connr->tcpstateflags = CLOSED;

                                                       /* We call UIP_APPCALL() with uip_flags set to
                                          	       UIP_TIMEDOUT to inform the application that the
                                        	       connection has timed out. */
                                                        uip_flags = UIP_TIMEDOUT;
                                                        UIP_APPCALL();
                                                        /* We also send a reset packet to the remote host. */
                                                        BUF->flags = TCP_RST | TCP_ACK;
                                                        goto tcp_send_nodata;
  	                                  }

                                	  /* Exponential backoff. */
                                      	  uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4?4: uip_connr->nrtx);
                                  	  ++(uip_connr->nrtx);
	
                                      	  /* Ok, so we need to retransmit. We do this differently
                                  	     depending on which state we are in. In ESTABLISHED, we
                                    	     call upon the application so that it may prepare the
                                  	     data for the retransmit. In SYN_RCVD, we resend the
                                             SYNACK that we sent earlier and in LAST_ACK we have to
                                  	     retransmit our FINACK. */
                                      	  UIP_STAT(++uip_stat.tcp.rexmit);
                                    	  switch(uip_connr->tcpstateflags & TS_MASK) {
                                            	  case SYN_RCVD:
                                                      	    /* In the SYN_RCVD state, we should retransmit our
                                                                 SYNACK. */
                                                        	goto tcp_send_synack;
	                                      #if UIP_ACTIVE_OPEN
                                              	  case SYN_SENT:
                                                      	    /* In the SYN_SENT state, we retransmit out SYN. */
                                                        	BUF->flags = 0;
                                                                goto tcp_send_syn;
                                              #endif /* UIP_ACTIVE_OPEN */
	
                                                  case ESTABLISHED:
                                                    	    /* In the ESTABLISHED state, we call upon the application
                                                                 to do the actual retransmit after which we jump into
                                                               the code for sending out the packet (the apprexmit
                                                             label). */
                                                              	    uip_len = 0;
                                                              	    uip_slen = 0;
                                                        	    uip_flags = UIP_REXMIT;
                                                                    UIP_APPCALL();
                                                            	    goto apprexmit;
	
                                          	  case FIN_WAIT_1:
                                            	  case CLOSING   :
                                            	  case LAST_ACK  :
                                                                    	    /* In all these states we should retransmit a FINACK. */
                                                                    goto tcp_send_finack;
	
	                                  }//end of switch.
	                        }
                        }
                        else if((uip_connr->tcpstateflags & TS_MASK) == ESTABLISHED) {
                                        	/* If there was no need for a retransmission, we poll the
                                                 application for new data. */
                                          	uip_len = 0;
                                            	uip_slen = 0;
                                            	uip_flags = UIP_POLL;
                                              	UIP_APPCALL();
                                              	goto appsend;
                        }
        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区三区免费 | 懂色av中文字幕一区二区三区| 国产亚洲综合性久久久影院| 欧美一区二区视频网站| 在线日韩国产精品| 色综合色综合色综合色综合色综合| 成人h动漫精品一区二区| 国产在线精品视频| 国产精品资源在线| 国产1区2区3区精品美女| 国产在线精品国自产拍免费| 国产精品夜夜爽| 成人美女视频在线观看18| 成人av综合在线| 99re这里都是精品| 欧美伊人久久久久久午夜久久久久| 一本大道av一区二区在线播放| 色婷婷综合久久久中文字幕| 91精品办公室少妇高潮对白| 欧美日韩专区在线| 91精品国产高清一区二区三区蜜臀 | 精品黑人一区二区三区久久| 日韩精品一区二区三区蜜臀| 久久久久久久综合狠狠综合| 欧美国产精品v| 亚洲免费观看高清完整版在线观看熊 | 黄页视频在线91| 国产成人免费视频网站高清观看视频 | 国产精品久久久久精k8| 一区二区三区在线观看国产 | 成人一二三区视频| 色婷婷久久99综合精品jk白丝 | 国产欧美精品一区二区色综合朱莉| 国产午夜亚洲精品午夜鲁丝片| 国产精品人成在线观看免费| 一区二区三区在线看| 免费美女久久99| 成人晚上爱看视频| 欧美日韩免费一区二区三区视频| 日韩一区二区麻豆国产| 久久网站热最新地址| 亚洲免费毛片网站| 老鸭窝一区二区久久精品| 豆国产96在线|亚洲| 在线观看亚洲a| 精品国产乱码91久久久久久网站| 日本一区二区三区国色天香 | 全国精品久久少妇| 国产成人精品综合在线观看| 欧美亚洲禁片免费| 久久久精品蜜桃| 亚洲第一主播视频| 国产成人高清视频| 欧美情侣在线播放| 国产精品国产三级国产普通话蜜臀| 亚洲狠狠爱一区二区三区| 国产在线精品免费| 欧美精品粉嫩高潮一区二区| 国产三区在线成人av| 午夜视频一区在线观看| 国产成人免费在线视频| 在线观看91av| 国产精品乱码一区二区三区软件 | 一区二区三区精品视频在线| 久久精品99国产精品日本| 色视频成人在线观看免| 337p日本欧洲亚洲大胆色噜噜| 亚洲精选免费视频| 国产一区二区在线观看免费| 欧美日韩在线免费视频| 亚洲国产精品ⅴa在线观看| 免费高清成人在线| 欧美日韩美女一区二区| 亚洲欧洲无码一区二区三区| 久久av资源网| 欧美日韩mp4| 亚洲三级在线播放| 国产成人在线观看| 26uuuu精品一区二区| 日韩国产欧美在线观看| 日本高清免费不卡视频| 国产精品女人毛片| 国产黄色精品网站| 精品国产免费久久| 日韩va欧美va亚洲va久久| 欧美性感一类影片在线播放| |精品福利一区二区三区| 国产精品1区2区| 精品久久久影院| 裸体在线国模精品偷拍| 欧美精选一区二区| 亚洲成av人片在www色猫咪| 色综合久久中文字幕| 亚洲欧洲精品天堂一级| 丁香婷婷深情五月亚洲| 久久久www成人免费无遮挡大片| 男人操女人的视频在线观看欧美| 欧美日韩国产另类不卡| 亚洲国产cao| 欧美日韩一区视频| 午夜激情一区二区三区| 欧美亚洲日本国产| 午夜精品福利视频网站| 欧美乱妇20p| 日韩成人av影视| 91精品国产91热久久久做人人| 偷窥少妇高潮呻吟av久久免费| 欧美私人免费视频| 亚洲国产成人精品视频| 欧美精品视频www在线观看| 五月天一区二区| 欧美一区二区精品久久911| 秋霞午夜av一区二区三区| 欧美一级理论片| 韩国v欧美v亚洲v日本v| 久久久精品人体av艺术| 风间由美一区二区三区在线观看| 国产欧美日韩在线视频| 成人精品高清在线| 亚洲色图制服丝袜| 在线看国产一区二区| 亚洲成人一二三| 日韩欧美一级二级三级久久久| 看片的网站亚洲| 久久精品视频免费| caoporm超碰国产精品| 一区二区三区四区乱视频| 欧美色综合网站| 久久99热国产| 日本一区二区视频在线观看| av激情成人网| 亚洲成人av在线电影| 欧美成人三级在线| 成人免费视频国产在线观看| 一区二区三区四区视频精品免费| 欧美精品国产精品| 国产电影一区二区三区| 亚洲欧美一区二区三区孕妇| 欧美猛男gaygay网站| 国内外成人在线| 国产精品国模大尺度视频| 欧美性极品少妇| 国产在线不卡一区| 亚洲黄色av一区| 日韩精品一区在线| 99精品欧美一区二区三区综合在线| 亚洲一线二线三线视频| 欧美mv和日韩mv的网站| 99视频精品在线| 奇米一区二区三区| 国产精品日产欧美久久久久| 欧美精品久久99| av欧美精品.com| 捆绑调教一区二区三区| 亚洲激情网站免费观看| 欧美成人国产一区二区| 91美女在线视频| 久久av资源站| 亚洲成人av一区二区三区| 欧美激情资源网| 91麻豆精品国产91| 不卡影院免费观看| 美女视频网站久久| 一区二区三区美女视频| 久久伊人蜜桃av一区二区| 欧美在线观看一二区| 国产剧情在线观看一区二区| 亚洲国产另类精品专区| 国产欧美一区二区精品秋霞影院| 4438成人网| 色婷婷综合久久久中文一区二区| 国产一区三区三区| 性做久久久久久久免费看| 国产精品女上位| 久久夜色精品一区| 91精品国产综合久久精品麻豆| 不卡的电视剧免费网站有什么| 蜜臀av性久久久久av蜜臀妖精| 亚洲激情五月婷婷| 欧美国产日本视频| 精品国产伦一区二区三区观看方式| 在线观看av一区| 成人视屏免费看| 国产精品一品视频| 精品一区二区在线免费观看| 亚洲狠狠爱一区二区三区| 综合久久久久久| 国产精品丝袜91| 国产亚洲欧美激情| 精品91自产拍在线观看一区| 666欧美在线视频| 精品视频一区三区九区| 色综合中文字幕| 北岛玲一区二区三区四区| 国产伦精品一区二区三区免费迷 | 国产人久久人人人人爽| 日韩美女主播在线视频一区二区三区 | 久久av资源站| 蜜桃在线一区二区三区| 手机精品视频在线观看|