From ed8e10c6404b61f1a6ba0edeb9e879931fcdde14 Mon Sep 17 00:00:00 2001 From: aittaleb Date: Mon, 8 May 2023 07:28:22 +0100 Subject: [PATCH] en train de mettre en place la recuperation assynchrone des ack --- build/api/mictcp_core.o | Bin 22400 -> 22520 bytes build/client | Bin 55008 -> 55168 bytes build/gateway | Bin 68144 -> 68304 bytes build/mictcp.o | Bin 35512 -> 37008 bytes build/server | Bin 53904 -> 54064 bytes log_marche_bien | 104 +++++++++++++++++++++++ log_marche_pas | 104 +++++++++++++++++++++++ src/api/mictcp_core.c | 11 ++- src/mictcp.c | 177 +++++++++++++++++++++++----------------- 9 files changed, 319 insertions(+), 77 deletions(-) create mode 100644 log_marche_bien create mode 100644 log_marche_pas diff --git a/build/api/mictcp_core.o b/build/api/mictcp_core.o index 204edd27ce2d6058078dcd4e06bb9634f07ef659..8cc5d68d0715bff471053dfef8203a16045e70d1 100644 GIT binary patch delta 7773 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 GcK#nqC4x}^ delta 7648 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 diff --git a/build/client b/build/client index cd85c041234c591ea0fce123d05c07de07040c89..7e893f0cab1f5578cbeddf7d18d969e022cb5e5b 100755 GIT binary patch delta 19867 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

