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 */ |
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 |
} |
} |