Skip to content

Commit 1b21644

Browse files
committed
TODO: fix checksum for last packet
1 parent 9e0bdf7 commit 1b21644

File tree

5 files changed

+16
-10
lines changed

5 files changed

+16
-10
lines changed

go-back-n/gbn.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -136,23 +136,29 @@ ssize_t gbn_recv(int sockfd, void *buf, size_t len, int flags){
136136
printf("INFO: DATA received successfully.\n");
137137
/* Receiver responds with DATAACK */
138138
ack_packet->type=DATAACK;
139-
140139
printf("INFO: Packet seqnum : %d State seqnum: %d\n",packet->seqnum,state.seqnum);
141140
if(state.seqnum == packet->seqnum){
142-
printf("INFO: Received DATA packet is in sequence.\n");
143-
memcpy(buf,packet->data,sizeof(packet->data));
144-
state.seqnum = packet->seqnum + 1;
145-
if (state.seqnum==N+1)state.seqnum=1;
146-
ack_packet->seqnum = state.seqnum;
147-
ack_packet->checksum = 0;
148-
is_seq = true;
141+
if(checksum_expected==checksum_actual){
142+
printf("INFO: Received DATA packet is in sequence.\n");
143+
memcpy(buf,packet->data,sizeof(packet->data));
144+
state.seqnum = packet->seqnum + 1;
145+
if (state.seqnum==N+1)state.seqnum=1;
146+
ack_packet->seqnum = state.seqnum;
147+
ack_packet->checksum = 0;
148+
is_seq = true;
149+
}
150+
else{
151+
printf("INFO: Checksum failed!\n");
152+
ack_packet->seqnum=state.seqnum;
153+
ack_packet->checksum=0;
154+
is_seq=false;
155+
}
149156
}else {
150157
printf("INFO: DATA packet has the incorrect sequence number.\n");
151-
ack_packet->type=DATAACK;
152158
ack_packet->seqnum = state.seqnum;
153159
ack_packet->checksum = 0;
154160
is_seq = false;
155-
}
161+
}
156162
/* Sending ACK / duplicate ACK */
157163
if (maybe_sendto(sockfd, ack_packet, sizeof(*ack_packet), 0, state.address, state.socklen) == -1) {
158164
printf("ERROR: ACK sending failed.\n");

go-back-n/gbn.o

144 Bytes
Binary file not shown.

go-back-n/r.test

-4.52 KB
Binary file not shown.

go-back-n/receiver

0 Bytes
Binary file not shown.

go-back-n/sender

4 KB
Binary file not shown.

0 commit comments

Comments
 (0)