From baab734d34c4cd7c4de7b05a3f9f485e3958a03f Mon Sep 17 00:00:00 2001 From: Guilherme-Viegas Date: Sat, 4 Apr 2020 12:53:31 +0100 Subject: [PATCH] commiting --- main | Bin 23400 -> 23464 bytes main.c | 21 +++++---- main4 | Bin 0 -> 23464 bytes server.c | 134 +++++++++++++++++++++++++++++++++++++++++++------------ server.h | 7 +-- 5 files changed, 120 insertions(+), 42 deletions(-) create mode 100755 main4 diff --git a/main b/main index fe1353c6dc9306b20cdb96ed354d58facb336e99..ccf29555b35f2364911f89970482a17bc5f2c7dd 100755 GIT binary patch literal 23464 zcmdsfdwf*Ywf|1S;StCKBpOlSsGvb5ghvq6=nQ1wgc695Slf!@keQH3l8N)+Rl(R0 z%keliwYER4_G7N~TCH9$T0!LAY5*nL_H%!sT18uHeBK#Bjfyl{B){+4k27b6jJ@9b z`~3d+9muS`zI&~;*IxT^_St7<-{e`gI6EtgsVj$F&WI~35Qs}=G}g)lh>Oi_=@IiRFBKU)Cl^h_zIsPd4gCi8|P{g(<O7&SpB%!qn}qnK^G|Y*pdP8$BlQ#=kd7&;>PK~>zgk(pbXti#x)dc@x@z8w z_$fVqK4(v&PYReRs`Rdep6$An`8rZ4Ggr#;GR37v#zj$CT{g41Y0bR3Gn@T0nwwgq z8)s~sKX1moxuxM?>1oljMPW9c8e08B^+!G8}1^l>wie0Y5zhJ}(1)ONKb#nL$330sj*CIrvMz z{uRJ*?KLJt+{R{*Zw5Y|6*JwXBgL4SKN;qidYVq=v2d_{T_D23kx+fxCKlM(gmhb| zsWsBTyxu0{E?D3VhwFW<4Xi%c+8U^ju%^~P#M>GP`dC{u5{6hf;;Ucht#4fCZSXZU z!+1CnXl3C*Gf9Ud{w6SykU!c+BobW58rBA&2&Nfw(N=Kv3?DwfA0;;gSxcZL45tWh z^o2+e|4~pN6lx86n}hYfNK>$tt!ZlYvrxe2XDz;Fph(xRZwLijm@g7+V)f0zZ~$(! z`XfQ+tFI5VMPQ?TqtDyW)aq+)+8kgFp#aonsVJkqr41q!9ja6);%)K4`3<3_NPwZn zjbXNAS=GWt-r1!W+o`#BYIbQk^H$YXd;Nh>U@b)cG`Fpfyg31ApOiopYn`DXYr)J_jyu)f_+Mz||UoGWs33a~&0T z;8bUI4LEQrTU~<=T*Z#($$F728pggxJMdf^MVmTsnj_Rz?7+t<5L9>I=ot1@;=pCo z^1Lz!uKE;Z%y;19Z7Ynq9QY{?+;HHuc2QT2120k_=+zGVR0n>Y13%4yH#+cQ2j1qu z=^mi2jShU00zumy_!$m-y8~BiYRc|%;Ac7H?{eUi9eB3`pW?tDa^SiH-{HWW_mSNW z{9K28j{~3Pz+Z6SbnjPJp94Q%fuKgmk)XDboNBDhx&|;=SJ^mL*@Hs>1=4) zbNDQn;zEk}M$%0558;}&hjG!znDoS#5E4S_^E=W~gtuAgY*d^Yjaw7( z)YTI;od1+~>f#9(=RY8xx^|+B^KTPRT{@w2{&nK1D<=v$|3~5{6VEvRJL0M9CI-Hu z`tKuNC%&Kadx)p0I?=~@(r@Sj&#ze@R+$H{HO#k-j&}!YYL~^dpJVzqVtMCsQt>{d zhKg>1&e4J?m6TKQIG8#kracU5EEqJ*_adjGYkrqlbj`fgL;Ve<1yiXd;uT1jL zzkvi}<=1mF(@#L(*n1+!Fb9mi@hgn11IEDvlw#7p3%`$XjtHW%EdeOO*YH}hWToI{&8f+Do)3| z62A=T16m!`86he~9Sw8eGk%l>i7Nod_duedw=*9_A~RNT0fEnRKlT|hj!U~P0%PTK zVAnt$ehfv_VX<3$_ZqRHMp%Gc0m;QGUPqa`Q67tTlV74%&k#UHR$yjGEE&Ni zcTfv_Yq*jRkY=oWKW0!;I*pfH&^ZNxSEa{lmfFd-i|nLPtCHj%CdHLi<|kF=3&PW9 zC?2u$5ZR4Yl-Zsh`#Z|(c&-p&0D19aU)r8i`Cnmpn){?-vuiumMYdMVn5-H^AeO6y z7k3Z}vGVgpNe4<*OwQyrtJn!3-b1C>cCB`9H&%W(@=)jxkZX1xN5gmgmOh8jduW=D zC&*bDRszVwK}0k$kj<<09kP9tgvbSFg9ZtVm3N;ll&Jj9o`TMwk)EngO^FfPNi(St ziyh^?4mXyVr@cnS@gQ1!J&J&>EcB0fXa?lGznk7Hdsisoj_SIEH|Fk=~}HiH!H zK#_mt#lpxhZ6jZh5lhSFqO8)o4!vGGifrEbuP#Q3>%qlu{sM9^VQH^|wOpe;=37=p&xEltM^D#%h?4b3rIgykyp#VWIpTi(+y z%zt(fH-ChipUlk{rA245+xPeCACsXv5HXu;uEM8+pgVP4`0aR@bcfNw+`~&N}qO+FC`Pg zmuFOOUCKM0ro$|?DSQraDJ>re8WO-!*gJdM-%2 z@F02yFw0^g#hs#^yyT=EqSB}aFA9_9mcheQ4a+lFu!~(bbL#|^TyWDUqr)?pb$Ar_ z?JznOm)X`6J;?QKmvqD267Tg4Q27vwQy?Ba2G=_V3%HBZ$;In|a7&3dlw7R51UV%B z3#zH<88kY!46=ewnn8r@<3bj9-`;pNngjKqN`H!lLcG|vXgQ=pFlBmY&yIt`q_}uOpYTq)H8yShuq3Dq=(Hg7J z!W$9J?Phda+TC~$^cnAZ&!XG0crMjb^It#{!nOExOb9=M{XJzQPC9V)Bjm@c;AOA& z4w9tbtG$5~^@CpR_cDdX+m3!S8Ox%|>F_#Mv=cexJlTm~4YQ{9J|Ii$$0zT>WFbBo zIjCv@l&l)6v_|TdQEX}ZDP{f#n(twhZ`@^=+HRhyJx;{o^=rttw4VTdhL+*bSOUZ$ zup6w10#!gnVFdSSDfg)opAK=8#GO%y!*qPnQHsJFNQx-DYNwt@ijVAM6fUQ>ixvGV za_lIqgjrMT2V`ll<1-nBV&tIiW1u9WFmyijcoZJy7AOk8MEN`lPmpa(dxVI?>z9yk zdA6CJu3pbwd< z?aR$oW|71R6nP*GR~z4W$W_8I0E z#+bdSnqx`R90$!$P%BgW7@wAQ@av0vg$IC&d*~Y$cQ0vDaYe1rw6q(+FW6U5z0cI5 z+^DvhNXH9V=ukly zUgXQ*rLQki7W$Lbz76q(A6t@~sad>8mHRc#b~`t7S$0zSoA_5F{X3l7t4&0an90yj zQEV4EWoc8B{+@38yFJBU;!N$$l-#fJ_pj4LEQPQkHCJaOWgBxOG3gPYMJ0F#yaJR0CMu ziB(hl#79Dg?wWh?jGy=_kC%KuG9fc`HcI|A+@g}#Vzz$<0A`o9ssmN>&cVih@!_}`+*jCiLIjeQen6q7UCDm;;WOD+cOdc zP<$W;?JBB-soi?6C{L`^l*~uinSjhRA=3bv#Ob1t*O7xdoiAsI&lZL zT;3pL?j&nhC^tT*3X&Uq9Zi%T`H0f<9_Vlndk0|xg`Oo0F0u<9Lvj?*Jv%zK?68-~6O)nX_3$2(xOpsDFTYh3(m^&$$v)bpGa&M!B5y6_O+a3v8n~tX z5aD*rGPrFf?_}Snrm*JX*5X4d?DCH6ok0z#6zLe7)=gOv0XfvpTlio4xf9 zydZw}OBTr$7T5}7q0sB;CZmZ5M#Do-cSu?EtD^X+8MN)Si75Ki*Y;j?_PD z&pA|>)&|Kv?I;|9uQ`)9+0zN?V%lbIO$!sDA@o=lcaFP%J0@IF-(@6B;lw@&k1E+h z1h3{C-}Lxkovdr(8k^F4AmJe zaywS>0D$;RDn{573oiuGLIz4Y`k$1gmCKGQdfOg)HiJwQMj_KDWX3}VkAGB6xlsBu z8Upc}BI-na64Dc7oqG8akK&cyRk~rQcLY6dutXj1afVg26PD0d*H6;f0p#q#bVm-H zzz`OjW6R)!-Tsgg=sfZ)R{l1`P}lju`cx|iZj zEi2dM1wXn~BGetfLU;VHMCD?*gQ$F4RO8`d6_p^BEhB8AY*CBkojA4E4Ph{$(C@xS z_0{e{qz{)OD&K{&CvMFl8|49E>XFl+c@1sshYh3-j>}kWJLnxI`xr z1CZHmwihWq6?^HMQ8QDT3$f?Txu#;3by!g2KHRxeNAht%48l0*inAwxjwqw&3IM zNw_!uB+t@5M=-E%_=pG^prCULY9i*S3DiYmb-Rq1r^gVR=Jy~3rbgp~%EqEs_Dn-e z?BwHRFfVrIP4UKImZ;Xtz(uuw&0|urpB!8+9JI7LvKcFXOgML%aPDg1+?BR-{iuR) zF3OFRzsHxI6@QxuTlW)0-D(f7Xmt;qzta(TJ_*M1?tv^;jFl(}1$N<%foSalD7?Fo zibl|_x;rf`$YrAlL3K|`r9z_In{2f|LCrerV)8Ur(Fiymev8N6($)iXo3EkS+t9R6 z!#OIr5;ACp7?;vokt6$Dho>8ho9^s_+gH-=CdCMh&?jh^6VN2C@ z?kDbnE2if-_Lc3${1QMZJ7^E0ym%JM?$z!=62`Ig{3%jseQMjdY}+{Q9~Ysgp5TEf z;{6-mQ2UtLKSSQq?!zZ$3fjzVMKI&v>c?#j=!$K$-DHKf(LC7sraiQ0 zNrH9~Td6fHZ7mU+2g>5_zKMV`llEszVOBKG6|fCp29@&;1VlMaumY2E8@%HPj|#Td z`_m)S4Z*a?%m9=UncLt({6As4SGyTW5t;8JB_b2;7tzT(atd6H6|E+ZQ4@_!Yd-;J zX)%1th+KoUQG9{z>9gd&rR{*Oh{%Iv#Tk)*Aqk4eH9S^Y9T5?cKmOH@$eA!JA~FNE z5s@>foP!V$5&1T(I3rSseliHh2d&+-*x{)id_Ev-d%MDF=;3wHa+SDgxi5CdU&6{l zl(iT3<@Pp)Rnlgc(l>=Z7J77_z&il+9Wim72UQNmYUox%SxaTs*bG*MEz>qGmye`+ zwN&kU!?sEj5oN8HSv!$6oUeQpJ?OA%)j@3^Eb=$kTay;?h@E1wK55b1a>R_rF-k7< z91;DAZJOBOIbMjEa=q(bq|M08i`abipS6GXCcKrNC}e=TA@154b+rao_A9w;SX`Q zL*M^0Uzgf76v$Xb0zmxepDCyZtm>Ch^Fx-W&z*c_YM7s52HpoTRDUdrG)(PCA);Y< z3VY!mrrKo~?xNUQ6w7bA*(VSuy6ML8ET+H@zZx1^u)pB;n`N#3fy;UH)DWxawO#%N zm5%!lx$NdHQ-jL@!pUCwiYEV#xc+5NWz%`?}Dsg&0D+g9~auF3?#Q z?x`i;lOsS*M!l{QiZxuKk$cerJGoRQdtJ2-fvb}O>y(dJY&yN29c}FWDkpyNYp7}GhY@|& zpVjwymYH8JGmll8AG?Pp{>A9npJgm~Bl-bqH~M?4-PgERyRUV7_je`B`)og)BYXVY zZw$8)8kdaa=DOG8o6z*7U%fuq(&B6NhcC&^)msA_^d>!5$9Iw=p-o7JqxJRjv$U#4 zu%)$&YI5~qBm!w7%>m!~03_)<+px^0h4pEE`o1%43kJMSXqeT8HZ`@b)gwVN90;-H zo^RWkxlE{d7B8;^2$n1^kG8A{g!Ev8?hdVuwm>ATw?xAceN8~0!>Zc!Rrmt6jm#?7 z>8sjdR?3zKBl=bNdbMA#Y+4ILt0EyEzT&Mf4u)EM5xr%Tz9zVdhsjZfKj<)zGUsqd z5UIxChFl%r*Y@k{a&=x~itqo6@bV}uYie!u>9c0fW}R$SY~DDs$^RSeqKo#Rh%HC|k>A3{_uui22J!8Ey}_?HQR4$?YNO;O)a)1O zZNX54(tbUcE%sAFc*vm}b#j@KY?1h8KiTA8nn$nk=jO6ib&D2}GVelyU9@8P;#{^e zP#h8+Qm7Z0r z^s42HSLmLVD_5*!o=_+lLKyr3Q6ZGG+_R`w=JJk(q1LkLTY*hnpcPG`(*9r+W0D$4 zA(We}K38Z%SkfS@N$ILOzeSHU1~86&p#X+LI1pNoF;ap)y-t)iorV}f1{NXbKBqq>RAx{!{p(Q3>e$zhn9YeF(G*l&*<_u&m81S=PqFtTV=q8r_vOs*vzA z@u$Q03#AN^;pG{diae6v@zT&x8Omn)g^TlxmlllOFuI*xG3n9^=1e^YDA%t9-TkMb zq0t1$O9#CMe|u2gZrmuDJHPOj>_vGam)@4sF(T(-4StdRcKj{Jy>%6+Et9<*xuX1T zz&9h`1#0JipJ#LbdI0|u@+Tp_c79G#7D?!U`tf%U+Gj4PogWnX1Qp|N1au#POg#ld z`RVD%;qgM=r+D{BzXP-La>jG}luzv+|8!_*LP~y~oqrwh*U|2^khS%*SJ?GyM}9uO z%5YUm{*`uqH}WgLCcg*yn~}dVMZenC???Wl$ggnbZxr<>|LJ!5BJ!Vi=4bbC0Uel* z{8seW3hD!n*yPN~w#%qQ-Vf17H>B7I@qFqVe&olIAE5k&`Gr5qUYK8edyXexkBwNE zUvisf70RFQ&M$N4mn_WJAqV+|`J?$en@3@%5MzK``TzA&zvofE z-$C>7OVM$XKO_^_3gg$ia|AtI^6Ga&XGmU+%}J71zZc?t0GP`E{KQa@MDCJ7rlCvM zT_XjRg!RaLIW05lr*vWChF>(U=%V@4dC6&t?YLa$uxiV)wD}7=%ltY`(ueQ_PM5;_ zq{GVZLn7P$O^zymvc#1frb=EvxXU3tba1{)3JfLlxhCGe^ZfZTAKysiysC#Z|9_3B z-(9C094Q<6R7ua1be^P(CA~`021(aTdW)n#lk`DJcS(9c(pMyXU(#cej>HBtU8hQV zo}}|6T`cKUk~T=XUea46{h6c>O1ewZ1CqWX>HCr%lXPT(EMHQ={ntO$@7~b9LrWGd zxeH%S+2<%!zVt*4A0`OUvd?7wA8-PQT<+zw39((r*RT@8MJN92QX> z-jR`m-~Xxc=78}_LCqd#srX2HJf`BKnChpg_-Lm3cPc)Hsd1Ew=Q1_kQt`1&%{!_1 zI5warCPzjN%VYX5?Ulpw?eiBL;;3%{Q}b9VUdRUI{FaK3x6cnq#V4?V`A$TnbJ!{N z?7| zMd8gx+^$QDCk+q6yVLNqC9dux!U|&-BawwwPl@!C%A;#B{<4ONLkn=SukK4EOBX#p zW(^b1yMPbp|9u(oO!a+;+n>Pxaw!sN*KqcCahX$2YDd~{%EDbJy&Y-&&W7>-9gd&e zuZ{uF8m8UHp#t>#Zr4JcYtoJ*UE_gIK-~Iezg5HjY$;zOo6oMxx7?%kTueNZJK@h#h>nwQ^`p=grD4Rw?Te_5^_-bsx8&`y0rQR zB;J-*Zg&PdPe^&)rE}}@_R5}@cqGlv?=#qW7y%@IHcEMA=dT&$KL=ij`c8C-a#hui zbNPJMd8$D8^8}J3&~RkGUD|J#3S)p%`+B6jOX6p6J15U$MO298B?lNsbr(?1qxY1E+FbvVGfm>3GfqPVJsPKTlKg zZkm0!__0E%YoxqduDzT=KF)F6cjSDc;`4>Hb4{8*LmBLh z&oKX-mjR!j0j~y5sJGW)PyU9M<_qw!tJc0)ZX8pP#&breRCv_PBMVuvfxA89T)7NX9{qNc$g3`_Id~ zA>d@kpXUE4Jg^Tp|DT-!XZ4{-I1+7WD6MD7GgQ2h7B9A?TLW~~j6djI+Z@cN@IEt{a?;JlEG zq=?cfFmOq1_afo-E?()b_IN$ZE4?_!B~`)Cyp`Ws?yjy{l$yg2lmUc8xx5}jS}-bC zGVhXQD;Bz!c~>l6yvkGSt#vP4=J7H*mIl)NESmaol>5&?Iy0xCIT~)nK{DcK9UN4H z?d(<9l&)`tO6n;&E|)s8hK{Gfd!hz7_%(;r&?z`=n^Lu+{x&zcL+AaZ=5QBMp%&jp z6v5BTNzJg&4N8T*0lzQeWA%-J`gK)pEY#o+v-R};$m{3tkKhohoTig@=1?+sE{^>P z_*z%-opu(%c|QC!Bf(elg2c;?+Taqr!cc7(cM^d3MkNe_g-&%ea zQEKK%hY6)-^MjC5p?Vx>6bVTG*I+CJs2fm-#KA#~Fgg+mXBDMt%Hxt!!SpkSy#8>| z+lUvE%{Y&!YK7=S-e@@B$1vjOJJkm1{fKlx9O9I2((aTrQsm)F=`ty2MyXl|$tR`M4;9H83RfY-Yw9F~E^ zD;)Ta^PTv~PN`PuXsJ{LV}QwVKqIgbM`ZCMtZ<%Hs$hL{6DAn1cr_Q62T!Gmz)#_! z2sRmB?B}Oer3%WUxKcrSF`0_UmP-Y_UK~E9rYIWl!yYx|ICd*l9r478U1^x;>hzMC z<{C^o=$g(0wNl0XI0DPpT8}fh_yJz2nRaih^S8;)hKY+_>!qB^m8v9ynu@W~@TQiC zZw)9;7vr>1rO-%$P#Y_44MqZ`?uAt|A{eEDTiY5fT@!7>8H-JRR!Ur>FWksV{hL~0 zPf&Czo`aWsVLEWk$#{_$3N-sjL8jW8BdnAUiBcp>*9O5x(EC^^-FzSviE*RPySNdxIQBmC~jI>(ED0mhUPJOjcspwQCC~3NWC2+jH465?)k_knXK9(u` zQtMmEvgJt7y91@)BNK`q!up9WEL(V-l)l>Mr}Zg`D1G(5LecKDfTgkQTIkZ=ztUIx zsEVrR2Iaq!Q*<5l>0N^2)qbm@F67gd?!Q3s+>HdqROzdISw#;?K~;Ww{kKW|g;GxK z-zuu!uaG`%S)}XV4vb<#{?VoOc@>q9*&-94C!8rBRez2na9kN3~?UN~bXPUm+ zH&#^nt4t_f(O;zLmlX&}MW0X|P#RF>Dto_7(^vb@iptkdO8lhyKP>fC`>E%8Md=6} z=cW8s*yBi0{FHwB`M6IiK}plh@dF#2`fC5%rpmC?PcQ#P;Q9EI!_3|%SLf!Y%PU^d zKS7s5uJqM@`tHjB;!<*gOY#bT3mMe+l)l=pRp$~9P~~u`{;Bj-JJP;0i70*besRa; zq=j>brM}=!F8>2$IQ8v)BA3vZs1zktTlDw_fWDTsc+jO?-h1weD3%#O_coao7qf0#enwTF(S2+|#-?#kdwl-CN zbuqg6su4Lf6|q#^Z{^gf#^WS40@CCoJ!oy>%VJZaHjs-E*zhyo5}T-zjapq7s~QSC zgs!?iMb!_f`p4F|Rwzwh(LhD9CgOTGA+_G?h8%_~J<9_)fvpJe#(a@BXzha0f?(ij z$ihk$nfG5NnDsCxl^uONgqmu47a}|v8E_8NEiDk>C~a_6XvXSA-#k0eg z?EtIKcfYPk|Di~4l30r+)@?Gp#CrZG_Wp7 z!DB*4kJChm!3<%m6d1Q)^|MMjQjN024mI8OgRIG5H$iXY0ne*MoL@gxq#xe{juh~> z;s*@`vWQHWu*)#4ZV6MkN+ug7Ct?)QDRhzkc9DKegx*^vlplKDIdcO?9ZWXkKJ zZaI5lrMy80$9~W*tJT?8X|!xlq3y72mmt>OY%<3mwzTiw5gx@FiE@H$0WQfu$Zo+E zg$uHo_7$k8!R;zV!;LUV;7r#zs0bqkvL+y|&hCK7VDr!h>h8CXG6yu+Ya8KY6w@AD zP40%8Xs|+HQ^mSk3jk`3s3G%dV}>%^JvN&I16d-kASFy#Zwqc9;gJ# z!&i{$>?mRxEQq#)`CVk*k%xuQTf>@(hg)zdd6*NvQgKC$XdxoN!-3%dX}Ye0D$Ijd zq?`v4PA;_VJp6>%sBA5qBoDtKcfrF*5rJ+9tH_9W@CuSxCUqTPzm^6Av2ymr0u8de z$U^_P^@94M-l8ATOLyx2mksvqaGsnzpywAN$3&;W-r_g)%W^+QW4#x~2Cj6bqczw< zo|K%@b8*;q3V$UzYx0tklr>nui?vIOd?4?BQ23YP|ZA8nxSk$DDt zTjY=aWEd;)o2!yc1aX-LTZXl6C5wPkiB=D6~ zT+kXyhJsB|ZO}@9U;~z@1k_Ea+4d``x}bGEVi;^LKw$9ocd&%7HD4W7E+2GbR&MEu z$B@U-Ap6VlBKthb-rLSzg6%Pw5Sy-dMCV;Et$Y~ClP>}}4e#YaFrsNSQj)dTVi0wR zj9M)1TcEd|A$X{1MteZvh1&u&YGk(OBn+ zSMp!?>&H_EMQcY;EA3K)osm@RlTeGh&^_14?t6L@PdeQp#Zsr?XIoS`LT%ZdQaVAuWv`0HV(8U#K~fY$~! ziIw*kU=IptvWknan{GxwDLQs;kVn}A3q?FEfy`u&C@Wsld zBAq(>7V!;cq5V(mpanWfWxa>iL5Rx6D-f5}KpSG~c#2>v|GZqd!jC;g9X;EubHLue zL(Jq$uu+Hs*$^Sq#7hSVI%2y9g#Zt3c=SS! zj*dTpVI0MQIs}#B?XzN??Mp--jgm^b_M<2ruQ&dh&?6}JjCd5Lz8G(AeyzsHn_Z+I z#>*KjP45=$aLn{gC|;H{it0Cg(;=`v{+hTD0p+O=hf$KI%|gX0?L{D;O!s12(()-s zP{3IxZOUPDZj>x+r3MRwT`4MCI#5<+ABlU(9N2^6c0-JS@J{n?!7Ui+L$?nsHhht)-EE7&g^^PB$8?Nq-=v9aT^ihJTxy}8wK%s1dETn zx^PI(UEq*jPE`E>cFiEo?Ox3SXKWlB}^M z#7mF=l9!&q172=KM!>G@2VQ9Y6>BOXBw`Wl2_)CMEZR*FB9>s zTp{edL|srI@Xud~3cmmd!}TgbK}Jm%&mkgt=bh1o{I$5xAjvcWEiiisv+2vFtZ$0Y zowIsmR$XSj6Zsm~MoF07+)L4Xt)U@}G$ z3q#e7Su%ROR1T)-M~Mwu?@!yaCATdd_YWDaS|HRY&40_m8gb|Mso}gS6yNlXrCjx2 z;#y8z_;5&p0?a=uRP1)-Yg~h!XSj$pk$Iw^zi}z;N7H+&OmKS=;>Cxs-%DH4^p-$~ zTm>+ZMKAf1H>9~VgF>0n&56{xelM)N@iI^hM$-60f-6pKG1`a+ zr99POJ45p2kmnwJqzE|=LuS2ywnKe%@B-7H6Y;)-7&Su29z?mgr7ock9LEIK1G@ZP zbcyntrLU=`zfRRZqJ_R2HR~+HW1H!HEh$yCIi# ztK7_f~Ho4!#5Ym%r1&sC=&%-2s$H`z&~-UE=7 zKL$3axJ*`j0-9?74o7w64rk1|&3O4248vd&xNqD{kJyb*ptb(_cj#_3Zfbe^p#7P` zgV%U#FNN*!-o65Obbl*8U4*}4^@ga^dulX*S%(oX$eg%DB0TuCCUSFRl2!qDAnPL{ z3n)GZOr7*aF!KEQ<#nw-%l1)@j;S{9swC?GLB z=dqac7Jg^u*j}gcG$B1#pW-iN<_`F#fgt%?@YqBrbPI0z)9iixw+0@OmFwKpz$axT zIhQx^@+_~@-@rFuG@^mOm{pcsN8Y->MXo1eOMd^@eTomr9-!p{Q73xGxj^rQFNod@ zTuOR}+gGYl+7hN%eE*MvhUkq$9Gy+Z$Y8l>ZF*nE9o6z9nymUAyA)Y=iCWF~WDhCR zvT4fX$&J_D!D5t`YLuQ4oAwLDkc4C)P~&v@m}JpW>OUjS(RKLRD9%v`Q$xZBf93~r zGPE7=2K~u>Ja&*K1c4w50_(BQi5$9lBE5aEHpPj3TrN~>d^}A*8%3Qsxt=2iX{lMe zC=hw(%??4G9)>yx?$wnI4u1DlX#+FF?a}v-*boL)VmJkXb^bFxC&x2mFRsC3giN~< z=r-W+O1F=Se^sP^oL`zhd%8LF=UyJAR5dfGFUi+07wMO#r_l$_?&^Wd z5!Mx-@hzkF^C{kVK5z6sp5h(M?y8vkKm|YP9n7yCe37!)0xA;U`TMPQFC-HAkAn#@LhcVv!XFKDgk8P3!GSekBp+ntDhA^IE9A3(pHPN z;a2n>{A-K{v$6sG?Ywc^aA(6OyiabXbMbLLC3l#%?31=OoKWFke_Y*&zlQ+)IPT6$ ze(%^-&Z*Jermc;r#-x*eIsUG~HYhmL?sp?@9X0QAWY z<>q#S2$zFQD8Q%q)4&%c$& zDOLQHd{<;2C3|%3kNJlj&ek!!e(D3xs!@D=L1s}yzDLBuTeA4Y0ev5(w-Red14{85 z1bLj2s5Iq!#27OwerdM-e*Q{(YO2xXCNxG7zF&b9+I@q3HhN#(XSFhYv^01o}`;eRM}JANbDC#X&OBP=QY zkbDmrD53a&5jKZJdsbMs*fB4-g`px=94;CE{%UtpFKnz>1*$xcRNHM5zfN^KGN@%! zVB_KMIpQ7H@fE5&=hqm=b(rT+?zM8A!w=}M1UvcdRwR4J-9kqe$A|0{w7A=0TVA0ZB@2Z%+sHEbq1$;pFeznic zV$Ry_v*$)QPkVTevdkW#0}lInO4*n`p>r+N-yFf$lx4>K%YR4VZmyPort, argv[2]); - while(1) { // The code will run until the "exit" command is summoned - char buff[100]; + //while(1) { // The code will run until the "exit" command is summoned // Show the user interface - printf("\n\nAvailable commands:\n\n new i \n sentry i succi succi.IP succi.TCP\n entry i succi succie.IP succi.TCP\n show\n find k\n leave\n exit\n"); - - flush_stdin(); //TODO not doing what we want + printf("\n\nAvailable commands:\n\n new i \n sentry i succi succi.IP succi.TCP\n entry i succi succie.IP succi.TCP\n leave\n exit\n"); + + strcpy(buff, "\0"); fgets(buff, 100 , stdin); const char delim[2] = " "; if(strcmp(strtok(strdup(buff), delim), "new") == 0) { // If its the "new" command then create a ring with that server sscanf(buff, "%s %d", aux, &(myServer->myKey)); // Get the server key - createServer(myServer); + createServer(myServer, 0); } else if(strcmp(strtok(strdup(buff), delim), "sentry") == 0) { // If its the sentry command open a connection with nextServer sscanf(buff, "%s %d %d %s %s", aux, &(myServer->myKey), &(myServer->nextKey), myServer->nextIp, myServer->nextPort); // Get the successor details printf("Trying to enter\n"); @@ -61,8 +61,7 @@ int main(int argc, char *argv[]) { int n = write(myServer->nextConnFD, buff, strlen(buff)); // Give the successor your details if(n == -1)/*error*/exit(1); - createServer(myServer); //Now that the entry connections are established and stable it's time enter in listening mode - flush_stdin(); + createServer(myServer, 1); //Now that the entry connections are established and stable it's time enter in listening mode } else if(strcmp(strtok(strdup(buff), delim), "entry") == 0) { char connectIp[100], connectPort[100]; int connectKey; @@ -85,14 +84,14 @@ int main(int argc, char *argv[]) { int n = write(myServer->nextConnFD, buff, strlen(buff)); // Give the successor your details if(n == -1)/*error*/exit(1); - createServer(myServer); //Now that the entry connections are established and stable it's time enter in listening mode + createServer(myServer, 1); //Now that the entry connections are established and stable it's time enter in listening mode freeaddrinfo(udp->res); close(udp->fd); - } else if(strcmp(strtok(strdup(buff), delim), "exit") == 0) { + } else if(strstr(buff, "exit") != NULL) { exit(0); } - } + //} return 0; } diff --git a/main4 b/main4 new file mode 100755 index 0000000000000000000000000000000000000000..6af40acec34969cfd963da1bd2c3a3087b167da5 GIT binary patch literal 23464 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,res->ai_addrlen); if(n==-1) /*error*/ exit(1); + int ongoingOperation = _onGoingOperation; + int serverInRing = 1; while(1) { // Set all sockets to 0 FD_ZERO(&rfds); - // Add the main socket to set - FD_SET(fd, &rfds); - maxfd = fd; - - // Add main UDP socket to set - FD_SET(udpFd, &rfds); - maxfd = max(fd, udpFd); + // We only check the main sockets if the server is in the ring, + // if a server is not in the ring it cannot receive connections + if(serverInRing == 1) { + // Add the main socket to set + FD_SET(fd, &rfds); + maxfd = fd; + // Add main UDP socket to set + FD_SET(udpFd, &rfds); + maxfd = max(fd, udpFd); + } FD_SET(STDIN_FILENO , &rfds); - + maxfd = max(STDIN_FILENO, maxfd); // Add all available child sockets to set // If there are available sockets if(client_sockets[0] > 0) { @@ -94,6 +99,8 @@ void createServer(Server* server) { if(server->prevConnFD > 0) { client_sockets[1] = server->prevConnFD; FD_SET(server->prevConnFD, &rfds); + } else { + client_sockets[1] = -1; } maxfd = max(server->prevConnFD, maxfd); @@ -101,25 +108,64 @@ void createServer(Server* server) { if(server->nextConnFD > 0) { client_sockets[2] = server->nextConnFD; FD_SET(server->nextConnFD, &rfds); + } else { + client_sockets[2] = -1; } maxfd = max(server->nextConnFD, maxfd); + if(ongoingOperation == 0) { //If there's no operation going on at the moment, print the menu + if(serverInRing == 1) + printf("\n show\n find k\n leave\n"); + else + printf("\nAvailable commands:\n\n new i \n sentry i succi succi.IP succi.TCP\n entry i succi succie.IP succi.TCP\n exit\n"); + } else { + printf("Linha 122\n"); + } + counter = select(maxfd + 1, &rfds, (fd_set*)NULL, (fd_set*)NULL, (struct timeval *)NULL); if(counter <=0) exit(1); else if(FD_ISSET(STDIN_FILENO , &rfds)) { // If there's something available to read on the keyboard fgets(buffer, 100 , stdin); - if(strstr(buffer, "leave") != NULL) { - close(server->prevConnFD); - close(server->nextConnFD); - break; - } else if(strstr(buffer, "find") != NULL) { - sscanf(buffer, "%s %d", str, &searchKey); - startKeySearch(server, searchKey, 0, NULL, 0, 0); - } else if(strstr(buffer, "send") != NULL) { - n = write(server->prevConnFD, "Prev\n", 6); - n = write(server->nextConnFD, "Next\n", 6); - } else if(strstr(buffer, "show") != NULL) { - printServerData(server); + if(serverInRing == 1) { + if(strstr(buffer, "leave") != NULL) { + if((server->nextConnFD > 0) && (server->prevConnFD > 0)) { // If there's only one server in the ring + close(server->prevConnFD); + close(server->nextConnFD); + } + serverInRing = 0; + printf("Linha 136\n"); + cleanServer(server); + } else if(strstr(buffer, "find") != NULL) { + sscanf(buffer, "%s %d", str, &searchKey); + ongoingOperation = 1; + startKeySearch(server, searchKey, 0, NULL, 0, 0, &ongoingOperation); + } else if(strstr(buffer, "send") != NULL) { + n = write(server->prevConnFD, "Prev\n", 6); + n = write(server->nextConnFD, "Next\n", 6); + } else if(strstr(buffer, "show") != NULL) { + printServerData(server); + } + } else { + printf("Linha 142\n"); + if(strstr(buffer, "new") != NULL) { + sscanf(buffer, "%s %d", str, &(server->myKey)); + serverInRing = 1; + } else if(strstr(buffer, "sentry ")) { + sscanf(buffer, "%s %d %d %s %s", str, &(server->myKey), &(server->nextKey), server->nextIp, server->nextPort); // Get the successor details + printf("Trying to enter\n"); + server->nextConnFD = connectToNextServer(server); // Set the next server as the given server and establish a connection + + sprintf(buffer, "NEW %d %s %s\n", server->myKey, server->myIp, server->myPort); + int n = write(server->nextConnFD, buffer, strlen(buffer)); // Give the successor your details + if(n == -1)/*error*/exit(1); + + serverInRing = 1; + ongoingOperation = 1; + } else if(strstr(buffer, "entry ")) { + + } else if(strstr(buffer, "exit")) { + + } } continue; } @@ -140,7 +186,7 @@ void createServer(Server* server) { n=recvfrom(udpFd,buffer,128,0, (struct sockaddr*)&udpAddr,&udpAddrlen); if(n==-1)/*error*/exit(1); sscanf(buffer, "%s %d", str, &searchKey); - startKeySearch(server, searchKey, 1, (struct sockaddr*)&udpAddr,udpAddrlen, udpFd); + startKeySearch(server, searchKey, 1, (struct sockaddr*)&udpAddr,udpAddrlen, udpFd, &ongoingOperation); searchFlag = 1; } @@ -149,6 +195,12 @@ void createServer(Server* server) { client_sockets[0] = 0; } + for(int i = 0; i < 3; i++) { + printf("Fd: %d\n", client_sockets[i]); + } + + printf("Next: %d | Prev: %d", server->nextConnFD, server->prevConnFD); + //Else its on some other socket for(int i = 0; i < 3; i++) { @@ -160,6 +212,9 @@ void createServer(Server* server) { //If there are only 2 servers in the ring... close(server->nextConnFD); server->nextConnFD = -1; + int auxKey = server->myKey; + cleanServer(server); + server->myKey = auxKey; } else if(newfd == server->nextConnFD) { close(server->nextConnFD); copyDoubleToNext(server); @@ -176,6 +231,7 @@ void createServer(Server* server) { client_sockets[i] = 0; } else { buffer[n] = '\0'; + write(1, "Received: ", 11); write(1, buffer, sizeof(buffer)); //Now check what the incoming message is asking for if(strstr(buffer, "NEW") != NULL) { if(newfd == server->nextConnFD) { // If the connection is comming from the next server @@ -196,7 +252,7 @@ void createServer(Server* server) { } else { if((server->nextConnFD <= 0) && (server->prevConnFD <= 0)) { //If there's only 1 server in the ring // Set the double next as myself - copyDoubleToSelf(server); + copySelfToDouble(server); // Create a second connection to the incoming server to be used as next sscanf(buffer, "%s %d %s %s", str, &(server->nextKey), server->nextIp, server->nextPort); @@ -219,6 +275,8 @@ void createServer(Server* server) { } else { server->prevConnFD = newfd; } + ongoingOperation = 0; + printf("Linha 266\n"); } else if(strstr(buffer, "FND ") != NULL) { char ip[30], port[10]; printf("%s \n", buffer); @@ -237,10 +295,10 @@ void createServer(Server* server) { int connectKey; char connectIp[30], connectPort[10]; sscanf(buffer, "%s %d %d %s %s", str, &searchKey, &connectKey, connectIp, connectPort); - printf("Received from %d\n", tmp); sprintf(buffer, "EKEY %d %d %s %s\n", searchKey, connectKey, connectIp, connectPort); n = sendto(udpFd,buffer,strlen(buffer),0, (struct sockaddr*)&udpAddr, udpAddrlen); + ongoingOperation = 0; } } } @@ -319,7 +377,7 @@ void copyNextToDouble(Server *server) { strcpy(server->doubleNextPort, server->nextPort); } -void copyDoubleToSelf(Server *server) { +void copySelfToDouble(Server *server) { server->doubleNextKey = server->myKey; strcpy(server->doubleNextIp, server->myIp); strcpy(server->doubleNextPort, server->myPort); @@ -353,9 +411,14 @@ UdpData* connectToUdpServer(char ip[30], char port[10]) { return udp; } -void startKeySearch(Server * server, int searchKey, int entry, struct sockaddr* udpAddr, socklen_t udpAddrlen, int fd) { - if((server->nextConnFD <= 0) && (server->prevConnFD <= 0)) { //If only 1 server in the received +void startKeySearch(Server * server, int searchKey, int entry, struct sockaddr* udpAddr, socklen_t udpAddrlen, int fd, int *_onGoingOperation) { + if((server->nextConnFD <= 0) && (server->prevConnFD <= 0)) { //If only 1 server in the ring printf("I'm the nearest server (my key: %d) to %d key\n", server->myKey, searchKey); + if(entry == 1) { + sprintf(buffer, "EKEY %d %d %s %s\n", searchKey, server->myKey, server->myIp, server->myPort); + n = sendto(fd,buffer,strlen(buffer),0, udpAddr, udpAddrlen); + } + *_onGoingOperation = 0; } else if(distance(searchKey, server->nextKey) > distance(searchKey, server->myKey)) { //Send FND for the successor sprintf(str, "FND %d %d %s %s\n", searchKey, server->myKey, server->myIp, server->myPort); @@ -368,4 +431,19 @@ void startKeySearch(Server * server, int searchKey, int entry, struct sockaddr* n = sendto(fd,buffer,strlen(buffer),0, udpAddr, udpAddrlen); } } -} \ No newline at end of file +} + +void cleanServer(Server * server) { + server->myKey = 0; + + strcpy(server->nextIp, ""); + strcpy(server->nextPort, ""); + server->nextKey = 0; + + strcpy(server->doubleNextIp, ""); + strcpy(server->doubleNextPort, ""); + server->doubleNextKey = 0; + + server->prevConnFD = 0; + server->nextConnFD = 0; +} diff --git a/server.h b/server.h index afcde2d..f19aa4a 100644 --- a/server.h +++ b/server.h @@ -27,7 +27,7 @@ typedef struct udpData { }UdpData; -void createServer(Server*); +void createServer(Server*, int); int connectToNextServer(Server*); void serverIsEntering(char[128], int *, Server*); void printServerData(Server*); @@ -35,8 +35,9 @@ void copyDoubleToNext(Server *); int distance(int, int); int connectToGivenServer(char[30], char[10]); UdpData* connectToUdpServer(char ip[30], char port[10]); -void startKeySearch(Server *, int, int, struct sockaddr*, socklen_t, int); +void startKeySearch(Server *, int, int, struct sockaddr*, socklen_t, int, int *); void copyNextToDouble(Server *server); -void copyDoubleToSelf(Server *server); +void copySelfToDouble(Server *server); +void cleanServer(Server * server); #endif \ No newline at end of file