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

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

?? tcp_out.c

?? 基于DM642的網絡傳輸
?? C
?? 第 1 頁 / 共 2 頁
字號:
	
	  seg = pcb->unsent;
	
	  /* useg should point to last segment on unacked queue */
	  useg = pcb->unacked;
	  if (useg != NULL) 
	  {
		    for (; useg->next != NULL; useg = useg->next);
	  }                                                                             
	
	   
	  /* If the TF_ACK_NOW flag is set, we check if there is data that is
	     to be sent. If data is to be sent out, we'll just piggyback our
	     acknowledgement with the outgoing segment. If no data will be
	     sent (either because the ->unsent queue is empty or because the
	     window doesn't allow it) we'll have to construct an empty ACK
	     segment and send it. */
	  if (pcb->flags & TF_ACK_NOW &&(seg == NULL || ntohl(seg->tcphdr->seqno) 
	      - pcb->lastack + seg->len > wnd)) 
	  {
		    pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
		    p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM);
		    if (p == NULL) 
		    {
			      return ERR_BUF;
		    }
		
		    tcphdr = p->payload;
		    tcphdr->src = htons(pcb->local_port);
		    tcphdr->dest = htons(pcb->remote_port);
		    tcphdr->seqno = htonl(pcb->snd_nxt);
		    tcphdr->ackno = htonl(pcb->rcv_nxt);
		    TCPH_FLAGS_SET(tcphdr, TCP_ACK);
		    tcphdr->wnd = htons(pcb->rcv_wnd);
		    tcphdr->urgp = 0;
		    TCPH_HDRLEN_SET(tcphdr, 5);
		
		    tcphdr->chksum = 0;
		
		    tcphdr->chksum = inet_chksum_pseudo(p, &(pcb->local_ip), &(pcb->dest_ip),
		              TCP, p->tot_len);
		              
		    ///////////////////////////////////////////////////////////////////    
		    if(alloc_skb(&skb,ETH_FRAME_LEN)==-1)
		    {
		        return ERR_BUF;
		    }
		    
	        ip_skb_reserve(&skb);
	        DesData=(Uint8 *)skb_put(&skb,p->len);
	        memcpy(DesData,p->payload,p->len);  
			if(ip_send(&skb,ntohl(pcb->dest_ip), TCP)==-1)
			{
			     free_skb(&skb);
			}
			////////////////////////////////////////////////////////////////
		   /*需要改
		    ip_output(p, (struct ip_addr *)&(pcb->local_ip), (struct ip_addr *)&(pcb->dest_ip), pcb->ttl, pcb->tos,
		                 TCP);
		   */
		    pbuf_free(p);
	
	        return ERR_OK;
	  }
	
	
	  while (seg != NULL &&
	         ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) 
	  {
		    pcb->unsent = seg->next;
		
		    if (pcb->state != SYN_SENT) 
		    {
			      TCPH_SET_FLAG(seg->tcphdr, TCP_ACK);
			      pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);
		    }
		
		    tcp_output_segment(seg, pcb);
		    pcb->snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg);
		    if (TCP_SEQ_LT(pcb->snd_max, pcb->snd_nxt)) 
		    {
			      pcb->snd_max = pcb->snd_nxt;
		    }
		    /* put segment on unacknowledged list if length > 0 */
		    if (TCP_TCPLEN(seg) > 0) 
		    {
			      seg->next = NULL;
			      if (pcb->unacked == NULL) 
			      {
				        pcb->unacked = seg;
				        useg = seg;
			      } 
			      else 
			      {
				        useg->next = seg;
				        useg = useg->next;
			      }
		    }
		    else 
		    {
			      tcp_seg_free(seg);
		    }
		    seg = pcb->unsent;
	  }
	  return ERR_OK;
}

