/[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.54 by likewise, Fri Feb 4 13:43:13 2005 UTC revision 1.55 by likewise, Wed Jun 8 18:57:05 2005 UTC
# Line 509  tcp_process(struct tcp_pcb *pcb) Line 509  tcp_process(struct tcp_pcb *pcb)
509        /*if (TCP_SEQ_GEQ(seqno, pcb->rcv_nxt) &&        /*if (TCP_SEQ_GEQ(seqno, pcb->rcv_nxt) &&
510            TCP_SEQ_LEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {            TCP_SEQ_LEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {
511        */        */
512        if(TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt+pcb->rcv_wnd)){        if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt+pcb->rcv_wnd)) {
513          acceptable = 1;          acceptable = 1;
514        }        }
515      }      }
# Line 538  tcp_process(struct tcp_pcb *pcb) Line 538  tcp_process(struct tcp_pcb *pcb)
538    case SYN_SENT:    case SYN_SENT:
539      LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %lu pcb->snd_nxt %lu unacked %lu\n", ackno,      LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %lu pcb->snd_nxt %lu unacked %lu\n", ackno,
540       pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno)));       pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno)));
541        /* received SYN ACK with expected sequence number? */
542      if ((flags & TCP_ACK) && (flags & TCP_SYN)      if ((flags & TCP_ACK) && (flags & TCP_SYN)
543          && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) {          && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) {
544        pcb->snd_buf ++;        pcb->snd_buf++;
545        pcb->rcv_nxt = seqno + 1;        pcb->rcv_nxt = seqno + 1;
546        pcb->lastack = ackno;        pcb->lastack = ackno;
547        pcb->snd_wnd = tcphdr->wnd;        pcb->snd_wnd = tcphdr->wnd;
# Line 561  tcp_process(struct tcp_pcb *pcb) Line 562  tcp_process(struct tcp_pcb *pcb)
562        TCP_EVENT_CONNECTED(pcb, ERR_OK, err);        TCP_EVENT_CONNECTED(pcb, ERR_OK, err);
563        tcp_ack(pcb);        tcp_ack(pcb);
564      }      }
565        /* received ACK? possibly a half-open connection */
566        else if (flags & TCP_ACK) {
567          /* send a RST to bring the other side in a non-synchronized state. */
568          tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src),
569            tcphdr->dest, tcphdr->src);
570        }
571      break;      break;
572    case SYN_RCVD:    case SYN_RCVD:
573      if (flags & TCP_ACK &&      if (flags & TCP_ACK &&
574         !(flags & TCP_RST)) {         !(flags & TCP_RST)) {
575        /*if (TCP_SEQ_LT(pcb->lastack, ackno) &&        /* expected ACK number? */
576          TCP_SEQ_LEQ(ackno, pcb->snd_nxt)) { */        if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) {
       if(TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)){  
577          pcb->state = ESTABLISHED;          pcb->state = ESTABLISHED;
578          LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %u -> %u.\n", inseg.tcphdr->src, inseg.tcphdr->dest));          LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %u -> %u.\n", inseg.tcphdr->src, inseg.tcphdr->dest));
579  #if LWIP_CALLBACK_API  #if LWIP_CALLBACK_API
# Line 586  tcp_process(struct tcp_pcb *pcb) Line 592  tcp_process(struct tcp_pcb *pcb)
592          tcp_receive(pcb);          tcp_receive(pcb);
593          pcb->cwnd = pcb->mss;          pcb->cwnd = pcb->mss;
594        }        }
595          /* incorrect ACK number */
596          else {
597            /* send RST */
598            tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src),
599              tcphdr->dest, tcphdr->src);
600          }
601      }      }
602      break;      break;
603    case CLOSE_WAIT:    case CLOSE_WAIT:
# Line 602  tcp_process(struct tcp_pcb *pcb) Line 614  tcp_process(struct tcp_pcb *pcb)
614      if (flags & TCP_FIN) {      if (flags & TCP_FIN) {
615        if (flags & TCP_ACK && ackno == pcb->snd_nxt) {        if (flags & TCP_ACK && ackno == pcb->snd_nxt) {
616          LWIP_DEBUGF(TCP_DEBUG,          LWIP_DEBUGF(TCP_DEBUG,
617           ("TCP connection closed %d -> %d.\n", inseg.tcphdr->src, inseg.tcphdr->dest));            ("TCP connection closed %d -> %d.\n", inseg.tcphdr->src, inseg.tcphdr->dest));
618    tcp_ack_now(pcb);          tcp_ack_now(pcb);
619    tcp_pcb_purge(pcb);          tcp_pcb_purge(pcb);
620    TCP_RMV(&tcp_active_pcbs, pcb);          TCP_RMV(&tcp_active_pcbs, pcb);
621    pcb->state = TIME_WAIT;          pcb->state = TIME_WAIT;
622    TCP_REG(&tcp_tw_pcbs, pcb);          TCP_REG(&tcp_tw_pcbs, pcb);
623        } else {        } else {
624    tcp_ack_now(pcb);          tcp_ack_now(pcb);
625    pcb->state = CLOSING;          pcb->state = CLOSING;
626        }        }
627      } else if (flags & TCP_ACK && ackno == pcb->snd_nxt) {      } else if (flags & TCP_ACK && ackno == pcb->snd_nxt) {
628        pcb->state = FIN_WAIT_2;        pcb->state = FIN_WAIT_2;
# Line 649  tcp_process(struct tcp_pcb *pcb) Line 661  tcp_process(struct tcp_pcb *pcb)
661    default:    default:
662      break;      break;
663    }    }
   
664    return ERR_OK;    return ERR_OK;
665  }  }
666    

Legend:
Removed from v.1.54  
changed lines
  Added in v.1.55

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