@@ -136,23 +136,29 @@ ssize_t gbn_recv(int sockfd, void *buf, size_t len, int flags){
136
136
printf ("INFO: DATA received successfully.\n" );
137
137
/* Receiver responds with DATAACK */
138
138
ack_packet -> type = DATAACK ;
139
-
140
139
printf ("INFO: Packet seqnum : %d State seqnum: %d\n" ,packet -> seqnum ,state .seqnum );
141
140
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
+ }
149
156
}else {
150
157
printf ("INFO: DATA packet has the incorrect sequence number.\n" );
151
- ack_packet -> type = DATAACK ;
152
158
ack_packet -> seqnum = state .seqnum ;
153
159
ack_packet -> checksum = 0 ;
154
160
is_seq = false;
155
- }
161
+ }
156
162
/* Sending ACK / duplicate ACK */
157
163
if (maybe_sendto (sockfd , ack_packet , sizeof (* ack_packet ), 0 , state .address , state .socklen ) == -1 ) {
158
164
printf ("ERROR: ACK sending failed.\n" );
0 commit comments