static void tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb)
{
	  u16_t len;
	  struct netif *netif;
	  struct  sk_buff skb;
	  Uint8   *DesData;
	
	  /* The TCP header has already been constructed, but the ackno and
	   wnd fields remain. */
	  seg->tcphdr->ackno = htonl(pcb->rcv_nxt);
	
	  /* silly window avoidance */
	  if (pcb->rcv_wnd < pcb->mss) 
	  {
		    seg->tcphdr->wnd = 0;
	  }
	  else 
	  {
		    /* advertise our receive window size in this TCP segment */
		    seg->tcphdr->wnd = htons(pcb->rcv_wnd);
	  }

	  /* If we don't have a local IP address, we get one by
	     calling ip_route(). */
	  if (ip_addr_isany((struct ip_addr *)&(pcb->local_ip))) 
	  {
		    /*  需要修改
		    netif = ip_route(&(pcb->dest_ip));
		    */
		    if (netif == NULL) 
		    {
			      return;
		    }
		    ip_addr_set((struct ip_addr *)&(pcb->local_ip), (struct ip_addr *)&(netif->ip_addr));
	  }
	
	  pcb->rtime = 0;
	
	  if (pcb->rttest == 0) 
	  {
		    pcb->rttest = tcp_ticks;
		    pcb->rtseq = ntohl(seg->tcphdr->seqno);
		
	  }
	  len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload);
	
	  seg->p->len -= len;
	  seg->p->tot_len -= len;
	
	  seg->p->payload = seg->tcphdr;
	
	  seg->tcphdr->chksum = 0;
	  seg->tcphdr->chksum = inet_chksum_pseudo(seg->p,
	                                           &(pcb->local_ip),
	                                           &(pcb->dest_ip),
	                                           TCP, seg->p->tot_len);
	  TCP_STATS_INC(tcp.xmit);
	 ///////////////////////////////////////////////////////////////////    
      if(alloc_skb(&skb,ETH_FRAME_LEN)==-1)
     {
          return ;
     }
    
     ip_skb_reserve(&skb);
     DesData=(Uint8 *)skb_put(&skb,seg->p->len);
     memcpy(DesData,seg->p->payload,seg->p->len);  
	 if(ip_send(&skb,ntohl(pcb->dest_ip), TCP)==-1)
	 {
	       free_skb(&skb);
	 }
	////////////////////////////////////////////////////////////////
	/*修要修改
	  ip_output(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
	      IP_PROTO_TCP);
	      */
}

void tcp_rst(u32_t seqno, u32_t ackno,
             u32_t local_ip, u32_t remote_ip,
             u16_t local_port, u16_t remote_port)
{
	  struct pbuf *p;
	  struct tcp_hdr *tcphdr;
	  struct  sk_buff skb;
	  Uint8   *DesData;
	  p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM);
	  if (p == NULL) 
	  {
	      return;
	  }
	
	  tcphdr = p->payload;
	  tcphdr->src = htons(local_port);
	  tcphdr->dest = htons(remote_port);
	  tcphdr->seqno = htonl(seqno);
	  tcphdr->ackno = htonl(ackno);
	  TCPH_FLAGS_SET(tcphdr, TCP_RST | TCP_ACK);
	  tcphdr->wnd = htons(TCP_WND);
	  tcphdr->urgp = 0;
	  TCPH_HDRLEN_SET(tcphdr, 5);
	
	  tcphdr->chksum = 0;
	
//	  tcphdr->chksum = inet_chksum_pseudo(p, local_ip, remote_ip,
//	                                      TCP, p->tot_len);
	  TCP_STATS_INC(tcp.xmit);
	   /* Send output with hardcoded TTL since we have no access to the pcb */
	 ///////////////////////////////////////////////////////////////////    
	  if(alloc_skb(&skb,ETH_FRAME_LEN)==-1)
	 {
	      return ;
	 }
	
	 ip_skb_reserve(&skb);
	 DesData=(Uint8 *)skb_put(&skb,p->len);
	 memcpy(DesData,p->payload,p->len);  
	 if(ip_send(&skb,ntohl(remote_ip), TCP)==-1)
	 {
	        free_skb(&skb);
	 }
	////////////////////////////////////////////////////////////////
	   /*需要修改
	  ip_output(p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP);
	  */
	  pbuf_free(p);
}

void tcp_rexmit(struct tcp_pcb *pcb)
{
  struct tcp_seg *seg;

  if (pcb->unacked == NULL) {
    return;
  }

  /* Move the first unacked segment to the unsent queue */
  seg = pcb->unacked->next;
  pcb->unacked->next = pcb->unsent;
  pcb->unsent = pcb->unacked;
  pcb->unacked = seg;

  pcb->snd_nxt = ntohl(pcb->unsent->tcphdr->seqno);

  ++pcb->nrtx;

  /* Don't take any rtt measurements after retransmitting. */
  pcb->rttest = 0;

  /* Do the actual retransmission. */
  tcp_output(pcb);

}

