From 0065b4b2acc2269904cca32684c9499a9d4f891c Mon Sep 17 00:00:00 2001 From: sdemeesterde <samuel.demeester@student.uclouvain.be> Date: Mon, 21 Mar 2022 00:34:53 +0100 Subject: [PATCH] almost done --- headers/sender_utils.h | 2 +- log.tx | Bin 0 -> 3683 bytes log.txt | Bin 0 -> 3683 bytes src/sender.c | 2 ++ src/sender_utils.c | 12 ++++++------ 5 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 log.tx create mode 100644 log.txt diff --git a/headers/sender_utils.h b/headers/sender_utils.h index a723d24..e6b3359 100644 --- a/headers/sender_utils.h +++ b/headers/sender_utils.h @@ -30,7 +30,7 @@ typedef struct state { pkt_t *buffer[WINDOW_SIZE]; uint8_t head; // place last element insert +1 in the buffer (free place) uint8_t tail; // place oldest element insert in the buffer - uint8_t last_sent_seqnum; + uint8_t next_seqnum; uint8_t map_seqnum_to_buffer_place[SEQNUM_RANGE]; } sender_state_t; diff --git a/log.tx b/log.tx new file mode 100644 index 0000000000000000000000000000000000000000..bd306f91425c0a9be3415d5a8a4f3b700c4c5784 GIT binary patch literal 3683 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 literal 0 HcmV?d00001 diff --git a/log.txt b/log.txt new file mode 100644 index 0000000000000000000000000000000000000000..c46e8c3e7e45a68de72ac17adf3281936e3f1060 GIT binary patch literal 3683 zcma)<&2HOP5QU2ZUC3Q^S!6T2w1DAIf0S(?D4HK6L5m_t+*Obm5=GjoCDITny9W9$ zeTSmY(TC|1^gA=8CC3O-Tc)Wi@!T_KX3o9$!MkC)diU)4lV4xFw>No~FRt>nolk2k zs^zk}UX*7xU7u}MdD+y*RyWh8J}nl@yqvCbTh#Vlxmhm1-?!zWZu0VUajC)M<J*DD zYTan4KNyb258frKy$8EfzTIS5Ue^U6H#Vy_<=mReUcJ6bZ91Q?`N)nf;ph1Cmwofe zj{nzOSyh&K*5vo*Bg)TDB{u!r`G$wdWOzTeR?fLyPP2==x&MV{o7JTR9uE#}cGKjD zzOGh8u_zm|ko-O=ihPo%=`1S}n>JRjvq$STNvE4;v8)fW<Ni_N(9YUyoLe#=gpXgd zf%W?~C~P*e(V?YdOEbNCAM8u}V(0fS`^FyG-}cgSTk^X{sL8QeTG$}5(UA=%md<sb zg2$D&g}+ArHnqvX(j)6tX7<V++KT^E{?4r8cg|g5Yg-6-;J{GHE#>KKJHsRuMc^kx z=jz|l+mZEhD}mW>;jiFnR&&+3StH<~0~2OnPw2TLQJgrW2B8@6la{W4&*9ksaRbi{ z|EKU2__gzO;E@9Z2IGmx>mp2;0Z3*TxfGB_6OV^)_7*TZb3n68z$&JxEaPv<Xeq{H z2kuK+<;F>mN7RPtn%E%MY{}G<$2>lHZ;HCPYkFdD?8IK%0f2iXuYxsqNs_jV5fT6r z6N0p9+lgct33kz7T=V$C<xt|f2!3GnCBgta5wN0muI<zJib0wTwi)QHovmPA0Nd3= zg(#srz=sY@dOYNDR{&y9$-=m+4FwZXrPkYc=x@Ca3|$wLnUWWg6k>eT0!QTwk0hlo zOO#3%jIzjxivzIQz~EYNRgFXp4fm1-;Hhg&DFvIU3XS_#=^#DpDh^by#NL@}{2QfK zyUyZ#;hduY0iLxQN9t8{0FRXY&^4VodoMT5IncCdtQshRYN!Hfd%=jxZNq&n#+ftj zG#>Gs12d1XiT$?WI=XyB=c&A&0HZd!Mu6zKu3-S4J1|8|DMOblc+qO!8k)h?RppRB z&t-3gswIDC9=@7GjeHK<g{i>-&INquX_Dt$+d&ug&Il&d!Bjw>JE%nH?%jlnj<M(L zc80A2B+_FD?c)nD&OLo%86wmOA`_A{@`^sI7Pi^d5zN~1*s&k_SrUcb+_(uvuc`k! z1KQ(G(@bd|fZdO`-Qj(!z;|spQ$|w?BP!(3dP?0}S9a^fOT@^$I?e?gehk0c4hxGX zk(7ZqBH_bQ7RpNC9fS#m2g~G35|+W#U^>M})iwZ!AA74Q`>wQZyu+X_q$rqhYieU` zJ@s1ynA)Q=Ak~T15IHlz;m6^bT>ZK5o8eTbm}hj`ZDBCt$y?bB2(=1X!aBEgaU$UG zWB56CWNsAw=i<a9BYGPtqSf8#ySn%VaLJ+xentw#a3Em!WAe@mTgTmk=!mZNj!@S` z&O-Z;VvmM?P5Q+3nYTshX_MxP17P=KNgH<St-)LH&|!D|W3g&U;}ya1ek)%(XL&{6 z{a6@i>6O~vcUjz4BA<4}-FBWTp-W*DU>K+~c0b-F7t{$~BKRUFtM=tk`EwfqIP6Bs zUQi8M>6S<^Z`}jN?#H4VtpQR;of(wNSee~6Nw8LL$}Mb1YqNSyMyWl9Y?DnHjRJ7^ zF<_m{WDz{I2BqR+Z`;IICn5njRNezJqmtzp(Ii@&w1V{AkJ(v46hTl?R|+jq5h2DI zA(%)o$$JRb*jyD3yY$v5U@UPwdEv(}1H<t|mpnx&Q@E(%6~fLg)<Q~!s#vnxiQPH; z)Pc2I|0`buZ^YRBIC@JdBt7215x}kX!0RL5b)XEJLT#+BDX!AFhvu?Q?KLt1haVq$ z)pjXt`wXLqJtFZ$^1Mz+A$vC!n$`_<+qI|exhGE*vI2PEek|K^4C#PjdV4E?kj056 zGi{@@-1<my<50DOsG22-xPEOP>>vBq?jC5KR%N|eX;&Y+ejQ)z56d>|^(kBTt5c3t z^Xl3j+c4R;osm<{RveWcTkPiVo{~6y*^f_u`t%W^pM2&7Q6#J$pEyB`j&=_aN5#iS lhw<DBjuc}X(j<TG92MT%zxI`lKa${NvEo=&ZJGmz{SU`JHDCY$ literal 0 HcmV?d00001 diff --git a/src/sender.c b/src/sender.c index 7e908b9..d8751fd 100644 --- a/src/sender.c +++ b/src/sender.c @@ -126,6 +126,7 @@ int main(int argc, char **argv) { if (pfd->revents & POLLIN) { + DEBUG("The sender is reading from the socket"); ack_received_done = handle_returning_ack_nack(state, socket_fd); rvalue = loop_over_timers(state, socket_fd); if ((ack_received_done == -1) || (rvalue == -1)) @@ -138,6 +139,7 @@ int main(int argc, char **argv) { } else if ( !(sending_file_read_done) && (pfd->revents & POLLOUT) ) { + DEBUG("The sender will send a pkt on the socket"); sending_file_read_done = read_and_send(state, sending_fd, socket_fd); if (sending_file_read_done == -1) { diff --git a/src/sender_utils.c b/src/sender_utils.c index 1c7531e..e30695c 100644 --- a/src/sender_utils.c +++ b/src/sender_utils.c @@ -45,22 +45,22 @@ int handle_returning_ack_nack(sender_state_t *state, int socket_fd) return 0; } // From here we consider a valid ack - DEBUG("The ACK of: %d has been received", pkt_get_seqnum(pkt)); + DEBUG("The ACK with the seqnum: %d has been received", pkt_get_seqnum(pkt)); uint8_t place = state->map_seqnum_to_buffer_place[pkt_get_seqnum(pkt)]; pkt_del(state->buffer[place]); state->buffer[place] = NULL; + state->r_window_size = pkt_get_window(pkt); if (place == state->tail) { - for (uint8_t i = place; (state->buffer[i] == NULL) && place != state->head; i++) + for (uint8_t i = place; (state->buffer[i] == NULL) && i != state->head; i++) { state->tail++; state->s_window_size++; } - } pkt_del(pkt); - return 0; + return state->s_window_size == MAX_WINDOW_SIZE; } int loop_over_timers(sender_state_t *state, int socket_fd) @@ -98,7 +98,6 @@ int read_and_send(sender_state_t *state, int sending_fd, int socket_fd) if ((state->r_window_size == 0) || (state->s_window_size == 0)) return 0; state->s_window_size--; - state->last_sent_seqnum = (uint8_t) (((uint16_t) state->last_sent_seqnum) + 1) % SEQNUM_RANGE; // Careful we need to convert to uint16_t to avoid overflow pkt_t *pkt = pkt_new(); ssize_t nbr_byte_read = read(sending_fd, pkt->payload, MAX_PAYLOAD_SIZE); @@ -106,7 +105,7 @@ int read_and_send(sender_state_t *state, int sending_fd, int socket_fd) pkt_set_tr(pkt, 0); pkt_set_window(pkt, state->s_window_size); pkt_set_length(pkt, nbr_byte_read); - pkt_set_seqnum(pkt, state->last_sent_seqnum); + pkt_set_seqnum(pkt, state->next_seqnum); pkt_set_timestamp(pkt, 0); // We're free to use as we want // We set the TR to 0 in order to calculcate the CRC on the header @@ -134,6 +133,7 @@ int read_and_send(sender_state_t *state, int sending_fd, int socket_fd) state->map_seqnum_to_buffer_place[pkt_get_seqnum(pkt)] = state->head; state->head = (state->head + 1) % WINDOW_SIZE; + state->next_seqnum = (uint8_t) (((uint16_t) state->next_seqnum) + 1) % SEQNUM_RANGE; // Careful we need to convert to uint16_t to avoid overflow DEBUG("The pkt with seqnum: %d has been sent", pkt_get_seqnum(pkt)); // Checking if we're at the end of the file -- GitLab