/[lwip]/lwip/src/core/tcp_in.c
ViewVC logotype

Diff of /lwip/src/core/tcp_in.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16 by jani, Tue Jan 14 09:38:10 2003 UTC revision 1.17 by davidhaas, Thu Feb 6 22:18:56 2003 UTC
# Line 157  tcp_input(struct pbuf *p, struct netif * Line 157  tcp_input(struct pbuf *p, struct netif *
157       for an active connection. */         for an active connection. */  
158    prev = NULL;      prev = NULL;  
159    for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {    for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
160      ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED);      LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED);
161      ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT);      LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT);
162      ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN);      LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN);
163      if(pcb->remote_port == tcphdr->src &&      if(pcb->remote_port == tcphdr->src &&
164         pcb->local_port == tcphdr->dest &&         pcb->local_port == tcphdr->dest &&
165         ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) &&         ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) &&
# Line 168  tcp_input(struct pbuf *p, struct netif * Line 168  tcp_input(struct pbuf *p, struct netif *
168        /* Move this PCB to the front of the list so that subsequent        /* Move this PCB to the front of the list so that subsequent
169           lookups will be faster (we exploit locality in TCP segment           lookups will be faster (we exploit locality in TCP segment
170           arrivals). */           arrivals). */
171        ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb);        LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb);
172        if(prev != NULL) {        if(prev != NULL) {
173          prev->next = pcb->next;          prev->next = pcb->next;
174          pcb->next = tcp_active_pcbs;          pcb->next = tcp_active_pcbs;
175          tcp_active_pcbs = pcb;          tcp_active_pcbs = pcb;
176        }        }
177        ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb);        LWIP_ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb);
178        break;        break;
179      }      }
180      prev = pcb;      prev = pcb;
# Line 185  tcp_input(struct pbuf *p, struct netif * Line 185  tcp_input(struct pbuf *p, struct netif *
185         in the TIME-WAIT state. */         in the TIME-WAIT state. */
186    
187      for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {      for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
188        ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT);        LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT);
189        if(pcb->remote_port == tcphdr->src &&        if(pcb->remote_port == tcphdr->src &&
190           pcb->local_port == tcphdr->dest &&           pcb->local_port == tcphdr->dest &&
191           ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) &&           ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) &&
# Line 201  tcp_input(struct pbuf *p, struct netif * Line 201  tcp_input(struct pbuf *p, struct netif *
201      }        }  
202        
203    /* Finally, if we still did not get a match, we check all PCBs that    /* Finally, if we still did not get a match, we check all PCBs that
204       are LISTENing for incomming connections. */       are LISTENing for incoming connections. */
205      prev = NULL;        prev = NULL;  
206      for(lpcb = tcp_listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {      for(lpcb = tcp_listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {
207        if((ip_addr_isany(&(lpcb->local_ip)) ||        if((ip_addr_isany(&(lpcb->local_ip)) ||
# Line 326  tcp_input(struct pbuf *p, struct netif * Line 326  tcp_input(struct pbuf *p, struct netif *
326      pbuf_free(p);      pbuf_free(p);
327    }    }
328    
329    ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane());      LWIP_ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane());  
330    PERF_STOP("tcp_input");    PERF_STOP("tcp_input");
331  }  }
332  /*-----------------------------------------------------------------------------------*/  /*-----------------------------------------------------------------------------------*/
# Line 450  tcp_process(struct tcp_pcb *pcb) Line 450  tcp_process(struct tcp_pcb *pcb)
450            
451      if(acceptable) {      if(acceptable) {
452        DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n"));        DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n"));
453        ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED);        LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED);
454        recv_flags = TF_RESET;        recv_flags = TF_RESET;
455        pcb->flags &= ~TF_ACK_DELAY;        pcb->flags &= ~TF_ACK_DELAY;
456        return ERR_RST;        return ERR_RST;
# Line 500  tcp_process(struct tcp_pcb *pcb) Line 500  tcp_process(struct tcp_pcb *pcb)
500           TCP_SEQ_LEQ(ackno, pcb->snd_nxt)) {           TCP_SEQ_LEQ(ackno, pcb->snd_nxt)) {
501          pcb->state = ESTABLISHED;          pcb->state = ESTABLISHED;
502          DEBUGF(DEMO_DEBUG, ("TCP connection established %d -> %d.\n", inseg.tcphdr->src, inseg.tcphdr->dest));          DEBUGF(DEMO_DEBUG, ("TCP connection established %d -> %d.\n", inseg.tcphdr->src, inseg.tcphdr->dest));
503          ASSERT("pcb->accept != NULL", pcb->accept != NULL);          LWIP_ASSERT("pcb->accept != NULL", pcb->accept != NULL);
504          /* Call the accept function. */          /* Call the accept function. */
505          TCP_EVENT_ACCEPT(pcb, ERR_OK, err);          TCP_EVENT_ACCEPT(pcb, ERR_OK, err);
506          if(err != ERR_OK) {          if(err != ERR_OK) {
# Line 727  tcp_receive(struct tcp_pcb *pcb) Line 727  tcp_receive(struct tcp_pcb *pcb)
727          DEBUGF(TCP_QLEN_DEBUG, ("%d (after freeing unacked)\n", pcb->snd_queuelen));          DEBUGF(TCP_QLEN_DEBUG, ("%d (after freeing unacked)\n", pcb->snd_queuelen));
728  #ifdef LWIP_DEBUG  #ifdef LWIP_DEBUG
729          if(pcb->snd_queuelen != 0) {          if(pcb->snd_queuelen != 0) {
730            ASSERT("tcp_receive: valid queue length", pcb->unacked != NULL ||            LWIP_ASSERT("tcp_receive: valid queue length", pcb->unacked != NULL ||
731                   pcb->unsent != NULL);                         pcb->unsent != NULL);      
732          }          }
733  #endif /* LWIP_DEBUG */  #endif /* LWIP_DEBUG */
# Line 758  tcp_receive(struct tcp_pcb *pcb) Line 758  tcp_receive(struct tcp_pcb *pcb)
758          DEBUGF(TCP_QLEN_DEBUG, ("%d (after freeing unsent)\n", pcb->snd_queuelen));          DEBUGF(TCP_QLEN_DEBUG, ("%d (after freeing unsent)\n", pcb->snd_queuelen));
759  #ifdef LWIP_DEBUG  #ifdef LWIP_DEBUG
760          if(pcb->snd_queuelen != 0) {          if(pcb->snd_queuelen != 0) {
761            ASSERT("tcp_receive: valid queue length", pcb->unacked != NULL ||            LWIP_ASSERT("tcp_receive: valid queue length", pcb->unacked != NULL ||
762                   pcb->unsent != NULL);                         pcb->unsent != NULL);      
763          }          }
764  #endif /* LWIP_DEBUG */  #endif /* LWIP_DEBUG */

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26