void tcp_keepalive(struct tcp_pcb *pcb)
{
   struct pbuf *p;
   struct tcp_hdr *tcphdr;
   struct  sk_buff skb;
   Uint8   *DesData;

   
   p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM);

   if(p == NULL) 
   {
      return;
   }

   tcphdr = p->payload;
   tcphdr->src = htons(pcb->local_port);
   tcphdr->dest = htons(pcb->remote_port);
   tcphdr->seqno = htonl(pcb->snd_nxt - 1);
   tcphdr->ackno = htonl(pcb->rcv_nxt);
   tcphdr->wnd = htons(pcb->rcv_wnd);
   tcphdr->urgp = 0;
   TCPH_HDRLEN_SET(tcphdr, 5);
   
   tcphdr->chksum = 0;
   tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->dest_ip, TCP, p->tot_len);
   TCP_STATS_INC(tcp.xmit);

   ///////////////////////////////////////////////////////////////////    
   if(alloc_skb(&skb,ETH_FRAME_LEN)==-1)
   {
	    return ;
   }
	
   ip_skb_reserve(&skb);
   DesData=(Uint8 *)skb_put(&skb,p->len);
   memcpy(DesData,p->payload,p->len);  
   if(ip_send(&skb,ntohl(pcb->dest_ip), TCP)==-1)
   {
        free_skb(&skb);
   }
	////////////////////////////////////////////////////////////////
   /* Send output to IP */
   /*修要修改
   ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP);
   */

  pbuf_free(p);

}










