/[pengfork]/pengfork/src/p3/ack.c
ViewVC logotype

Diff of /pengfork/src/p3/ack.c

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

revision 1.6 by chupa, Fri Nov 29 15:17:45 2002 UTC revision 1.7 by chupa, Sun Dec 1 01:19:07 2002 UTC
# Line 33  Line 33 
33    
34  int nack_sent;  int nack_sent;
35    
36  void  void
37  p3_ack( header )  p3_ack (header)
38       struct p3hdr *header;       struct p3hdr *header;
39  {  {
40    struct p3hdr *h;    struct p3hdr *h;
41    char *data;    char *data;
42    size_t data_size;    size_t data_size;
43    int i;    int i;
44      
45    nack_sent = 0;    nack_sent = 0;
46    if(header->type == TYPE_DATA)    if (header->type == TYPE_DATA)
47      {      {
48        srv.lastseq = header->seq;        srv.lastseq = header->seq;
49        if(p3_diff_seq(srv.lastseq,cli.lastack)>=8)        if (p3_diff_seq (srv.lastseq, cli.lastack) >= 8)
50          p3_put_packet(TYPE_ACK,NULL,0);          p3_put_packet (TYPE_ACK, NULL, 0);
51      }      }
52    if(srv.lastack != header->ack)    if (srv.lastack != header->ack)
53      {      {
54        srv.lastack = header->ack;        srv.lastack = header->ack;
55        for(i=0; i< wunack.used; i++)        for (i = 0; i < wunack.used; i++)
56          {          {
57          win_get(&wunack, i, &data, &data_size);            win_get (&wunack, i, &data, &data_size);
58          h=(struct p3hdr *) data;            h = (struct p3hdr *) data;
59          if(h->seq == srv.lastack)            if (h->seq == srv.lastack)
60            {              {
61              win_delete(&wunack, i+1);                win_delete (&wunack, i + 1);
62              debug(3,"P3 - %d packets acknowledged, remainder=%d\n",i+1,                debug (3, "P3 - %d packets acknowledged, remainder=%d\n", i + 1,
63                  wunack.used);                       wunack.used);
64              break;                break;
65            }              }
66          }          }
67      }      }
68  }  }
69    
70  void  void
71  p3_nack( header )  p3_nack (header)
72       struct p3hdr *header;       struct p3hdr *header;
73  {  {
74    /* TODO: Retransmit the unacknowledged window */    /* TODO: Retransmit the unacknowledged window */
# Line 76  p3_nack( header ) Line 76  p3_nack( header )
76  }  }
77    
78  void  void
79  p3_send_nack(header)  p3_send_nack (header)
80       struct p3hdr *header;       struct p3hdr *header;
81  {  {
82    if(header->type == TYPE_PING)    if (header->type == TYPE_PING)
83      {      {
84        p3_put_packet(TYPE_ACK,NULL,0);        p3_put_packet (TYPE_ACK, NULL, 0);
85        p3_put_packet(TYPE_NACK,NULL,0);        p3_put_packet (TYPE_NACK, NULL, 0);
86        nack_sent=1;        nack_sent = 1;
87      }      }
88    if(!nack_sent)    if (!nack_sent)
89      {      {
90        p3_put_packet(TYPE_NACK,NULL,0);        p3_put_packet (TYPE_NACK, NULL, 0);
91        nack_sent=1;              nack_sent = 1;
92      }      }
93  }  }

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

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