2gz#vtfl@+mCk!0NF~qwc0-d*N+!L6F{1d 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�a_(oCm66Xekpq>2 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 P3qx&RK&jh=-_!gLnTF*0 diff --git a/build/mictcp.o b/build/mictcp.o index d036891fa222b21bd6b870d1a92386621ff5a929..e2f0c5b7123806699a0cccd178bfb2bd73579fd0 100644 GIT binary patch literal 37008 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 literal 35512 zcmdsg2UHZvw|8Prr z!jYiD4drTM1m(D@*xGv={?>+T$+h6zMY6}PqL>O3+59`A6&ff-B+EOFu4R0r9_*YJ zNtG)y_!Ws{MWU<{HIb>}vcibZs{**NOhH=Vq9RkEa`!Tssz@#@%d=7EX)zU=C<0mMxpE`Yd+NN!^xlG$0*>aI{bCdUTJ z%(XG$KK)pHHi;BkzTAnG(aZ3y?}ReXDL)gN7y@v2KFGi~0PEzR%yV8Nj__s?_!3Lc#O@ zPq{+QBH8?8rpqmYE*I}FlB;($LG_dgtNLWhg~|2w9;#C;f=&@ncZ&M>#4B>uRl#o> zVu0VMLg5XQ^p2{l>YdI10qGc!j#d2(3HpQZz;sUWpX~`WlH2kf2MtDw<`>1}2+%+! zl0AU&>i|^xxJafVl8u3mD$ImvzDQ;Z-E>SV){Rg``6w`xFkXa5Xj!31maA|w`Fu!` z#{ZmXMHUdK7~HXHwbQ|hQK?XqB9W|ss2x*PtrxfNhXz%+skA*mXh3DE{6#$tc`wk5 zoeb?!J{JCI*pe_XsiHwkRsTP%3uCYHhhY9%5k;WQ&00&BK(wp@OY0pK-W{x>7bgKB zaDNBg2OxoU`?g$oO_tSged2Xg<)f}O%+dSrxtNOW31|_{R+fJP&4~YJo$N;)6|E!c zc;a(Yy`%gX8k;F;f=&LsajorZC-H>xf#0gDd4I-})8dL$5GOkmghonP#uQ|jbph}% zJ0QjJj0R_P7;+`8Ym4QJIfr^Re<%Nu1k|ikWx|A?B_{ru$PZYVGU3`hVG`7-I#-y? zz& zE=sm_Cu*)X4H#*!qpTWgx2##Sydgg$~vl?k9nwKdR|rpBiWCX zM}ryP?%)#i*ggxCEDwf%h$(dbt*(aq)5t6w+_QE3Q9-!t6#Y;mOuUjOyaw+0V}Ddk z`Ot%I<_hmXx4Em5E4;_$2^D^wCoBOg{@C30Ib%aJOiiz0>`?1+4dwnWQ;wi~&)2%c z9>4dg5Xqz^|IO`AMa_0ciZ@uE=k&oA3e{l^2MZ7QxtEA!`sfzz16?#()p!o1+h~ep zH^|~dCVa>6D;H}5y?#ak)N1+H7 zVGAxg2Dvg(A2!Hi1hr13kOp~0vYIWn?EG1f%#PSho&=Ct1`A)s_D7P- zNcKi?K#>W%rTp3of=2G33E2_|AZkJ;U#1|mm&k)r48n8u7~vfi#ndrScxQf3I5w$g zzg6Qq#|&XlBWyNx;CX3oO)ja)&n~-QXm2-IMH<*}Dg17rk<{J+(d6^N?$V#EsDtc$ zO=FhNhXVjyp!H7_s3tXJ>{LETA)!5*jS9h9KO;piZpZg6-Ec-c2{Wbh8~%0Bofy2~ zD4%P?4|A1Ifi(gcr+q9OKDnaJ)hNS;mBbU^z%0GE&irPqAwMC<4xheP<+|l z(743C=Kf!Ium5jdpj-f^M-7aIM)?mr65n8rrQ(L0RWZcC7N^y~^OAv#OEsJo5259< z@5f$f1I_v~*G$j38qUo(bv5h-pd1d)|516K{Bss0rNM$BD@MR1b-HrLGLXAD42&Jh5=@jPfYWtE)`BUme$I0}W-wx+&sA!>`V?@kbb1#G4>2f9 z2O&$>j09w_kWS9a&M9FwWPLr z&~4|J)fU?DNj7K%I-~9m;{=DssJaj3=_k!GRceaa`iEqGsW_6~T+2sQDV8x$L~_{s z%3<#-Yb275gIn8H5Cv@=0UFn8BzdL;+smKT{<+f+RZ%SVq#bIFRy#1ALt`!9i4^k_ zK8q@U1xJVY(LSgKgRu0S-2ELYN{N@(p3b9eviTKwe~>5qii&vNpP!WS<-&^ZExf|8 z<~U2GNbe{I&Z#1-iV=QQiJAYk$$|?p^Q)RHtY<#t6?+{Ihg_hS-ccJZ$QY9e58+{R zkfe8X)H~Qiz>tj&bI~M9he@M`+xK#_ckvY1hJ}fP1pZ<{kdI($Xo#OAFf_zkz-8}} z_(%l)Qb9zh-wd&Y}y(KmjeBO)qfPZEJ$-_k(#SuIcTPb^&fScZ(FH|h3tqO;9Mx{doIrvC?_&N)? zAhEy~>|_z0jWAva%9DCfIM`arSLNU@JpVB(;#kEwtb%PTM&HBC4wJ}P?`=K_X9 zg<1==xUle0zwC4<9t8M=g?al*r%n}zdrt#T3-gHz3ia_9K!f{9!?Jh5mE-I~Ln0*M zQr?kJvm#l<=t!QBv^TA2c4}>lTXQ~<$VY2DMiKzNlGo;qd^POn|(N<9hvc(CQkY z#i8bQ4Dy*~E$Hg6#W@alredi1YSUaprQv>JflFw(1jqqWFfwHW3U(FGltNDx3!J6F zzT$8o0~cI2By?7g*nb*7?$Ajt*qvMh=ZF<*5CnNXAm%+lQ5q8jMhKkUM~?it`f{%P z04Z<`gzf`6`-KOFNkWlcP~+haBZZv($kDDs2M+4%?J9J3<8Q_a?S;d~0V;HLv$Y#J z+*Jhkh&bHY39M!>ba6v><86oYS6qfmc&H@QFEmKt3Zo;c4QP&&Z2fuf5e#=BRbmn- z6OI)Jhf2hP@3SxoRF;vUem+p_ceaN*;!O3X4R;}>5UnVg$iDvByL_d*C%Oq;ZNbkJ z-BRGM7_`s;g}ZroEe=tv1=G#-XEhS{4Gi%|`jEJfpPx7kW<3&zo)d}ENkHQlOeEegA$UVauHpFw zg+_>hMCMx+^dyUl&rXgT?-}GKG~B##?#FwlUi|xE+NlvUPOben$aKBknCoNPPXA=8 zd1S1eX0(e*#ts`D4ST#AbA6rbnv-HHt3B@=o;VHE-j-qcwD9m2ze_FSV|}fzT$r-?!0l$H`^qYoKFOTCc&Wkc zODEFWzqoL{|BEE;9jBY$>a#Y|X+^qAx5ZmEFP%49Wn;9@LDPR`SKCyp!6qHW>Q4kB zgY=$z)~@L%49-ZYY`4WIr10zXt+&)PO%l#@Ryh@a`<_fNYKneW|0Wf7E>2T4k3CLm zd~|Jci;T_#-O~>>a~X2!t@FJX20gNzPdzQ%;P4^)YD}|`D>`x``)SfY`gP6n+8A+i zRqOqa-B(O596$T)eDR_eYp2d|3mS4=Q$NFcRkd%s>*F?CI6NPG|K6mxCyh_;lRfFV zb?9@y!0@CC9x*d+Uo)!;kOYh3Zv1s)LXm$`*O9-hRCRhjtYW!)_M#K>UR2*P4bpU4 z+9knyfS+xUy?exm4m~pdn0oK`^)CaCna{jB*7JdtL+&W~@fAMjTHc-fk7J|m$(q0I zE$nA|D|onBV#UTSw%6N~&6s7||d6C z=6aml+_*ne^8T0*o>=fU@%5?Pb7p7ra~?ewCk(gVJUGsOpsJDPZ<^cJWDXhs_td?Y zZGL~`{vfnzaK@wY@*6oN-`oyGjZ1E_>s8cz^~kthX$v}(g+D$vpz+C96OZgM{x-|x z_#X8oxkZxk{hmy1lQHj(T66ON(EdCUx2|OXbG%QmIe>tfEHt z9hMXyc$qnO$CQ6s$4=0`)M1@{-~5S>oUe{I%)3(&wlmNqq*G-o+ zX=CmWTk`MDtYz7)TiqJd*zLyR0^5Rop_gvngBdrA9yfPbU83cYm8IHvoh(HA{yX!% zS()w9owd@A`1Ibf+w0!L>%HnzW3n+%s+Z^tALFq)sQKe< zWf@%uMTYghZQd?ATQ6Xz_}RwxK5ARz$9>F~w+i}w#n}r>=ESAlGy64fPnni%(JjY*m?XUZP;Uk3g;INf9Z z>d$*mICxFZPw7{x7C!px#;lm|gT^fcy^XZp($Xtl>hyN^+B?s)PvbV8JBy9v1IA7? zs_1^)GwW~j9{ZzvH@joFbWoO2-dux_`0R|5WqO()E&Y)g51#c~YLxpR zIr8|kL8&tACRzh z!M3vATa1c@>$WcNYU_5b@a^`pvhC+rE$+1E^|LN%K4bbNHClcw?$O;qFW=sIhXal7 zrEKrFSTD`AAW^@ic0!8RqKGu^>9*Zml;@#dTGz)EzBj#Tx94}48*yKx(&zrVohIjw zI48T3W#``V$ZpLMb|V|_OV+yiX_Cv$VMkk78N}FS&sjFM@~V1Pqt9(7yB%0J?p#Vz z(@$p{Pel1Nt9CyAxaeWW=9)X*o;Y85cGvQ+Zz;{w4$aT{YyBJb;_17_&gqx_uIaXS z%f`*=w@vPJVAR`fNBpivrz|rKad@?^+$vS%mnFK8wxV*TQJ~o$y4qW;q{#=ZhP?T* zO82J4mp<#&o9P_t-^%~yydI;=1e08|1d}EeH=e(wk>Ko0f%nbVch}E*oA<%;-im5L z{#C1(k(bWz9(%LrT%9o~&vrJwwD|d=Z`uQPOH0tKS33`CpqCz~`0V81vA4&bx6r@4 zqiL^wy*6lejlOO&AoTV5<(+h^Zh42#`*`efx3yO7?;q+ux8R?)-SoG2JhHRBQROCX zVzkPNxmltaI{KO>U2Kk9c6421?ATw+=9Kn!zXig+0&AB9)tvY^hZt$I-k`OUkLHo9(d(YAJ(x4+agT%RoQg~LKVNcf z`{+Z7`v$ceeWr4H$bGACOA_oC-7Z>Qk=pr+kMX7y=YgH8&kb`rciZae?h&z{bWgr| zG6+vdXLL%k+QkHlBTvS*nzFh7xT79ire%)W>ec&RuN%@-<#pMsM=jS)%3rf; z(Ceu9JJ!Rzzg|v>+Mnj;aVje8^uYo4#qL=h9~wLAn1Ny8i7Et5{$KLXUSo3i-Ic6Q zI^i57K0Eo3aU((}2@OANdNXTCWSj19&J?Wava80O#N$sfohLpY1fIy zs|~w!u!{`Xr9QTu$JNx3;eVZc()ilN5Z|2NGKWTf5Dzy^?i=xTk!Y`I?We)h3g$h% z6g5z-hrW%C##tS8)%D_U2EpP3vv+F5Y{^{sRda^R5uuvnZEyA7m8Dn9o0V#Gmwzkl zHAUn6!z7QPO+EDcuX7!^{6*G;yoAq2FO5%HE$a9nK04;8mWxxV?#ZD`Gu{})S{Hr( z(BbtEa}9^0TXr2|<}A5pwd6u_%mLA$`1rZz=Oxc`h4Hx?M`Yhl*sI^-W4qX?J{^76 zHmTH1bQZaLScY`T?h!NGcfH=mRWI*!9ol;Hm~(=^GX-r&$hOBguYTF}{^rgHN51Z! zI6}QQ*V^FGJIB>Ci|r4cY~_@$J86hxrOJdkOL_*S*^Dtxc&nlQc+&1J`vx`5@1!Ak zbiTmvuhWO_&q}m$v&buQNHm@i+v%}y{4lfMhkRP?JGt^$Z++h`DcyQiJLVR5A0&GI z!uMG3(Rr<(1uSfx)$Df0TeGV5EzaoOl8T~wsf;)~_W1q}tAkX1e{l>Mknl}qNT>GM zUG+SdyLNc!Yqs9r>7TbHd&e1cj(KRMVZU7ZJnYEf6>V=F?;0{lr|D&ByBLk;F#|Hr zdt6eFx#ww{t}?fM`wosD^$q=WEe{P_Y&7oVZ#$MP8?)7^U5^fuiyz&Z^oqLF_R#i@ zMOypXZAlq&c}|&M#T$$9X-@i1gPn%X`eVJpofg8KO(yMpwm#qE-G}mMoed^e?N6Sz zJ9)a(p0acD4>3IsX#cuBHCk)Hl*c8#(!1yFNV=D;-|~Ush9Z|1O;(5JM;>w-Kj!{# z`?en0we|0IS>BzBds?oXUA$w8d1R+Ki>^0zn~)t66ScSVdrg=7shiZg{aO`$xL=Iz z+uYVmq?0=*Xq+w-B=+gGKI(|kVyV~T6O*^y{kL^~XTRBVzBzAuwp?!1a`oW#m;Nl- z*gRui_yOsh*XUr{yao0i6f>`Dd;wXg{@ANzbeE`*@aJyAj^Bvs39yhwkqB zO^+Ni-d(+U;iom922AcJ6uvFoF)(A%b<6HnGnQPM*{Rb2gL~T_MRh4lQs1*ge0|ut z(8*CZ7CzlI=i;lfyQ)Vog_$KiaKF-dsm-a)d4qJi&h!0xP8@mGW!SSmv*M@bgkEn~ z{PlFq<{l@fU+Z>sWqM18O=-^7aWgY6TWp)P`~11G)M5U{ zgFkn$Z9e9cY1i9{?VFsos#cH8e%*h1{FTQ>W8&@oi${C7^}oDW{#h+;d0b%1XS2e# zyG55hhCQjA-YRua*6EP9Wf2~MU4}ZW4JbG^_FBi}yWW05n{um%c8mOFSo??F-sePp zTX0HNE}bk88k#=M8WLOjWat&kiCmk~3nNxd*I8V{%mL;JlTC|R@*dJ%`+hk@Z65Hi}dOxjeMBhzkTbYfU`^kL7i;NX*HT^p` z`qoj!_fPL%dyeD|X~nH|b6Q)_BR#f{b9nsBL88A~ZCN>KwB2LwPLuYZp5D4TNWJ@g zlQT`S%g5duq%)>U^Vg-f;`O?mG8&h7-adV+{=vw9lh=M2*zvx^YeR5M#;ioU%-22# z$2Dy=?V{I$epdaRcjtA^+M0B(MTGvZQ3X>1Q!4lWo|xizZp~i**U-IG1A`th1f5)`g)L6OLy0U_MRt;kbaS(aVdpp8yv{jx zX_nlqy-*roVy)F7MsZd&r;b z-(LN5;$eTwO})|7+(YoGSpR`?W7G-7{xn%LMe}wZ!{9~{#K6=>M{b|{c ztHjGRA5FM@G3Zmj-iT*w{n7>Am$Wn|y*&8)f?uL0bXgQ* zy!%u$@44OA8tRNoy&v$qRu3(w!0;!1J7rW^wEMm5>9sXNOH_ggC zcKx>|w?E(9zi-m}?YWf}8`W|?`bQUj+f%t$UOX@Bugvm_OKn1RHMefHa=lWxHObs3 zTO+Yuo8G&m)={s%9`x7F?lb&$sdv=K_bX=$6Iwp;&zZd@zQ26Ih-YSpg9<}VW(8PG z>hRmS4>Rlz7CR<79Q4pVJ1SS+{U|rWY;@9e$@~p1@2y;?5+(JFKN-@=BKq@@7uJ)V zTInpkV0P;B5w)Za1)G;^o{)Cy5^q`VzvtqMxXF@3eL^dOB8EO~+VaTZOzq_#HP&Q) z%?J)#`Rlm;t%6-QdwRKfj!Db7fA^wizT<_DS%@nwK+s zljGy=dxnO(dK_L~+`8Xw^~wjK4^LWquS}7Td3fo7LDW3qm+X$?kB(Vltli^9=Dd8j z_S56`6tw+)L%=no6WuyU7gRrPHe~t4#XF0VG{?{Fy{j}&Qrvdv;CC-Sr+iL%Ip^E$ zf1lp|_l4)Hv}G%H|9b za6Q#;(REWIQ(Zg&!c1>E-RMT+N!rlhQs-C%q7QP5p zNjso_^YG1$jgF7eY2CsxE5O{W;ngw%1tL&1h}%q9Fwr40Oy+tlrqT zm4VNYk7>ioQcX16}po|!S82XZItCW?#rV{pRR7fn=A6Cn0T2;*ZlRc z-Q7J2rmLmaqpen7tz5QtSY!{Asit-_g8hEKb?4Q~O~<$|Ge17t;qYSQH&3Gr5ydOQ z(%&~d+%4_}=VWhhEiiF%b~hFDu{5_d?<26ZuMv2XZ`w#0qo!I7B%E%8Ip|ZO z8jhNu3SyxAQ*gRAT1OHYYK>G$`XZd3h?J~JU!hLYQ*rvoI_Z@)>6tj4fAU81s~+YR z6hK-DPJc_64|Py0=T+c!R7bi)IDy7|B17#+W1>SBoPHjWNV@77z6?}H2b}I$C*8It z-5;kfsgu6ACOsCX2h~ZRR+GLRrz5|vEq`@QdJayXgswzCwQ)6VP>R$4sFR+~rwbqp ze0s=-I`UCFFXxNkT0yD_=8U3c0FKfeaM}PQg_IAseEZ|HsdSpE4=-2%*dmKG>0#ZYrdxJhu`7Wr{^!B<*YJBggi=pRTDu5?onDmtv7*EA`jUz!^jqhC~L2>N_ z7Zt#(;Kf`N^b{8k^+|+l;`Ido#WY|x7;lAf!XJ%s6Nc}FaT|=|<6kZq<1QH2g*XXn z99D(^_^QTi=SZ>|r%i6_T-7+DbsZS&K$oUSn+F#INFjmPGnU6mOfgO&4zjxe*q>}L z$u$+@0=S}JqPTEra7FwnIBtQjM|r%qg|W+XrvYz9`2#i;UlSBSd{Q1iJ_6SW<2~Cb-03GqId`xM}!t800L*xL;d^e12?z+tnEVgmHe%0UW&=i|VV=u`VCI zzEGe3c}nohN^tb5ZhdlYDZ!ruj`Y!OqR@w*Kj1b4>|39lD$LiwF3ry;z}Ha1*HMDE z1ss)o2Fu~+9gx!#;~TJj_;D2Q0ZQaJV*UXGAVJ{gCb&*g!Vg!1FUE2LTk~SL^NI_% z3ga`eA1=XoGR8k*oS%~*Ee-Jc?DmHe{3Mps)>t8UDwdy%@x>VD$9tDei{QMy9o?Pn-G+~L_VzaKUpLyXZnSURsAb(~pSn>CP7)X_4wXtc zc+SVaWD+2T$M@*TwnXd=j{v(D)9^O3FrI+Bf^4wqP)c+0Y30}*`GWj3=9dB1o{NQ(_@eo92Ob^G(1-)na1j36Cb*PG$VrmKk8hVe0ix5k^ zNfGG5BT>5{3{}|M2Obb}!(F^1;7tH7B1kL_LoxojCYS)V8<-V%egQMQr}_j2)s)O< zAmVv`uul+F1YVt}``!lgNR(=tnyT@yS%~?!KhV=tkR}d{1Y5&f8?_u{5Z`ck1;o!M zLPD1Ude&&Ac+lz_Dg`ob&m zz;HilkWaWByhNdJd@{d-`}4CheC)^vv_?V!4Zo<161+14ArSt%MvAzF;_@Ben!-`n zC30*qj^v24O{2h+wQ51-tczWcnDqvnuG*u9N$|)Sxo!~uT z{6&GtA^0yCXYDhL;j82I&qyWwaTHG5X9|UPfbvPXODOrsZmIA?VLyWtyWMB-RGtk7 z=cqyuh&>4(ec42C)U>@6QGR?!x2V3f-C`I%(K7+#tbH~xd_!!X?MnFjD4e#>aSEsH zbB~fw+ov&#KtRdpmehAFg`@iRgC7bLG0xU^8pTI{ris)yl;R60d?Ce0^26YV!cvNF z3~?f7CB>)ZCs8=s0}y^HC8raG@1*#&oc$EPGsQng@sXa<@IxVw;?sIQrugVK6_Ft{ zM+Sqy+S!Z3k$htRsTgPNoI~-E{Jlshgm(;{qky><8j2fIZYstHF*xB*Vem}Mk7Muy z7~h9+RD4(X5&Pe#_^4jlnE#aGccb{98U7v2*Fc#eAo<dR>4Y3fT;v$)oV9G=md=XpT38tUowloYZ#$)@LNe zr}g({_~_5zpfH`{cZWE!&n5~tq40B*9J;+OQ8?`4o zgOmB<8zrA!KWO5853-vXCEo+%Z2z4`;iz14rW8uaq1!i#!p$l9zfp3KeMmcIGk7MX zp-{o#ISQB?ieE$~dJ_MK7Zdq_>SY2y(q5Yxek#x6xIGk3w@Vf!rw1kHDaA+nlXBZ> zD+IFT_QE*v!>72t`cr(`Zng~n3+4}3!jEM5q@OOJ__Uwzr}#*JV$XaEN9}8X6oybl z$>|AkV$bUozd41MFnASS$7<*xX|?lFDj(xGa|S2+1S!GyQaIAn4C{FWUew(|VRO{4mUaL-FZ$tfp`? zkW1R74L(;u*-^O!?~ZY#Cp`|BGyE=ioE@ZuFQjmK9XOi8>2;t#ggD`eb4`b_`C&XEDZ6eY?Vs z*lj(uO2@4Li*6-e0vJFp!9UdI1-EG zzryl8DL(BdGbnyvO3oY#N6*HH9ik~YXzxOB8O2BClK0V8Q+&GIGzzEtbtNOG9Wow- z&lI1wvjLjSAfRd@>T(o;(2v0nC}7Ts!3p1$!s&I07losGb;J5hWAI*Bz69f_z3Be+ z8^uQ=QZfGy#kT~E*i#!#HV{a?Qu!FiwV`mNk2Th(6UI@ww4KLLe7anJ3P*BAV>v-e z5Pm8fz{JX3BHoTk)Gt-VLir?p55R_+VMEWM|zU+|4#}> zauRTTuTgU7@vxHO({j2a=YW99rN>E2jH7xX`Ma=uYl=^|*C+}{&ytA#Zj780Sk7dM zPs>?J@e!5S`4oevLK+GM6pr+~gymmXBL5x5M^w`8ZP4HafwW^LAA@%w7@X*{n!-`J zq#ZY6oNdQb6d#pK+VK*F)9rYJl0&!Sdx}rX>46@kLtxvnKgQX1976GF`v*~cBtI1i zg^1ABop{NlN%zDV$#K?WJ&fJzPM^r|t7j3EmnBg}~aO zAA^(mdOU*@yCpJsDle7ejw!+KD#1tL=eo#@gWyN(rrAy*5b23rnBW~K9JNIF`_(w6n zSPB0D!@r36FO~2=GyEr*-xxoLK~dWN9WYMDlPb*bsf6E;;p=FCKnQ~=K0W@}GyE=? zKSBvVoZ{1dwV1+@UlBPnC34m&!M8ASoUlIoC_ZhU42JKA`I!tJfbokA9*Xhn3_cs< z4;Y-BgI6&4YRv!0;2SZniUu7Bq#d_mybXiz!FYF!v;HuE;pbw$gA%?Q!zbtRK1%pA z8U80Me}NMIN`~JIH9myjmGJj4d^5~Hu7sb@@SQNfSPB0Q!zX@NO7Us`|3cwrpf?%! zI^p*|NP7`EJur^ig_hHY;?w=YRtbL$#Ya{0!}ao___UvgFnlTI&sD;YX81(^WfY&* zKaJwk`X8ilRAekJ_auXpePtdcpVt31#i!@l_5u(J0ofVhWSura01*ht&h$FjUw}{r zpVl)}z{55D>mb&1HiHvA<1o(luXKt}>v@dAk>~;}KSzn20tz1teBxKvFplbrw$uc_ zjd7%pDTQ-rQwM?gVJR-RDaKj-TT-|=bi9g)HirYSBp{Em1$lrlJZ|6nnL z@5KB>1}E=Hq%wFv9RGvCk6=033~qqirI5i*aeePG_<0ZSj{0xrUG5B8GUZWX&6UNbdlPHjKm*V~s$l%9t zxseS1E9S>A_*HBN^sYTE|0?EhX7J@$pFIpd7R%xP#2=++ph7Hnf#u`)6$bwcmrLGb zA@$vc>x2F;3-!s*V{jt>DuWaGuNiy}wx>F7XJWSyY&UHN zC(ma)FnBuFvkQaw#d3Nu_*RTtF!&pcTQT?%93RZ!3AkK42ET>tDPr(0m`~1MNqx!t zJ>-0m-~ueikCEer3yy2jY2|yq87nY>9Cd?2iQ3#`*OaoX8>Tcfucn zd3_lEInqxVJRi&VXYh%*9cMClJl1mogA>0|{FTJoc|;xCKZ)U&<9Hf_8)7}l`hwJp z=#$UzM`8P4XK*R@&xZ^y#`?U(IHDmD3AnzRxO`G>8IBXZ2tO6`+cW$o*gmEhM|`q2 zMp-Nw{tayZp%foKis4Hj`&yz;TP)v|;^RjmJbyAHe+#Z>0L90TAb9>vhL4XaIP||Z zKmqAb*6=94gyB~p5JDowNBb`lerNdWal#)A{u=9fnZdm|x}P?+X8B z_(cB)3{Lca!{Ef8Unu#=p5*&tb$nol+#Q|6ka`(1I2p&R8Qd1Pmk{H`{^a}0$qb*g z`wRwei|s#$!5856l`%M}*BXqYa#6j=_teP@zY@|=*u&st{ano8WWRBbl8>rNzB7H# z@QMA^@nI;jC#hF+2DiucvS4t$4B&<_IB6GW2ET>J0Z)t*`|rZ-9m4R*cd82+d=<(F zA)b*#z86km_@o{8F?b0t1-`pxaH9V|3{LbfXYe)HA1X0U>P7ayP4M9_u`|(!ythek zqEADL(FskPF_gVfaM;b&8MVlfPqdpWzezUod!2tPgfOem#J@0$(l~Lr@^?rHFA{ zCwzn21)UvQ<9Ig)pN8W-7<>kfn=|-)9JgffKXBZN!8352luz_Ik8uZvUx4Go8T8KUMI?ih^YOV1 z?uq3rV(_ULk7MvqjIY8tiqifmz&OHaoYq<{G{d@>HiGB_Epwlg>xw{sYr%u}Td zPUc_q_Z?6m`jB-6c^*M?!v`EKIZVh zZ;){2=r7T8=DzSrwRw1`BEqNgAKZHfhD;3w4*K}s+sD^8TpS5Blo>fy`Y$pkYAP~*5_vZGX0I_p6j$7=H6VIzOC5eTHHhM-m6PIHCQw|_vK8gU z+h+dn_n;Is-Xa_?KM=%+3S2IpRtU_ORTF_5Gx#ByY<@Dpr6$I2hy6po$R6cea z1Svu%#l@>J0Tfp-OydT^O?~#`0x$!=$B68Q+KA-G zF!w89^_3rBp~x@h6BYO9Uy`37Xq;y#e9~oP7zkL5A_D)iTr_{wtN$WJ7Lp(7kGArp ze4;;^2kO(G!xQK^B%BH)KY`HvQeXKNixdof+_0#8w1p%2N%?5LM&((CW)Ch*jjjs<_nr H%jW+tytJA& diff --git a/build/server b/build/server index 486810f26bbb82366958c2a717abadcc30c712d9..0b6dfa8c3eef936f2f76a7c75bcb415f8b622af0 100755 GIT binary patch delta 16765 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 diff --git a/log_marche_bien b/log_marche_bien new file mode 100644 index 0000000..e9176db --- /dev/null +++ b/log_marche_bien @@ -0,0 +1,104 @@ +source: +[MIC-TCP] Appel de la fonction: mic_tcp_socket +---------------------------------- +état du socket +Socket File Descriptor: 0 +Socket Protocol State: IDLE +Socket Address IP: +Socket Address Port: 0 +Remote Address IP: +Remote Address Port: 0 +Local Sequence Number: 0 +Remote Sequence Number: 0 +---------------------------------- +[TSOCK] Creation du socket MICTCP: OK +------------------------------------------ +creation du pdu SYN: +ACK Flag: 0 +FIN Flag: 0 +SYN Flag: 1 +Source Port: 0 +Destination Port: 1234 +Sequence Number: 0 +Acknowledgment Number: 4294967295 +Payload Size: 0 +Payload Data is NULL +---------------------------------- +---------------------------------- +envoi du pdu SYN vers l'adresse : +IP Address: 127.0.0.1 +Port: 1234 +---------------------------------- +puit: +[MIC-TCP] Appel de la fonction: mic_tcp_socket +---------------------------------- +état du socket +Socket File Descriptor: 0 +Socket Protocol State: IDLE +Socket Address IP: +Socket Address Port: 0 +Remote Address IP: +Remote Address Port: 0 +Local Sequence Number: 0 +Remote Sequence Number: 0 +---------------------------------- +[TSOCK] Creation du socket MICTCP: OK +[MIC-TCP] Appel de la fonction: mic_tcp_bind +---------------------------------- + +Socket File Descriptor: 0 +Socket Protocol State: WAITING +Socket Address IP: +Socket Address Port: 1234 +Remote Address IP: +Remote Address Port: 0 +Local Sequence Number: 0 +Remote Sequence Number: 0 +---------------------------------- +[TSOCK] Bind du socket MICTCP: OK +[MIC-TCP] Appel de la fonction: mic_tcp_accept +[MICTCP-CORE] Demarrage du thread de reception reseau... +---------------------------------- +état du socket en attendant l'établissement de connection +Socket File Descriptor: 0 +Socket Protocol State: ACCEPTING +Socket Address IP: +Socket Address Port: 1234 +Remote Address IP: +Remote Address Port: 0 +Local Sequence Number: 0 +Remote Sequence Number: 0 +---------------------------------- +je vais recv +j'ai recv +------------------------------------------ +pdu reçu +ACK Flag: 0 +FIN Flag: 0 +SYN Flag: 1 +Source Port: 0 +Destination Port: 1234 +Sequence Number: 0 +Acknowledgment Number: 4294967295 +Payload Size: 0 +Payload Data is NULL +---------------------------------- +[MIC-TCP] Appel de la fonction: process_syn_pdu +------------------------------------------ +Construction du Pdu SYN ACK : + +ACK Flag: 1 +FIN Flag: 0 +SYN Flag: 1 +Source Port: 1234 +Destination Port: 0 +Sequence Number: 0 +Acknowledgment Number: 0 +Payload Size: 0 +Payload Data is NULL +---------------------------------- +---------------------------------- +Envoi du PDU SYN ACK à l'adresse: +IP Address: localhost +Port: 0 +---------------------------------- \ No newline at end of file diff --git a/log_marche_pas b/log_marche_pas new file mode 100644 index 0000000..e09ec74 --- /dev/null +++ b/log_marche_pas @@ -0,0 +1,104 @@ +source: +[MIC-TCP] Appel de la fonction: mic_tcp_socket +---------------------------------- +état du socket +Socket File Descriptor: 0 +Socket Protocol State: IDLE +Socket Address IP: +Socket Address Port: 0 +Remote Address IP: +Remote Address Port: 0 +Local Sequence Number: 0 +Remote Sequence Number: 0 +---------------------------------- +[TSOCK] Creation du socket MICTCP: OK +------------------------------------------ +creation du pdu SYN: +ACK Flag: 0 +FIN Flag: 0 +SYN Flag: 1 +Source Port: 0 +Destination Port: 1234 +Sequence Number: 0 +Acknowledgment Number: 4294967295 +Payload Size: 0 +Payload Data is NULL +---------------------------------- +---------------------------------- +envoi du pdu SYN vers l'adresse : +IP Address: 127.0.0.1 +Port: 1234 +---------------------------------- +puit +[MIC-TCP] Appel de la fonction: mic_tcp_socket +---------------------------------- +état du socket +Socket File Descriptor: 0 +Socket Protocol State: IDLE +Socket Address IP: +Socket Address Port: 0 +Remote Address IP: +Remote Address Port: 0 +Local Sequence Number: 0 +Remote Sequence Number: 0 +---------------------------------- +[TSOCK] Creation du socket MICTCP: OK +[MIC-TCP] Appel de la fonction: mic_tcp_bind +---------------------------------- + +Socket File Descriptor: 0 +Socket Protocol State: WAITING +Socket Address IP: +Socket Address Port: 1234 +Remote Address IP: +Remote Address Port: 0 +Local Sequence Number: 0 +Remote Sequence Number: 0 +[MICTCP-CORE] Demarrage du thread de reception reseau... +---------------------------------- +[TSOCK] Bind du socket MICTCP: OK +[MIC-TCP] Appel de la fonction: mic_tcp_accept +---------------------------------- +état du socket en attendant l'établissement de connection +Socket File Descriptor: 0 +Socket Protocol State: ACCEPTING +Socket Address IP: +Socket Address Port: 1234 +Remote Address IP: +Remote Address Port: 0 +Local Sequence Number: 0 +Remote Sequence Number: 0 +---------------------------------- +je vais recv +j'ai recv +------------------------------------------ +pdu reçu +ACK Flag: 0 +FIN Flag: 0 +SYN Flag: 1 +Source Port: 0 +Destination Port: 1234 +Sequence Number: 0 +Acknowledgment Number: 4294967295 +Payload Size: 0 +Payload Data is NULL +---------------------------------- +[MIC-TCP] Appel de la fonction: process_syn_pdu +------------------------------------------ +Construction du Pdu SYN ACK : + +ACK Flag: 1 +FIN Flag: 0 +SYN Flag: 1 +Source Port: 1234 +Destination Port: 0 +Sequence Number: 0 +Acknowledgment Number: 0 +Payload Size: 0 +Payload Data is NULL +---------------------------------- +---------------------------------- +Envoi du PDU SYN ACK à l'adresse: +IP Address: localhost +Port: 0 +---------------------------------- diff --git a/src/api/mictcp_core.c b/src/api/mictcp_core.c index 2ef40a9..604828d 100644 --- a/src/api/mictcp_core.c +++ b/src/api/mictcp_core.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -13,7 +14,7 @@ int initialized = -1; int sys_socket; pthread_t listen_th; pthread_mutex_t lock; -unsigned short loss_rate = 0; +unsigned short loss_rate = 20; struct sockaddr_in remote_addr; /* This is for the buffer */ @@ -134,12 +135,15 @@ int IP_recv(mic_tcp_pdu* pk, mic_tcp_sock_addr* addr, unsigned long timeout) /* Convert the remainder to microseconds */ tv.tv_usec = (timeout - tv.tv_sec * 1000) * 1000; + // printf("values of tv sec and usec : %ld, %ld\n",tv.tv_sec,tv.tv_usec); /* Create a reception buffer */ int buffer_size = API_HD_Size + pk->payload.size; char *buffer = malloc(buffer_size); - - if ((setsockopt(sys_socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))) >= 0) { + int setsockopt_return_value; + if ((setsockopt_return_value=setsockopt(sys_socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))) >= 0) { + // printf("debug : %d\n, return value of setsockopt : %d\n",__LINE__,setsockopt_return_value); result = recvfrom(sys_socket, buffer, buffer_size, 0, (struct sockaddr *)&tmp_addr, &tmp_addr_size); + // printf("debug : %d\n",__LINE__); } if (result != -1) { @@ -162,6 +166,7 @@ int IP_recv(mic_tcp_pdu* pk, mic_tcp_sock_addr* addr, unsigned long timeout) /* Free the reception buffer */ free(buffer); + printf("debug : %d\n",__LINE__); return result; } diff --git a/src/mictcp.c b/src/mictcp.c index ee23b85..3598284 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -6,6 +6,7 @@ #define WINDOW_SIZE 10 #define LOSS_ACCEPTABILITY 0 // sur 10 #define ATTENTE_ACK 1 +#define PAYLOAD_SIZE 64 //================================== STRUCTURES ============================= @@ -42,7 +43,7 @@ pthread_t attente_ack_tid; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t end_accept_cond = PTHREAD_COND_INITIALIZER; char debug=1; - +char version=2; //================================== SIGNATURES DES FONCTIONS PRIVEES ============================= int valid_socket(int socket); @@ -122,7 +123,13 @@ int mic_tcp_accept(int socket, mic_tcp_sock_addr *addr) { tab_sockets[socket].socket.state = ACCEPTING; display_enhanced_socket(tab_sockets[socket], "état du socket en attendant l'établissement de connection"); - while (tab_sockets[socket].socket.state != ESTABLISHED){ //attente jusqu'a l'etablissement de la connexion + if (version<4){ + tab_sockets[socket].socket.state = ESTABLISHED; + tab_sockets[socket].NoSeqDist=0; + tab_sockets[socket].NoSeqLoc=0; + + } + 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 @@ -145,6 +152,14 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) { tab_sockets[socket].dist_addr = addr; tab_sockets[socket].NoSeqLoc = 0; + + if (version<4){ + tab_sockets[socket].socket.state = ESTABLISHED; + display_enhanced_socket(tab_sockets[socket], "État du socket aprés l'établissement de la connection :"); + return 0; + } + + tab_sockets[socket].socket.state = SYN_SENT; // create pdu syn mic_tcp_pdu pdu; @@ -231,65 +246,75 @@ int mic_tcp_send(int mic_sock, char *mesg, int mesg_size) if (tab_sockets[mic_sock].socket.state != ESTABLISHED) { - printf("non non non, t’es pas connecté \n"); + printf("l'utilisateur n’es pas connecté \n"); exit(1); } // create pdu mic_tcp_pdu pdu; - pdu.header.source_port = tab_sockets[mic_sock].socket.addr.port; - pdu.header.dest_port = tab_sockets[mic_sock].dist_addr.port; - pdu.header.seq_num = tab_sockets[mic_sock].NoSeqLoc; - pdu.header.ack_num = -1; - pdu.header.syn = 0; - pdu.header.ack = 0; - pdu.header.fin = 0; + set_mic_tcp_pdu( + &pdu, + tab_sockets[mic_sock].socket.addr.port, + tab_sockets[mic_sock].dist_addr.port, + tab_sockets[mic_sock].NoSeqLoc, + -1, + 0,0,0, + mesg,mesg_size + ); + display_mic_tcp_pdu(pdu, "creation du pdu data:"); - pdu.payload.data = mesg; - pdu.payload.size = mesg_size; + display_mic_tcp_sock_addr(tab_sockets[mic_sock].dist_addr, "envoi du pdu data vers l'adresse :"); int sent_size = IP_send(pdu, tab_sockets[mic_sock].dist_addr); - + printf("Packet envoye\n"); + if (version<2) return sent_size; tab_sockets[mic_sock].socket.state = WAITING; mic_tcp_pdu pdu_r; mic_tcp_sock_addr addr_r; - + pdu_r.payload.size = PAYLOAD_SIZE; while (1) { - if (IP_recv(&pdu_r,&addr_r, timeout) == -1){ + sleep(timeout); + printf("%d\n",__LINE__); + if (IP_recv(&pdu_r,&addr_r, 0) == -1){ + printf("%d\n",__LINE__); sent_size = IP_send(pdu, tab_sockets[mic_sock].dist_addr); - printf("j'envoie un doublon\n"); + printf("%d\n",__LINE__); + printf("Pas de pdu recu, envoi d'un doublon\n"); continue; } - printf("PDU ACK de Data recu \n"); + printf("%d\n",__LINE__); 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; + + 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) + display_enhanced_socket(tab_sockets[mic_sock], "État du socket aprés la reception du ack"); + return sent_size; + }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; + set_mic_tcp_pdu( + &pdu_d, + tab_sockets[mic_sock].socket.addr.port, + tab_sockets[mic_sock].dist_addr.port, + -1, + pdu_r.header.seq_num, + 0,1,0, + NULL,0 + ); + + display_mic_tcp_pdu(pdu_d, "creation du pdu ACK:"); + display_mic_tcp_sock_addr(tab_sockets[mic_sock].dist_addr, "envoi du pdu ACK vers l'adresse :"); 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"); + }else { + printf("mauvais pdu reçu\n"); } @@ -299,8 +324,7 @@ int mic_tcp_send(int mic_sock, char *mesg, int mesg_size) // 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; + } /* @@ -366,9 +390,9 @@ void process_syn_pdu(mic_tcp_pdu pdu,mic_tcp_sock_addr addr, int mic_sock){ args->socket=mic_sock; args->pdu_r=pdu_r; - printf("avant creation thread\n"); + printf("avant creation thread TESA\n"); pthread_create(&attente_ack_tid, NULL,attente_ack,(void *)args); - printf("aprés creation thread\n"); + printf("aprés creation thread TESA\n"); } @@ -387,6 +411,11 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) //addr = adre printf(debug?"socket non trouvé\n":""); } + if (version<2) { + app_buffer_put(pdu.payload); // envoyer la data dans le buffer + printf("data in the buffer\n"); + return; + } if (pdu.header.syn == 1 && tab_sockets[mic_sock].socket.state == ACCEPTING) // si PDU SYN { @@ -412,51 +441,48 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) //addr = adre 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 printf("PDU data recu \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; - 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); - printf("pdu ack envoyé\n"); + mic_tcp_pdu pdu_d; + set_mic_tcp_pdu( + &pdu_d, + tab_sockets[mic_sock].socket.addr.port, + tab_sockets[mic_sock].dist_addr.port, + -1, + pdu.header.seq_num, + 0,1,0, + NULL,0 + ); + + display_mic_tcp_pdu(pdu_d, "creation du pdu ACK:"); + display_mic_tcp_sock_addr(addr, "envoi du pdu ACK vers l'adresse :"); + IP_send(pdu_d, addr); + + + tab_sockets[mic_sock].NoSeqDist = ((tab_sockets[mic_sock].NoSeqDist) + 1) % 2; //update n° seq distant 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"); + mic_tcp_pdu pdu_d; + set_mic_tcp_pdu( + &pdu_d, + tab_sockets[mic_sock].socket.addr.port, + tab_sockets[mic_sock].dist_addr.port, + -1, + pdu.header.seq_num, + 0,1,0, + NULL,0 + ); + + display_mic_tcp_pdu(pdu_d, "recreation du pdu ACK:"); - } -else if (pdu.header.ack == 1 && tab_sockets[mic_sock].socket.state == WAITING && (tab_sockets[mic_sock].NoSeqLoc != pdu.header.ack_num)) - { - // 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 - //update seq num ? - tab_sockets[mic_sock].socket.state = ESTABLISHED; - } - else{ + display_mic_tcp_sock_addr(addr, "renvoi du pdu ACK vers l'adresse :"); + IP_send(pdu_d, addr); + + + }else{ printf("PDU inattendu recu :\n"); display_enhanced_socket(tab_sockets[mic_sock], "l'état du socket"); @@ -587,6 +613,9 @@ void * attente_ack(void * arg) { { if (tab_sockets[args->socket].socket.state == SYN_RECEIVED) { + + display_mic_tcp_pdu(args->pdu_r, "renvoi du pdu syn ack"); + display_mic_tcp_sock_addr(tab_sockets[args->socket].dist_addr,"a l'adresse"); IP_send(args->pdu_r, tab_sockets[args->socket].dist_addr); printf(debug?"TESA: je renvoie le Syn ack\n":""); }