?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品456露脸| 成人性生交大片免费看中文网站| 久久―日本道色综合久久| 91日韩一区二区三区| 国产精品一区二区视频| 日韩精品午夜视频| 亚洲精品视频自拍| 国产精品乱码妇女bbbb| 久久精品人人做人人爽97| 欧美大白屁股肥臀xxxxxx| 91在线视频18| 91视频一区二区| 成人免费精品视频| 成人av资源下载| caoporen国产精品视频| 国产iv一区二区三区| 国产麻豆成人传媒免费观看| 精油按摩中文字幕久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲成人自拍一区| 丝袜诱惑亚洲看片| 美国欧美日韩国产在线播放| 亚洲一区二区三区国产| 亚洲超丰满肉感bbw| 日本成人在线电影网| 国产一区二区不卡在线| 不卡在线视频中文字幕| 91久久精品一区二区二区| 欧美一区二区观看视频| 日韩午夜中文字幕| 中文成人综合网| 性欧美疯狂xxxxbbbb| 日韩理论片在线| 中文字幕一区日韩精品欧美| 亚洲国产高清不卡| 国产精品亲子乱子伦xxxx裸| 亚洲在线成人精品| 天堂成人免费av电影一区| 亚洲一区二区三区小说| 日本aⅴ精品一区二区三区| 国产老妇另类xxxxx| 国产激情视频一区二区三区欧美| 不卡在线观看av| 欧美狂野另类xxxxoooo| 国产午夜精品福利| 亚洲国产精品精华液网站| 国产成人午夜电影网| 91精品婷婷国产综合久久 | 欧美一区二区在线播放| 久久精品一二三| 一区二区三区在线视频免费 | 精品久久久久久久久久久久包黑料 | 亚洲精品高清在线| 国内精品写真在线观看| 欧美精品日日鲁夜夜添| 亚洲精品一区二区三区精华液 | 欧美电影一区二区| 亚洲综合精品自拍| 99这里都是精品| 在线成人av影院| 国产精品乱码一区二三区小蝌蚪| 国产真实精品久久二三区| 欧美日韩免费一区二区三区 | 国产一区二区不卡| 制服.丝袜.亚洲.中文.综合| 亚洲黄色小说网站| 成人免费毛片高清视频| 欧美成人乱码一区二区三区| 国产精品天干天干在线综合| 高清不卡在线观看av| 欧美一级日韩免费不卡| 国产精品日韩成人| 国产v综合v亚洲欧| 久久久不卡影院| 国产一区二区三区四区五区美女| 欧美日韩成人在线| 国产一区二区三区久久悠悠色av| 久久夜色精品国产欧美乱极品| 久久av资源网| 亚洲精品一区二区三区蜜桃下载 | 亚洲尤物视频在线| 99久久精品国产麻豆演员表| 国产欧美日韩麻豆91| 狠狠色丁香婷婷综合久久片| 久久精品人人做| 99久久精品情趣| 亚洲综合一二区| 久久精品亚洲精品国产欧美| 91视频91自| 日本在线不卡视频| 久久久久久久久久久99999| 国产精品一区久久久久| 国产精品视频一二三| 91亚洲精品乱码久久久久久蜜桃| 综合中文字幕亚洲| 欧美亚洲自拍偷拍| 国产伦理精品不卡| 天天影视涩香欲综合网| 国产欧美日韩在线视频| 日韩一区二区三区四区五区六区| 丰满亚洲少妇av| 久草这里只有精品视频| 亚洲欧美日韩精品久久久久| 精品精品国产高清a毛片牛牛| 一本在线高清不卡dvd| 91啪在线观看| 在线观看亚洲专区| 色综合夜色一区| 在线看国产一区| 99精品久久只有精品| 国产91露脸合集magnet| 国产不卡在线播放| 丰满岳乱妇一区二区三区| 成人免费视频caoporn| 99久久99久久精品国产片果冻| 国产精品小仙女| 国产精品一色哟哟哟| 国产一区二区中文字幕| 国产尤物一区二区在线| 国产最新精品精品你懂的| 韩国欧美国产1区| 久久福利资源站| 国产麻豆一精品一av一免费| 北岛玲一区二区三区四区 | 国产高清久久久| 97久久精品人人爽人人爽蜜臀 | 一本到一区二区三区| 色综合久久久久综合体桃花网| 99免费精品在线| 欧美性极品少妇| 欧美一区二区精美| 日本一区二区三区四区在线视频| 国产欧美一区二区三区网站| 一区二区三区欧美日韩| 国产综合久久久久久鬼色| 国产老妇另类xxxxx| 欧洲人成人精品| 亚洲精品在线观看视频| 亚洲精品乱码久久久久久| 久久精品免费看| 91在线免费视频观看| 欧美大片一区二区三区| 成人欧美一区二区三区小说| 蜜臀精品久久久久久蜜臀| 91在线视频18| 久久婷婷国产综合精品青草| 亚洲一线二线三线视频| 久久成人av少妇免费| 欧美日本一区二区在线观看| 久久久久久久性| 蜜臀a∨国产成人精品| 粉嫩蜜臀av国产精品网站| 欧美电视剧在线看免费| 午夜国产精品一区| 欧美最新大片在线看| 有坂深雪av一区二区精品| 色婷婷精品久久二区二区蜜臀av| 精品久久久久久久久久久久久久久久久 | 91免费在线播放| 国产精品日韩成人| 国内精品嫩模私拍在线| 日韩欧美一二区| 日韩一区精品视频| 在线播放91灌醉迷j高跟美女| **网站欧美大片在线观看| 波多野结衣精品在线| 国产校园另类小说区| 国产成人免费视频精品含羞草妖精| 欧美xxxx老人做受| 日韩成人av影视| 日韩视频免费观看高清完整版在线观看| 一区二区在线观看免费| 在线看国产日韩| 天天做天天摸天天爽国产一区| 欧美精品日韩一本| 激情图片小说一区| 久久蜜桃av一区精品变态类天堂| 国产精品一区在线观看你懂的| 欧美精彩视频一区二区三区| 99精品视频一区| 亚洲成av人片在线观看| 91麻豆精品国产91久久久久久 | 久久精品国产一区二区| 国产日韩视频一区二区三区| 国产精品1区二区.| 亚洲一线二线三线视频| 91老师国产黑色丝袜在线| 国产精品久久久久久亚洲伦| 99国产欧美久久久精品| 亚洲午夜免费福利视频| 精品三级在线观看| 色国产综合视频| 美国毛片一区二区| 一区二区三区高清在线| 一区二区三区国产| 亚洲国产精品嫩草影院| 亚洲综合在线五月| 亚洲一区二区三区四区五区中文| 久久久久久影视| 久久久久88色偷偷免费|