From f875ee53593e0dd6e515aa3796471df331310664 Mon Sep 17 00:00:00 2001 From: Barnavon Jules-Ian Date: Wed, 19 Apr 2023 18:22:27 +0200 Subject: [PATCH] =?UTF-8?q?Syn=20ack=20pas=20bien=20re=C3=A7u=20r=C3=A9sul?= =?UTF-8?q?tat=20change=20d'une=20execution=20a=20l'autre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/api/mictcp_core.o | Bin 26888 -> 26752 bytes build/client | Bin 52072 -> 52360 bytes build/gateway | Bin 64368 -> 68752 bytes build/mictcp.o | Bin 37072 -> 39208 bytes build/server | Bin 52032 -> 52312 bytes src/api/mictcp_core.c | 2 +- src/mictcp.c | 207 ++++++++++++++++++++++++++-------------- 7 files changed, 137 insertions(+), 72 deletions(-) diff --git a/build/api/mictcp_core.o b/build/api/mictcp_core.o index 0f2dc91adf30a5839b25b32bc675d3087d2ea11c..9a5e3e6ca34dca85f59d2d50d4bc2692d81c0b2c 100644 GIT binary patch delta 1879 zcmZ`(U1%It6rM9lwwpA`W<&HcAk>Y;BvrcIq}gqh?CfTftf8f~4-#VA>`#80=!4xp zSSwW;D*m8Qw;zb5QZkYkp)bpZ+6s%b1VsefC`F_ZoChnBh~%MAu@KLlox#gOFWhhL zobR0PoH;Xd-v5!#uF}Wdq!oM8G+r$1rtae6HGP1vMx8iAhuXf;H0{F%2JPH~t-w29 z;x2tvUe;gpW9Rn2Xr&U!L4?SFd}_Un(a$H=400JRGoe zRv2k*dsk1j`073_p9}ZblZESjf6yIRd(#oefqgE>RJ@2Ztz9E+qrQ5duU@pEYoCJA zAErKx^`D}HxX~|+D^8V~=6SyEdbVPdeFB(|rfCVKXqZ}IM>Cu~852~&L@aFhnyT{8 zx>;W3a%J}3vK9NGF`u8B25Ztl? z<5`Ku1;tbL(5q?*RzgH>xvac&E9^bRzEiO`A(9mI6o@h5;9HL6vUA>$X!v~`z)MP~ zv2hfc-S4up@($i!J^U7!T~K0s6}E^?W|x#$`7F!45mREvkxU6Z7;46W zR5QJa0{dQ6d_#)w_pnl8?Dt3H`BRA+P@?`(?CQI101XR@Ai{V+qH)rFTv?-<_cU_M zzOArPMZbt5D=a#A)xnDNr<+*iXZg;Jk{uOF)DH-a2zuyv5)O~>_tMBTFR%CBZ`y(d zX1iQg*0zhc*ZX}avCg3Mp_gE@XQoEyq!i^f?dW`<=nS&e)AbYlWU#N0Yr|SqA7fFOj-seGjs(PC)4~>+mmU1qaM35yLmKDWPax0NH$Hs;B@wH z!yB<#u0Sr?O}YE9kQ0VCXcyTcm&YDNiCJ&B{^oH1vphxqK&vcCHk()Nj z56eND@isy;rvAn#@-uOofi+`N3v9*{2+f*}gFC9>!2E1XU(Dk3**M48vnIDMblju{ g<;xvMPEbb4JHH~pDTUNq98vd$gnoa&8#2+zE$HE^ZV&=K8@5K`mPIAw? zoX@%6d)|GwhjRs(`5rz9z)Ysjgz?N+1DKilt7YAwY1b++tNZW`h*$oiY1(@(a@zUL z2YcWCktR0XfCapy*XAzjuew3QQqNsj%iZ_*D#8?@9OP)%1XY@^#+?uA&;5H-(UkLn@pN7HVNsmHrKR4 zRRfuq>f5J*HjV2|K{$#2<_S4!=L{56w3MB*jM-)Z_4r-$1T{T69kWya3P&f#+m<$Vu7%b*)$5g`+*VlwqOL}Tkg(azu$(bsKSO5_Pf z$1xibFk>lP*g@f33uQ6J~^nbOetAs*iYWF8;IJMQF*ATLi(Ey{f7$th2 z(Ibp*;TX{aN|H=Ho}%F>AHfBp#~D4!=qMHp0iRhui_j|M63eV-nSWu3sLTF@DyfFi zI!v|-Xu}Nogylc6A~)1rddeu3Os(?MaB4e@>qPr)st&G#(bMRU3OUZ!h8Ug47||MeLB2hrOmWG$mjY}HE` zCECMi3!^EEo@P4=Mqk5)HUZ;UAV00VoMSpqv&^dq?Lz*+bSjCeN|lvj>;=(P?zaD; z$1^mX_j;7Y`K_zjA$|fg?E=nNK7)%i|48Y>r?^h@E9j^BP0Qc1{EDJ-m8tRFf5$1R z?JlFwvDzN9fBfoO>|^nRc3i#T^DKTCS84a780`?yiQWz&UuFvG4y0))>r*-MO{P;v zQRhtF!ZA`fZ|Qu23zYfQHl4GU3bk34({+nceh+=Si)pHUwfp<_s>kiPs=t+nvu`7Y zI)$8Mw4Ko#xn$>yKI)Fyo*=|fDw&tEO>`XoG!oTes1ATp+q(-;T4}XdVkh zSM0ODzKzx*3u&vI)UUCM<9g8*xoOohw4pDh+epE?zW8oZq{TmcWoaB*Zm9vcck z0OLaj+{3vcL)T2aGZcY$P^Jw!);Rf1oJ$+!{nbU84{UyJvK18@xGhyf=sK4R#tN&I*u0;ljcg}z03$|%nd7NwRjnXdj1?O{!R diff --git a/build/client b/build/client index 0af511eb992bd2d6a672c75e09a8d13a21468631..d72886ac0e4b34eeb33525909d664267b406fcd9 100755 GIT binary patch delta 12946 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 diff --git a/build/gateway b/build/gateway index a70a40822f035390975dbbdaeea1c5af8d0a7c1b..4f11008ac3b07cb2a6f62b5fdaba83a4185303fe 100755 GIT binary patch delta 19069 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 Xg4XF37mZfc}ptBr+N(?~(@Ev&3- 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 diff --git a/build/mictcp.o b/build/mictcp.o index 158d68c34cacef986ab605f07338d3fed51a7820..ecfabbd7b3265d7b4c14d9395a9eb9246c9edee9 100644 GIT binary patch literal 39208 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 Qf9gI(ITB~88#Dj^1_S2$Z~y=R literal 37072 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 Ijh_F%0ZdPoC;$Ke diff --git a/build/server b/build/server index 811d1122cd37f4b10e965fbab80cf41c7e5719e1..ebe03b3c90d522f3ded9114a93cc232e8419e527 100755 GIT binary patch delta 13089 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 delta 11231 zcmai43shBA`akDf4sW;@fy)~%Z$#xGf}ld6T)ezeM=2#MF=f;=QNgUqu7xz+ZaCs@ z%4w{eYFfQh$rqYnmZI7CHhW{GUek)Q2bOjJzi;nzpqN?ff7arBd;h-Y{`R*Y=jxgD zhOS2qYtxkCH`~%b@jW+O;?KF^Y>1rU6K)jUa8@plmXEUgn1*eS)hg@S?=c)UC=ZWqukgC;Z+tXOl5DL3ahw!B%d8>aXDwGG zse|n8K||`Km#gzPx7(qN9vZ_qm&VcewFfoXF;fj)?mcKzeMgY9*RBhgt=) zM?i%SvaO*dvM2i~G`(;-1UpP%=*$ns$dc>SHMhI|fO;5hMe2NI6nw5D$f3Rg$ktl; z@=!pZvL17Syq4W(4lX_i6HayM42gmbd&s|HdI>q+G16`q^WHqU{GpNG8b#LsTGQ*E72{^h3R=9P!# zrZ~v26!LYylV3sd&v5yhSzB1J?8E*YHcXCT$HJqc8^XhjO<$6?|e|D4BN8KP$&SO?3$@-3sy$n4lZljNHX<@w`J#_iMvhf3^sxscOauY2l51~iyB%u6?PofKBv{? zuzqjcuFjn%NyhD6SB&ZStL^&EXbR{}lBDm9x9qJqrgfvQx_E!aUe}%MKve9ozEQt( z@C!P+1NV<)`uj`%D6I>LD2wZvDLOOb7KpeU2=P*|tu=Qtdf*=@dnP)2oJ_dW+GleXhhx~Fe?pQ>(0(lk+O=Gp*gWrkKkx+gQ5xOfv!LiC zuTBfH;L2fRVnX}Y zl5$vk1Pqe_Bp=2m#>RVHiAS^d3R@hTm{I4C;F{mET-pGc{lwUL1=(D4#Tff@jm>e+ z(O2)VUNdgDUc=HZW?ivGes@A@2Mx;gHuH(Al_S}lxCz)So{uY&JJ~mJnbA*Kz#Q|P z+r0yOhjcLkZ&=?+Xc8M^85+HXnm>H23w#VI2plH#Q)ag$MDynMeu1Ziz}F=3FZPBd z+#U|=Q2CaSdmwk9 zpnqKd&%d7eyf{3LC>d*kfbe$&E>yGK38``i`ywGzUc*8X)0DbuW=gSmO^<`?aiMH(V*1!0V|AmW zUyy;9!hhcm$Bsq4V=vY9`I1GFH4tdVAEX* zhcCh$mUGaay8#1S4bQIZFly(10s%l_&~uH4Gqm3!ogdNWI`;^j*`)I;l13x+CvooE zqp5}6o){5T>{$7c&2h};=(Rb1wmA+V^IbMaO}Eqf5zEdBi#SYf`1V`VZF7_cdfOb+ z0!_rNOAqsV9o+pM3MPT~jrXE&-0q=Z8DTLBY~BF&nTCxnBW#<8V%*c^uzqpC>Y~GX zzxA@b-};rb-}<#=J7Dca{L%qy9}(1;x2B6rg)t?5*7j%&>m{U?YQf!v6TjEpihH#dm$EZFb5oYrn$*$2T86ZO<(w;SvHFg9$?In&Q+0Y|tB_S}mL!^8?^$&2%g zql(7XL9Ani;Q{4*y6F0$#g%XZ5K`Mg7`J&tzs)Z$={CcRj|;KpKBdX}dq1nn$xpy^ zDqPy4QZ&1jnYw~UW2{qMV&i9N3ZleF4@P06hrYx`Cmab}%g6SIm5J#+Y;!bq@fkf# zbC&!rEQk_lG{eOGWTFWsI%NdzdWnb1C5``rcAcyg zc8=yQ-#r)zKgnK0eLw|EeJo#ujZ{PzkASOri3)-imYo+t>a;SRTOTAt;~PH(B-UyZ zR>45rZ4C*X!>#R6LUZR*Vk(34qu+ z)?Xm^w5dJqM>|K8*A7}8mu~E&!_{@r#oow>9sU+fxgLQi!otCgds8u%=6l$|UAZV# z+#X=QgM=1eU|yLy*^f}W+Fx4~t%Yl-p9}*BtS4bty5!MpJt;fY@m5JHu%28wjK$|f zrc6N3xIIL{S{YJb@MhC~r|K^Rn&@&;Mn>K_&z{Omi#%7VrOMOTvJ8s=>@Z?G&a<I1j|(w1znLl8)C8 z07X(FmCh2Li5E&(Va_n+z7qDg+&C7H9m_YP< zC{KRiX?e=P**j>LtS8L{7!FywSgQ_<%Z9M^ag9TpkLyNQ7u$xhWe7m{wvdHi&hqKa zF6LoJ74xvKT=$2tAG?miE?s=SKkPajy)N@v)b$^??jan-gvuI3&d?KkJ5!(h44la9xH@@#4h7X zq);-!)JuIgTsiT@$**i|QC?6$J`9PS(b%$%)#b%Rj|3uS<*3sdUhrmPJ^VdN<~Dtd zu)|_o`9^(gEP~QDYIxuq^)QjW$f3`Gsg3N?pT*QS-Ac8%x~u6%&{)t(bQ_>LP-c#$ z%UR{O`0#U$ru#1L0+*zee6j+NIC$9c%?fH&OYKIVyd1yd`4VF1L|yW}Hg%}-Yj zj$upkll-0;!(*Ws`R(xTF>H5!j8Zv1b~Zms z*;2qBELf_%_#wMikYQJlU*Rk3L)<%1(Z+4!-VxT%F$+$t&hhK#T>F6QMC%-PfNt$G z;%v8?^jpl8eonXG4B;F*#($}w^(t7j_0U(q<$iQMN5eTfAbUSY(>U7OFS}5nD7R=T zXH+v6INL8!2?74``WYbCy8-X>jDJm?z3;R4W0EMMF6uI3IjzsrSKMFGc3Mr`*8YB5 zXSuR^3;?bWo3PElBbqzVJRq7~Xud6)-2>=RG`j_QWaICz&35N+{ zdL6i!sM~p9HQ`RHg>$y{bEbfUq$lY~AJ7>sbkdyGtU=adgw7~kr|t$ENWzhUSlg`m zbQPu${?YH~;u+2<&^eFybB=%m(N#FDTvO3rixkoqnuq>{w&o1mF)kx7kmQ^-J@gv| z*{tt(74 zJ@^rvV3)g;Gr&upsjGN2`F8SU=LwHa^^sBhidBxz#WEI9lxUufL5NJ`y{BJ7uf500 zii+aSLl`@Sahrq`$kx7Q>ovJ~&nC*8%`3c}g0qLh)wIEg++OKz-cEgYLA zNhLRwJ5HC>lskSXnO5SshR>-H!vRmN8u}}39j?VESlo4I+j}RiRh}+31kSx<`QrJO zIZc)Z{EcCG6RepOu{3q@ZMV;Dv@C0^Yn*EtV@aMf+%k2>^_HpD>!(=?(e;%Y=P#PO zxT#TM>7_&2N2LWpbLKB=SXg(LrGEY$^Owz=JIBI8tnmT+Hd+>@*3DTuciFPJW7sHb zk!f;i4YyS?q0+K+?rlwM`-IrQ$#74=7z=$Uv%i;4WPi2JVs2}E5W#ciT1x90>$tpy zWtD}q=f+#w>&xaSA<4@ub&ZyV^Y56;!{X7iuWh&3pFiMsKZp(N`GaovCeR(A-PC`_ z?QQ^VJM4D%fKEArpA&Gveh!M8leFQO+g%L$8|W<1naADkRiJx7H-ZMAaJ#!eJ3)I0 zKM8$oz%8es4?5+v+da-8*`-Bj%mlCv^d8X9KsSI+!(8tMZ3OKBHDMJ z4U0i5QCzc#;>217`ZcZ$8$qA^3;}>f;{x6T`VpvvD@+PLBrKqtK#SE<7{Vv?EC3bw zu380p7?e$(5 zFeSrK0|U_|$a-}Cn3~TqMKreq{Ga-x9}avUHv4D(FuKS4`BmVTeaybBj!ig?Q}$je z?EWM)`RZ;ShS(?Yz$fr0 zEND`gGW;u+J}FYMeZ|Tq#VYH*V)c^}l#O4phbEP&-6#yT{p_S}|8;>U*$XpoRL+cR zS8g6+P-KajXIbUX*_4-qS(oAwIUK<$(%&(U-e^hEW&Gwt&jy)oR?HgPA0G{Z{b0Oc zpNb?lJ25L>{=EH%SzCSN8SJG6sd%4QFnfeFg;Fa?k-pH91O19oV?G9pj=l-5Yz%sc zqg`zF?ZadfTXTDZ(mQ$G!Vo!)g)Y3#T&zh)%_ZqtSzQT(huMOKC2}o$d0~#6!Fm=( z%IDZG3k&6gtYA@&{3~0uXqlYH&MqpEN3+B`CgGRhWp~^H9{&XF?BytofkX)lPA|=ZLutQ!*SiLLCIlt(wdXa<=Bt8sTUcjG*j%)MOn1Q&f5 zh`~G;h=(}`h-zkNdz!Za_mUJc5fowYrHg0&y^A7K&<_vFFkJ-@UOz_)%JQNtOFpw% z=e?0~3j5&R*D3?}a@TWmCF-Z!>W|DO$}rpd0GUWqxg%&9a3@|q=>PIMNSUyB)f(#wr5qW zeHK|s_1lH5&d1Q8*TYNXG%ZNw)l;n5i%Nx_Jk&IaqpLJDdLf|}#WMr9bb7=Y2W$ha z%9vj4bzl#pj?y+S#z+n=O8!=eDsA>TlBc&B7GnQFv4twU1mD7Cot_1Pz?6$j(cK0j zp_D(RZD!oErbU=Q#Z&a>Sx#$e*q!+kH(!#&6kow!C`s`jkq?vN`LHIKkAs9i@`f~w zIA${q+oS})29RQXTl6i$!W=1KCjoBRdm;p0#VwwmPXs}b3&BmSTl!}bi6RlDZF2lO8l)0&t08vEY1C`Ki{o;(mOUxqAjNP{>?&!R z4XtVr=6VX#UM*x2s7EQED*EF@e-_e38Hf!9TkaI5p3D>BJR}HA9Vb(~Iyz;uKHaeo zQ21Mg&NNM@qF=`o_t2Od?3Bf=14;=`kkZpa=@HyD>FMHc;2WyB66riGhiQ(IC4_u4 z7(Rx1HcirhHyVWTR0c?1q!_=N#^xt`nuiH7ED2G6@`fAnQ6>`VC#UKO#?PMTO)(XBf<&tLT4mu_AxZoveA_>LGMqy>LD8O9VC<@RfrEJU)((5pt+FkQ=c#LXn}vzC`R5hj?Ie+m8y zLbT-gY>)<@4S>e0qA1K;7C?cayIU9^JlF5f;C6kcka*j0lcry@Lm5XxnWU(RHMV zm9)v8HkO=sWKnpAwjK7Nd|m7d)bbx;z}6}s(PFETQlBGnr*N30?LYh)#64~$k31dD z2r=NQG+qbJ9K8&LgSEN?DfKfNLIbzBK2Z#T-@CX$A0$HC0TroGQpXjHBP0YYa7)@V>eZDwu1>Xv1{w~@yeg1jE%7RH46CQC0Gb>lOk9d%I z%B+3wnhzDP0Pk1SQ11`gpK8mX>&1WmewQ5AZhLf(?5q34foNKPXHdSRc*yswQAE7I zQade^Fn%7kEbl9FszeV`Wa z-K2Vgdeo{ZiZw*_L)$P@^*Lx*-l2Njs`{kBSgx7?MU_~!yVP+{s}V}V5H-J24I?_d zQVms-hZL$oO_h~ua8Z#-etLl@gZv9O09&+=4|8q;pp`S`Bv;bQP{L@Lx85aoU~ zj|c_H)RbLnrji`2CXQ3DQxZefXf|d;%ym^ws$sPH$UW5+k8$PMi3rnqeVnwO<{cmWziB$IShyY1mF$e*1W?qubgC(_-2 z-R2B@EbQH!Dz~zWn=|F7S;Usnaxt5-B}{oFmo3Y z*0Ag^ArquTNZx~VeZ*$$jCmZoJ)&%jO=v^_3pg@)>*dXANB53?W9Y~@7>yhdZcui=9)yq|0M z;LoH!4IlhD;eihT6JiPctXtzDKo`;}lxj{eUb_XIBq)Di=~%$Dur>|o>)03jfA2_@ AegFUf diff --git a/src/api/mictcp_core.c b/src/api/mictcp_core.c index e0fa4d8..2ef40a9 100644 --- a/src/api/mictcp_core.c +++ b/src/api/mictcp_core.c @@ -81,7 +81,7 @@ int initialize_components(start_mode mode) local_addr.sin_port = htons(API_SC_Port); local_addr.sin_addr.s_addr = htonl(INADDR_ANY); bnd = bind(sys_socket, (struct sockaddr *) &local_addr, sizeof(local_addr)); - pthread_create (&listen_th, NULL, listening, "1"); + //pthread_create (&listen_th, NULL, listening, "1");//ligne rajoutée a enlever } } diff --git a/src/mictcp.c b/src/mictcp.c index b01a455..fc6c4c8 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -1,9 +1,9 @@ #include #include #define NBR_SOCKETS 1024 -#define TIMEOUT_DEFAUT 1 +#define TIMEOUT_DEFAUT 1000 #define WINDOW_SIZE 10 -#define LOSS_ACCEPTABILITY 10 // sur 10 +#define LOSS_ACCEPTABILITY 0 // sur 10 //================================== STRUCTURES ============================= @@ -36,6 +36,7 @@ typedef struct static int socket_desc = 0; static enhanced_socket tab_sockets[NBR_SOCKETS]; int timeout = TIMEOUT_DEFAUT; +int established = 0; pthread_t attente_ack_tid; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t end_accept_cond = PTHREAD_COND_INITIALIZER; @@ -115,14 +116,15 @@ int mic_tcp_accept(int socket, mic_tcp_sock_addr *addr) printf(__FUNCTION__); printf("\n"); - if (valid_socket(socket) && tab_sockets[socket].socket.state == WAITING) + if (valid_socket(socket)) { tab_sockets[socket].socket.state = ACCEPTING; - while (tab_sockets[socket].socket.state != ESTABLISHED){ + while (tab_sockets[socket].socket.state != ESTABLISHED){ //attente jusqu'a l'etablissement de la connexion if(pthread_mutex_lock(&mutex)!= 0){error("erreur lock mutex",__LINE__);} //lock mutex pthread_cond_wait(&end_accept_cond,&mutex); if(pthread_mutex_unlock(&mutex)!= 0){error("erreur unlock mutex",__LINE__);} //unlock mutex } + display_enhanced_socket(tab_sockets[socket], "État du socket aprés la connection :"); return 0; } @@ -160,22 +162,56 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) IP_send(pdu, tab_sockets[socket].dist_addr); tab_sockets[socket].socket.state = SYN_SENT; + + mic_tcp_pdu pdu_r; + mic_tcp_sock_addr addr_r; while (1) { - printf("Socket state : %d, SYN SENT = %d\n",tab_sockets[socket].socket.state,SYN_SENT ); - if (tab_sockets[socket].socket.state == SYN_SENT) - { + sleep(timeout); + if (IP_recv(&pdu_r,&addr_r, timeout) == -1){ IP_send(pdu, tab_sockets[socket].dist_addr); + printf("j'envoie un doublon du syn\n"); + continue; } - else if (tab_sockets[socket].socket.state == ESTABLISHED) - { + display_mic_tcp_pdu(pdu_r,"pdu reçu :"); + + if (pdu_r.header.ack == 1 && pdu_r.header.syn == 1){ + printf("Bon PDU SYN ACK recu \n"); + + tab_sockets[socket].NoSeqDist = pdu.header.seq_num; // récupérer n° de seq du client + + + pdu.header.source_port = tab_sockets[socket].socket.addr.port; + pdu.header.dest_port = tab_sockets[socket].dist_addr.port; + pdu.header.seq_num = -1; + pdu.header.ack_num = tab_sockets[socket].NoSeqDist; + pdu.header.syn = 0; + pdu.header.ack = 1; + pdu.header.fin = 0; + pdu.payload.size = 0; + pdu.payload.data = NULL; + + IP_send(pdu, tab_sockets[socket].dist_addr); + + + printf("PDU ACK de connexion envoyé\n"); + display_mic_tcp_sock_addr(tab_sockets[socket].dist_addr, "à l'adresse:"); + display_mic_tcp_pdu(pdu, "Pdu ACK : \n"); + + mic_tcp_pdu* args = malloc(sizeof(mic_tcp_pdu)); + args->header=pdu.header; + args->payload=pdu.payload; + + tab_sockets[socket].socket.state = ESTABLISHED; + break; } - sleep(timeout); - printf("timeout\n"); + + } + display_enhanced_socket(tab_sockets[socket], "État du socket aprés l'établissement de la connection :"); return 0; } @@ -204,29 +240,59 @@ int mic_tcp_send(int mic_sock, char *mesg, int mesg_size) pdu.payload.data = mesg; pdu.payload.size = mesg_size; - int sent_size =IP_send(pdu, tab_sockets[mic_sock].dist_addr); - tab_sockets[mic_sock].NoSeqLoc = (tab_sockets[mic_sock].NoSeqLoc + 1) % 2; - - addValueCircularBuff(&tab_sockets[mic_sock].buffer,0); - if (accept_loss(mic_sock)) - { - return sent_size; - } + int sent_size = IP_send(pdu, tab_sockets[mic_sock].dist_addr); tab_sockets[mic_sock].socket.state = WAITING; + mic_tcp_pdu pdu_r; + mic_tcp_sock_addr addr_r; + while (1) { - sleep(timeout); - if (tab_sockets[mic_sock].socket.state == WAITING) - { + if (IP_recv(&pdu_r,&addr_r, timeout) == -1){ sent_size = IP_send(pdu, tab_sockets[mic_sock].dist_addr); + printf("j'envoie un doublon\n"); + continue; } - else if (tab_sockets[mic_sock].socket.state == ESTABLISHED) - { + printf("PDU ACK de Data recu \n"); + display_mic_tcp_pdu(pdu_r,"pdu reçu :"); + + if (pdu_r.header.ack == 1 && (tab_sockets[mic_sock].NoSeqLoc == pdu_r.header.ack_num)){ + printf("le bon Ack a été reçu\n"); + if(!established){ //stoppe le thread de syn ack quand on est sûrs que la connexion est établie + established = 1; + } + tab_sockets[mic_sock].socket.state = ESTABLISHED; break; + }else if(pdu_r.header.ack == 1 && pdu_r.header.syn == 1){ + printf("PDU SYN ACK recu a nouveau (Doublon) \n"); + mic_tcp_pdu pdu_d; + + pdu_d.header.source_port = tab_sockets[mic_sock].socket.addr.port; + pdu_d.header.dest_port = tab_sockets[mic_sock].dist_addr.port; + pdu_d.header.seq_num = -1; + pdu_d.header.ack_num = tab_sockets[mic_sock].NoSeqDist; + pdu_d.header.syn = 0; + pdu_d.header.ack = 1; + pdu_d.header.fin = 0; + + pdu_d.payload.size = 0; + pdu_d.payload.data = NULL; + + IP_send(pdu_d, tab_sockets[mic_sock].dist_addr); + printf("PDU ACK de connexion renvoyé\n"); + + display_mic_tcp_pdu(pdu_d, "Pdu ACK : \n"); } + + + // si ACK de bon numéro de séquence + // addValueCircularBuff(&tab_sockets[mic_sock].buffer,1); // PDU bien reçu + //update seq num ? + // tab_sockets[mic_sock].socket.state = ESTABLISHED; + } + tab_sockets[mic_sock].NoSeqLoc = (tab_sockets[mic_sock].NoSeqLoc + 1) % 2; //maj du no de seq uniquement lorsque ACK reçu (= synchronisation du noseq entre puits et src) return sent_size; } @@ -270,7 +336,6 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) //addr = adre int mic_sock; display_mic_tcp_pdu(pdu, "pdu reçu"); - printf("display finished \n"); for (mic_sock = 0; (mic_sock < socket_desc) && !(tab_sockets[mic_sock].socket.addr.port==pdu.header.dest_port); mic_sock++) ; // trouver le socket destinataire @@ -316,55 +381,31 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) //addr = adre } - else if (pdu.header.ack == 1 && pdu.header.syn == 1 && tab_sockets[mic_sock].socket.state == SYN_SENT) - { // si SYN ACK reçu envoyer ACK + else if (pdu.header.syn == 1 && tab_sockets[mic_sock].socket.state == SYN_RECEIVED) // si Doublon PDU SYN + { + printf("Doublon PDU SYN recu\n"); + // mic_tcp_pdu pdu_r; - printf("PDU SYN ACK recu\n"); - tab_sockets[mic_sock].socket.state = ESTABLISHED; - tab_sockets[mic_sock].NoSeqDist = pdu.header.seq_num; // récupérer n° de seq du client - mic_tcp_pdu pdu_r; + // tab_sockets[mic_sock].NoSeqDist = pdu.header.seq_num; + // tab_sockets[mic_sock].dist_addr = addr; + // pdu_r.header.source_port = tab_sockets[mic_sock].socket.addr.port; + // pdu_r.header.dest_port = tab_sockets[mic_sock].dist_addr.port; + // pdu_r.header.seq_num = tab_sockets[mic_sock].NoSeqLoc; + // pdu_r.header.ack_num = tab_sockets[mic_sock].NoSeqDist; + // pdu_r.header.syn = 1; + // pdu_r.header.ack = 1; + // pdu_r.header.fin = 0; - pdu_r.header.source_port = tab_sockets[mic_sock].socket.addr.port; - pdu_r.header.dest_port = tab_sockets[mic_sock].dist_addr.port; - pdu_r.header.seq_num = -1; - pdu_r.header.ack_num = tab_sockets[mic_sock].NoSeqDist; - pdu_r.header.syn = 0; - pdu_r.header.ack = 1; - pdu_r.header.fin = 0; - - pdu_r.payload.size = 0; - pdu_r.payload.data = NULL; - - IP_send(pdu_r, tab_sockets[mic_sock].dist_addr); + // pdu_r.payload.size = 0; + // pdu_r.payload.data = NULL; + + // display_mic_tcp_sock_addr(tab_sockets[mic_sock].dist_addr, "à l'adresse:"); + // IP_send(pdu_r, tab_sockets[mic_sock].dist_addr); - printf("PDU ACK de connexion envoyé\n"); - display_mic_tcp_sock_addr(tab_sockets[mic_sock].dist_addr, "à l'adresse:"); - display_mic_tcp_pdu(pdu_r, "Pdu ACK : \n"); + // display_mic_tcp_pdu(pdu_r, "Pdu SYN ACK : \n"); - } - else if (pdu.header.ack == 1 && pdu.header.syn == 1 && tab_sockets[mic_sock].socket.state == ESTABLISHED) - { // si SYN ACK reçu à nouveau renvoyer ACK - printf("PDU SYN ACK recu a nouveau (Doublon) \n"); - mic_tcp_pdu pdu_r; - - pdu_r.header.source_port = tab_sockets[mic_sock].socket.addr.port; - pdu_r.header.dest_port = tab_sockets[mic_sock].dist_addr.port; - pdu_r.header.seq_num = -1; - pdu_r.header.ack_num = tab_sockets[mic_sock].NoSeqDist; - pdu_r.header.syn = 0; - pdu_r.header.ack = 1; - pdu_r.header.fin = 0; - - pdu_r.payload.size = 0; - pdu_r.payload.data = NULL; - - IP_send(pdu_r, tab_sockets[mic_sock].dist_addr); - printf("PDU ACK de connexion renvoyé\n"); - - display_mic_tcp_pdu(pdu_r, "Pdu ACK : \n"); - } else if(pdu.header.ack == 0 && pdu.header.seq_num == tab_sockets[mic_sock].NoSeqDist && tab_sockets[mic_sock].socket.state == ESTABLISHED) { // Si PDU de DATA @@ -378,7 +419,7 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) //addr = adre pdu_r.header.ack = 1; pdu_r.header.fin = 0; pdu_r.payload.size =0; - tab_sockets[mic_sock].NoSeqDist = (tab_sockets[mic_sock].NoSeqDist) + 1 % 2; //update n° seq distant + tab_sockets[mic_sock].NoSeqDist = ((tab_sockets[mic_sock].NoSeqDist) + 1) % 2; //update n° seq distant display_mic_tcp_pdu(pdu_r,"pdu ack créé :"); display_mic_tcp_sock_addr(tab_sockets[mic_sock].dist_addr, "adresse de destination :"); IP_send(pdu_r, tab_sockets[mic_sock].dist_addr); @@ -387,6 +428,24 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) //addr = adre app_buffer_put(pdu.payload); // envoyer la data dans le buffer printf("data in the buffer\n"); } + else if(pdu.header.ack == 0 && pdu.header.seq_num != tab_sockets[mic_sock].NoSeqDist && tab_sockets[mic_sock].socket.state == ESTABLISHED) + { // Si Doublon PDU de DATA + printf("PDU data recu (Doublon)\n"); + mic_tcp_pdu pdu_r; + pdu_r.header.source_port = tab_sockets[mic_sock].socket.addr.port; + pdu_r.header.dest_port = tab_sockets[mic_sock].dist_addr.port; + pdu_r.header.seq_num = -1; + pdu_r.header.ack_num = tab_sockets[mic_sock].NoSeqDist; + pdu_r.header.syn = 0; + pdu_r.header.ack = 1; + pdu_r.header.fin = 0; + pdu_r.payload.size =0; + display_mic_tcp_pdu(pdu_r,"pdu ack créé :"); + display_mic_tcp_sock_addr(tab_sockets[mic_sock].dist_addr, "adresse de destination :"); + IP_send(pdu_r, tab_sockets[mic_sock].dist_addr); + printf("pdu ack envoyé\n"); + + } else if (pdu.header.ack == 1 && tab_sockets[mic_sock].socket.state == SYN_RECEIVED) { // Si ACK de connection reçu @@ -402,10 +461,13 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) //addr = adre { // si ACK de bon numéro de séquence printf("PDU ACK de Data recu \n"); - addValueCircularBuff(&tab_sockets[mic_sock].buffer,1); // PDU bien reçu + // addValueCircularBuff(&tab_sockets[mic_sock].buffer,1); // PDU bien reçu + //update seq num ? tab_sockets[mic_sock].socket.state = ESTABLISHED; } - else if (pdu.header.ack ==0 && pdu.header.syn == 0 && pdu.header.fin ==0){ + else{ + + printf("PDU inattendu recu :\n"); display_enhanced_socket(tab_sockets[mic_sock], "l'état du socket"); } } @@ -508,6 +570,8 @@ void display_mic_tcp_sock_addr(mic_tcp_sock_addr addr, char* prefix) { printf("Port: %hu\n", addr.port); } + + void * attente_ack(void * arg) { printf("début thread d'envoi de SYN ACK'\n"); arg_thread* args = (arg_thread*)arg; @@ -516,6 +580,7 @@ void * attente_ack(void * arg) { if (tab_sockets[args->socket].socket.state == SYN_RECEIVED) { IP_send(args->pdu_r, tab_sockets[args->socket].dist_addr); + printf("je renvoie le Syn ack\n"); } else if (tab_sockets[args->socket].socket.state == ESTABLISHED) {