From 8a6a6c1f23d6afa656eab0b3b8ea5bca10e4634d Mon Sep 17 00:00:00 2001 From: Alexander Cock <acock@student.unimelb.edu.au> Date: Thu, 2 May 2019 12:26:44 +0000 Subject: [PATCH] FInalised Server for submitting, added some comments --- acock_comp30023_2019_project-1.zip | Bin 6028 -> 7138 bytes image_tagger.c | 88 ++++++++++++++++++----------- 2 files changed, 55 insertions(+), 33 deletions(-) diff --git a/acock_comp30023_2019_project-1.zip b/acock_comp30023_2019_project-1.zip index 259cc857aeb5dd93d41b56a8cf303543506bd04c..d5dd55445870747445a2ad69002bd8926040f860 100644 GIT binary patch delta 3947 zcmeCte`H=C;LXe;!oa}5!Ek=_B0tA|qfblt7#NDo85sB&7#K2h6Vp@UOA^!5Q;YPH zk4j~iUv~ReT;%uf@Re!~Gr>+>p^U<_d15?I1SYLX-geumuV1M*N%zx<sctP(p6!3X z_w%I}58W5M{k6q$*392Ce(y8BRlQ;B&juIc_g#KF%1d1@*T>4cZ&LBE_4=c-K*eXW zq~$lglLzl5PilGc^X2W$?swPy<`DmP`1DT`&-s%Mzr;Sl`k(Z9r3_a{8>{4W^x zCO0=P_n&T3-5ln1@|m+XrIi0VBX_!@V5Ul8tw~mdr2F)(2ThW~lP<`8yR>t=xZx@7 z)6VlhYUxIZ##}otAQfOzf9dq9#pXBT+>&2?KE^5566iB~nS;+3!M1AO!++BJR&Oa5 zYfPEK^6i_$7oG)@=RIaDY4O*rw3VAbaY|b8jD;y)wgDmAwsx8*&HoXsuWH9Mk^NOX z%Zwd&-#vNy^2OVSGk83>+rL%qwq-i}<jdLiFU-F;Y~|cyk^1MM#E&X3i@#^;zb~s1 z3s39U-2LeC@+WaJ9g;uxUybkn_xbW=bN9pcv;JLsX8DwVzWT}I91EUpEO)+qaPOML zzDi@Qh3wzo9r|6jJvvG1{{NS(DK7PAGmi;+Pu-cv{Hx<5*R_)$KRmhm!&KpZ{U$!? z-=b#UPI?|Xd0Hj?V7T$de8a*E;%4S-+Rg{-g|`%oM7iymGO0&hlb3<{<JQ1w71z$p zlierfS9KyQpXo`^hZ?)?=)Xt1V`JX<C0ISx7Pmiiv|lZ8N?OgK&r{a62qfK}U$M{s z`5ZRw>+%nNHG2xA?wih*&0yo!a9p^9CtP9e)YJ1Hd{P&VnO(DJWu$(~{7aS==C1wj z`QnC5&h=k=K4l8!<UVq6aCVBcQ;y$e#`!0X_jq58m9_2l{`Y?O=FIt5vT19j_dUMj z>;2<(7Bs{J)qL4eF<owo;Qiz$lbUwDHZiZ0l5>6~VfCY;!o<$1vbBHl!-w7TKQdlE z^|8RFrcr-A-+ey+|F$xU%0FuC>}2@GKM1)bdIVRf%C*;DsF_*3v+~u?;G+^<re|vf zmR5+q@!(v%l<6L?$;U%izjn0PolLJiI{88K0-<w(OtsC=mG|!SyYxVU>ErLX?bV3| z&o-MEX*Dm5-rKrS)wpExYKxs;k`4(su}$ynJ)83E>kVGc;%A>V5|7!Ox;=45)!(I; z*DZSMzw&>em)^;rHqYxP@$8F#me^s_GUa!$;iTn;T|)A~k~_4-s$75WzE~JNGke}L zS??VTx=#cqnH3!Qb8}Cx_nb|WCr@*(>bFWUP>B8X`~8wlQ(oL)JzY0pwbiAFsfv&J zf6A;-xHSFn_LgH4UN73<b-Pc}?CsKsyH?kXu0<6HuGp`i%l+^2>Hm5a5_9Sw$6tCi z;XT`vCwD)743d*u`)HxiIu`c+>o@NF(>ii>hnj(XB=hHkT4$azXnc@c)A;?P)}E;z zJGW`fn<BVaH~&Ot2!GUP-9Ph#LN;%DAN}<5`h|abGu49RL^=*-hD0!^r!!6rcu<wu zr}LPp;4g>T$uq)o?C;KZh&RkIT~cViW<q_Tm#gr@!Xrmy+ov3wTH++r)$mzwlkNl6 znT(vaH|CU_-Nxwj@QccmV_!u!?U+?m{`P@btVHxwZ$Wl1`PTb94>I(uy%@O)oHsW! zz3g5X-C3CKzNgFFWj#|2=X$x#N^e*n%&IJ$^W#K-Ph_-k-2~VD7ga=pUVE6m(LLjs zXp^(OUd5nMP1Q46_N35XnU7`LgAGg;8`sxuHuLWb3v5;G+{oyZchAfrT6(YP*2FCr ze^1`>(Cp2fzxLV5rv9%p4(DEQd-%o4XWH%lE#b4L#7%MCm!Y)b*H)tyS^FQD9{F;9 z^0O^}8#;V+e+x`aFmx2>3=8>XvD#+m+7rAb>kdBk^DeD7U+cF#NxSTd$OLPDndE)} zTW|eM23oUwCY>k?tk22O*d5z*du!qD>_=tVJ95vhdZz3u$~`AEGUD!>Z7Y7MF`jtr zd1abLS(WWpA=enSHE(zKCAW6!n-^`a7GB<K9M;q?kh=KO6rbPO8mGdJ#;cquQpglq z_B)*Wa<0g--Ci?J)f=5QWZJpe>Bwo7xv9L*4QwU`D)qU1zZ9UP;v>Rw<INOpMw>t> zO`BYwFBN?vY<*g%H*#J-|5@d6*ae5Xd&_tKwimJGvO6KrR3Q2>>1*9ww>jHPIcqr{ zg!D68J#jBc5Ixc=bW4}<mR9$=3oNI6`X9|(J=5RS<&Nc_m!}o`w?D1_w=FTbR`g`S zbgO+6-@aY+_yFhfsp%3-bDO;`MGJaO`B`i=ySY|r*<5DFf=GjanXHXg_0yi39b;Vb z;>H!zd2Z`NxZm!4RdxCKp`xpsR*UioYTR=*SRr@AvY}r5mg1fL&R#i_S`$yTs04jF zx&BhuZ{Db%$y*++TPj-K8Fq(l?T-5TEn#;ih23e5`nhRRn~m1C%nY9B*`g-#jjpW` zIp@B8bNM5DFjzEr(a&j{zc#398c5E2b8Nlbk}p24$1Scn$Q+&^bJU_MKas)O``MJ0 z0;N`xdo64&|3yCL6PmqGpm~?H!5uG?J_FBohb8~^CC>`F$T`7G`Mk&W%lh9=i{<$) zuGfEiu3y+gdeVie-Rqn}n##7a>&-v?GtTX4>=DtYyLj^6b?#NNHhX64u)yzv^rm@N zHd|It@->{C$NN9@RCeeZey`GPD>ii3bgbP!HALh@`Bs*dR(dL0{0mQIE-RX#(z{b| zLk(ZptV_qmxt2e9`q0=~rsHsk^MW|N=xlbE`5U$BTc$cs=#5rx30k{Qr7wn4QsYGy zpT3TZ^yOV@O&|Z<&S5dEnLAO0HTeFXg=fXt6i;<#Db7jn{VVD;?Mj@+62abAuF?j& zL5a4i63T1Wh)i3!;qF;MmeSV`JfGZtFPmF;bmrt^aksudR#k1a{1`v!fmZeu7HN*R z(JPNVdB1s{Wn+D{mz}}fLkG{?I{HxJ&*#O0vufk~7tNL3tl9f1j;&(Ov&B>Wl=<J? zttfbZta*1!dz5YHr2VRQ4&~fo)i&WTy&JaZOqWKm(}yE&0rRK1-hG>O{HJOEj|cG| zj(?KrS@7B*<oR;OQw(3Z({eIYB06UpRXnZ<{-P&)_SU=HmvK)jKGiSXFwHt5dq&W$ zxZ@tLJ9xskt6sZfz46()qqBC;GA&okKK*&JfX%H_cZIJg9ygNJ7Z)}XJ?SMjYtDJ! zxT1G+rl>6AOq#i5>ys2O^9AQGORLOvO3ap*US+lB-l5ft9V#UkW(Tg(5p-V4=C;7= z?u`oNpes|3&WH_FdKKi_sTUZzs=jIJp98ITxKnsno^zF4{K!q1dFHf(r<}G3F?5~` zY<-hq)h+RB&7P&lx+N?%Q;z9P;gk$K<?U@G@cB_&NaC#Ol}TaoiypV^5eaurS@8a} zZfDrLg>k&cE52{p|KgQrz<tRHwb`H9tQn@SE|^jzEV}2QyAk{96EY?f9bd4PNb%Rz z@ACVaJf$yH>;8o}$%pB3-4#oo{Ld><Q4jh2*&!>(;obXt$2H>jyuYiz)xp}@;<9<f zUY*nFLg|MdNq;)oz1U&5_$0^kxo@`~5L2)!{%d$xr_soCQRBY3^NS_CQa?`@ZS=Ty z{+FFh{-NKm-bHgqX>3{XVojJEXT%SUYfF4y1bWoFug$l!3SPOwhvjNyz{c)}`6|uY zQ#2(1vWO~Q*_$Bx|E#f|R=NGmv&pA47fYT>RStPK>th3#aVn?hhfBdT<yubG*!c(f zrRv<=5c_A%cafxH>}AhR)kpj3>RWG}<T^XTxwy-*@R_R*ORWChPqMNM51wBB&7Ewi z;WLMQa$Sgd{mWbPKAqXU=s=R&BFlqk6;=zSe_wR)$!^|f@0=}KCz#gNxrJ<D3I4wP zlGoIevU6*1=^xsCMMZMO*SCkKPhLFv;SI&-%g^8UId^>V!-vt!Yg`sMOtV^bB<xd2 z;X|`O=Py=#`t;$&kGmN+GH*C|6+c}g#4N;e`1B(0-!(3EXH~BAdDNeO)?38l^X!;g zqVjR!J3V)<q?pu{^XZ=Hp6I-dm92e+v(14!k%IMHU&`;#y2Sf!p&*-ThvWgfFV32E z%ZhzZmWmu_VLSNF^N`A%tPK-1*3EI@(Q5i~nI&GN_w@aYSzETB-EgyC@?}QZnG<<p z8$Dl~RWj&i47AdJ6fMFf{UxZNp53EG;%o#{%$b$?OcBCnKNbElPWf?gbwwUG^SfA+ z%?)XMtC!1&+!EVvowT!BF~aOmjGK<Zq(_~bdYxWd<bS!l?nIBx3mx%uMN^gE?bg1% z;^L-MOU-ni?d(f?Z?zpfkXZS}a~ZqPg){z(E&YSmaEh)om~p^(W~F3?rigso!w>bR z#V5zNEx!D1+sqdt#?KFLRE&#Ph`G=%6e*^2?|H_w^IP<t7;8J{9}s-nW{~UTF0o=U zuOPQ0>-&pK)Lvu=xG3!G<_bQxr|k4UznB><W}C7nJ?nYst}o}NCCKO4amX*_!?a~b zD~$A$u9n>u`FKP8U&xFX7Ay+OBX{SueKM)duHU>dJ2+nE+u1F<Yj$nqkGj;Jp;64X z=+Lajjp{LTG(?T|?)urJl+GCuJn7n-<q=EXuxEb=FbLkNvPj0KuK(V&XT^12P6x2~ zGcN6)-o0P;^g^u|!P6U6&P~dmnEK8&M_l>T*-0sWdo0W>58Yb6)mOmjX-A4e?{@yB zu_+r@U0@5TpZ5RPW39liL8S)y6CGwx^^0<ARAP>lox6CmYwH>-(IC;26M_~ce2KE2 z_qS7=&z(n0rDW2gznbRdp=nAw=R=A^;x8Ux%RFaWClfhy`LDxM4O4~tUO!-TZtmH} zwQe&*z?Yd{Ze3B@6cj0SQPge1+9g{BOux-%E4^v3+CFpU+iCSG_oG@i-COwT{`6;w zcTHIur}BQ8yO;Bsul>t{qinOBzA<I}v~kehblAe*cEKDyHf`?LGrvq!WjZ|HkBKeM zGFplG!S_Q=n-?1g@;^*=?#uku`9<jL>`kYY1g4fu%U|4Dm%4NEk13IA@<(U-*q`3G z;JX^nrkMfnP3BknxP-qq(yNzO()lHN(pPdv=t|G%^(i|u?oD_y?XtnFs69CobMNNm zt}|@ew(jvnyTg;1bnSvxI?rVLviq3uI=|otN?$iV>NAYm!u?^@^W%%lww#)+6&<`@ ziT&!n?;7!&r}+7vz507C@AGvH#it7<ZM*vG?mvD+XICq8n%|oxpJq(%72(=EjjNxN z54HO{*;qu6y>8vdD~}kiPR<aqX1c&Pd8tSQQ$GLX{~|F=cLXNKipDUh3QgWEn#i<I mc(R;WJX5^r<a)6LCT{V`55?k`SS2Pqio3GqOE54nFaQ9Fy?0&! delta 2821 zcmaE4-lJb1;LXe;!oa}5!64l|*H1*8UEhz3fgxRmfq{>Kfgv+DF+DZDBr!cbwMZ}d zZB%aXZ4aS;JfZ*iH}CUOYUaPqGU@JybE4vNTDlHSG2A-cS7YjgV-<N%C+3+nZP@+i z`|Ek)dvE)F`(_t&Rr8>S@n5^U=f9lzQWkaFx<z+y^eeCT_1~s-*~+_5(h#*%trH0_ z62Ca9XRmb8jcUh5mX*eqyDRR!e{auzC@y>V*1zJ%{u;2Jl3yucb1Qm}UZ1Mbj?P6J z>`qB(IF|)Wi}c)Ib@0&!^`!O3EvAZo+Ic=TR6Kyy{Hx&;Ho@LslU}`WzT}<ZQG3(k zV6!E6=H-wl|DB{Omt3zm(UDJzx;nRrZK9#zi?0cR76rvKw`>dK`rNtyLyMf6^|SB4 zZ@xKn_x<;~+b6%g`LTz`Q@XvXc`svQqS4O}ku}feN8ip@($kz?KezE&xXUH|P1`4& z-e6?C>`$0p+(h-n1!)hK*KP^?@3=ocsONnBcP68y|GhGm0=+^V_dD7=-c+x2Rkr`! z{j>L)KQvE|Pd?^&w1>G!&hwL*SLK4<AIxqtB0Uy1m$HLRQrcsB`tAFcy*prQZznCg zcFz6vXBV&Q`6=tOYx?HLH#tnchEI5V{iIjoO+|S(`TAKt{&zmUe0pZDM2*y!-`Cx< zGrwt@ta$h5)tRj!;>?RPum0ILGdxl|qh3cNq|2uxCSZ|}?8Ow%r%GH=w=D!NST3}Q z-L|bhJ6Cwez23Cg+H%94TegQkmp`X&KX>~!`I9#@zSR{4m4BOdYW2$-7y0Y7T-qCs z=>DD4C1A1b#vF@)H+SNX@l7i6tbWkMuXO7$lfqj)Nt^c*6n{9>{hu4+(Ro%);kRRO z>6Xg+V<meWge9jPO>%p9MR{SO6X)#k+#BTwg%z{S)=Y^@xuNlQr**p0#C1Nb=R<4e z?~E+{obUDRgOL6HQ?q6@^{UD4nD_p2#3cpu7f0E2Md$Te@!f4u-KXBPXwr1)DIqh> zvML`Qaw~YPo4M|BL35wcX*XW|*d@L1R{Z!C5n7>TwV_^T8;|P2oon5H2#Q=kA95;r z;hq9@^*Di=1^nM9a>z8N?0<25-Ju4HFLEm^{HO1FQP3f&awF)ExBoA0iJ8?2je4%? z$xi8Pvx;BWG45U!?5bMkyHA?wQqS==o}Y$65-Y3<uSZ=sY&7zTzQ&^&lzMbpk?fMU z@8q^_I~y!&cABB0-nT7mSCZ!WEX$(~=9VTu#M;^FH#z@KZU1)NYRmrJ(VhZJH)^^v zG@Mm?|KL}$v`PDy3k)@r&prPp7vz)9dp++<)rr;HI$HjE6}BI!&RJh_&nY4(UMPf3 z-o5O?<UXOVCKF|iPaK@CBBoIDE@SG{Wh=OAsvAOAoG@yv%XvQK5^MceCan%86Wi|U zV|x=OSzS}smFW4uaV1M~Mu+mlEu#LnUmZBja$#D-suR0dcixszs+q<9AXFrH-QBr6 zE>AxB^T%RQSr=335DB05Su@wVmWEy`U8rdDV_)z#r&O&%i%Q-)*{AnDf9;EMRgM2^ z;I(3LXk9GNDjBo;K55r4>Gn;sub+|6b|Bzt;J=Pf0)pZuJd3wAY6MTvSh#0txex22 z3Cm<FPdhlcx^<p8_2TQADQtJ*6j$tf9+l}3!I1rBmGy?=nLEGQW}Md25;l9YODaT; zv*y76t6Mvj{!Q=x9NiuK`}hA>Ay;>Ps1OJ$S4@4=6*aYNQ=WX2_EF}Ef-k<6^ziPi zpBH|#Gy4~()2G9w3*$-`CrxKc?h?|fZ19<yVEWDXszcb~jz!*rM}k&Pcy%Q2^<(== zp%*hWr#}!lxl%v!$iteOTODsm{IGEe(UJVVWZJU$@E4w<Qgyl2y4go2w|of@_KUVv z%exUaY2hqOtrZ=%i9K7F8_zj#_}Y^rJQEk%wu{y)MZFAr_@zzu)xlM4p_%tv9~U3| z>0@OueKX(UJ4;yo+g3a)m^|ySn(2wXPX3bKZ&tVGeN{a&zeO+dgK)p`NuNLKmn~n~ zb^oHanacTZ^BxxJ*1xlTEpqk!yGK5Kv*RW$@zynd^pJVyXD6{6pPWovRF~Y%cGh#) zt=IX!u!#A!JZpW<xr_$al?Ub9T8`~I@}=qLuk7pv(`&!&<bQS`=3zzR`6m@p_J<yx z(sR4@v}{{go<SJr+*`E)J53Mht@fJl^izy!vFBW;=B%)YMwX~UQ)Ru}uSJE6PB#(H z+x+CD?m?dDY_7c1|8=83sZVB~<K*mksm00bzj5o*`R+f?<w&-N)Cc)ZUUJ6JTw&6Q zhE-XQ1v?cwTUIV;QOT5XXR2b_>UPxj(}MbhP144RwUM$Vn|B9A{(UZbb%Xgs`#b8> z<Q``!e>$@E{?-{B{N?l4eU9bKbz|D_ymIfEY(_8P_tW+%G3?S&laOrv<dyM%*TENc z%q%~el=hv!7bCE_+2QAJ?%196%Xs|t-}zL0UOR<{cW?2ZYqqxXj>4sum7fppo#X3% zJpFFb`h<vUP1C1^-Fvgo;APLhLaXBYa`XGvFI()_%-pn$?Z6h65RS}w8)he+UJ}1N zE6U=Fc<y2$$;B3{ISNwVEHb{OS#Gs!myGQEIX(+lhY0O@wMXJ?p`-O&-n`UD`|sA9 zZZ^AcNubSv*MjSr^K{(>6(?*}zw7XD@;F%@Y|6B|Ezumbq~$R4l#U(69}m9R@pEd| ziON~L>HkucWwZUvHcdBpcW$q0^A-uA&Ce=DH|;#-=<krvAIq#{(|@3A#xJfbvzNS- z{>tt0C|u>$y+BTz9eHMqmt|In3yEF%m~zDAXZ^peMwXkOw|!LTp3>u!_hfb7=bKg5 zQ)f(^d+yhRHStAL{=V&=tDCGi{p*r>C)e2OSVsBq@Ud#&oO{p6(?K|XLxdaCgv+O9 zvFqKLyma~jt+UNXBtCsR^0(4tu7&^RPCvV1%UP+XUbC!XskQk0QtjODL(^Vfx~Akm z-8|$;D#vBXlKL}Ov*m9`92TlMG^J?c1qK&}nd`gfrhcq;o+@N^@?EEgW&5!y6&)d5 ze2N`f{_|M41Vgh5C68K$*{)r#G>_@w;v^S#zEYzo6+c^EZprkhWsbI*3O1)Xu4xEu z4L#X;W>vy(#)+zjZ~YROyzN)Dqr3j8r!UVdvwC)&mV5Z=yq{vduk<a(+3TXxG!swm zTB3UNh^kuUVhy!8iL?{ZA2vTwV>x*8{>4M<<=d@P`xbPjum<<uXm};uaqFz%-VKWv zKVyjrXq>qqc)t#lGuuY1y+=gSD%V(vhE6>(LFi9WRs4;p4T=j_@V860m$3!w+h<Je zpBS1fu`S}6MA-5SgJu)uUG?&tnC6A+FX7QFSG{zQS2BvnxMr?s&np-2_nT$o-v7@o zyyVexBP&+h^|7b9aID{%SE<IqtMk_jMdn+*{TlswgYA44N5<sB@&Nykb<ZxbPPe|m z(xSa(X<<WT2#dR>%>|vX%~PAdMqNL#s$u47r|e_f@9DIzR`L4!`~79^tEms_bD4|G zW4X3O-f6kHI)Z1)`trrSrJ)+?U&R%rF7>8LUAgXkv3?grbxYJe*Ii$BIEBAg)7gJK zqV#EWo973o|BH+FZYtlfBk^^_dgbVqS5sCOz23O>uc-5k*Ee_0P82_|lyAkMOA`(j z&(*fJt-b!kXzgW|m?d`8_U}zzy{BPSmGL}&tDIod(3t8RyRxreXTH9_`2yc+PCnG8 z=;TfbJ@y~`y-Q;LU75U3!kVdyYw~Z22qsDH$)S=lOl>@qH%rDao#&k_D3!>Q!Oy^8 w5}%lyoLW#a`GJ(k<VjMFOq_y~uSz8_Z55hqE*;0TUU>3!X;(H$P_vf-0MR2vI{*Lx diff --git a/image_tagger.c b/image_tagger.c index 79e4e30..6d1e748 100644 --- a/image_tagger.c +++ b/image_tagger.c @@ -1,6 +1,7 @@ /* * image_tagger.c * source code from Lab 5/6 of COMP30023 +* @author: Alexander D'Arcy Cock */ #include <errno.h> @@ -21,7 +22,7 @@ #include <sys/types.h> #include <unistd.h> -// constants +// Constants for the HTTP response headers static char const * const HTTP_200_FORMAT = "HTTP/1.1 200 OK\r\n\ Content-Type: text/html\r\n\ Content-Length: %ld\r\n\r\n"; @@ -34,7 +35,7 @@ static char const * const HTTP_400 = "HTTP/1.1 400 Bad Request\r\nContent-Length static int const HTTP_400_LENGTH = 47; static char const * const HTTP_404 = "HTTP/1.1 404 Not Found\r\nContent-Length: 0\r\n\r\n"; static int const HTTP_404_LENGTH = 45; -//static char const * const SET_COOKIE = ; +// The html filenames are stored in constants static char* const PAGE_1 = "1_intro.html"; static char* const PAGE_2 = "2_start.html"; static char* const PAGE_3 = "3_first_turn.html"; @@ -43,17 +44,6 @@ static char* const PAGE_5 = "5_discarded.html"; static char* const PAGE_6 = "6_endgame.html"; static char* const PAGE_7 = "7_gameover.html"; -/* -static char* P1_NAME; -static char* P2_NAME; -static int P1_GAME_STATE = 0; -static int P2_GAME_STATE = 0; -static char* KEYWORD_LIST_P1[100]; -static char* KEYWORD_LIST_P2[100]; -static int NUM_KEYWORD_P1 = 0; -static int NUM_KEYWORD_P2 = 0; -*/ - // represents the types of method typedef enum { GET, @@ -61,6 +51,7 @@ typedef enum { UNKNOWN } METHOD; +// represents the states that the players can be in typedef enum { WELCOME, WAITING, @@ -69,6 +60,7 @@ typedef enum { GAMEOVER } GAMESTATE; +// represents the different attributes of each player struct Player { char* name; int nameLength; @@ -78,12 +70,11 @@ struct Player { int numKeywords; }; +// The players are global to access them from any function static struct Player player1; static struct Player player2; -//player1.playerNum = 1; -//player2.playerNum = 2; - +//checks the output from the buff to fetch the url of the request static char* getURL(char* curr) { char* url; if (strncmp(curr, "1_intro.html ", 13) == 0 || strncmp(curr, " HTTP/1.1", 9) == 0) @@ -113,6 +104,7 @@ static char* getURL(char* curr) { return url; } +// Handles storing the keywords and returns true if there is a match to an added keyword static bool addKeyword(char * keyword, int playerNum) { int i = 0; bool match = false; @@ -146,6 +138,7 @@ static bool addKeyword(char * keyword, int playerNum) { return match; } +// Returns the player that the cookie in the request header refers to static struct Player* checkCookie(char* buff) { char * cookie; if((cookie = strstr(buff,"player=")) != NULL) { @@ -176,6 +169,7 @@ static struct Player* checkCookie(char* buff) { return NULL; } +// Forms the HTTP response to the client and returns true if one is sent static bool sendResponse(int sockfd, char* file, char* post) { char buff[2049]; int n; @@ -218,20 +212,16 @@ static bool sendResponse(int sockfd, char* file, char* post) { } } // send the header first - if (write(sockfd, buff, n) < 0) - { + if (write(sockfd, buff, n) < 0) { perror("write"); return false; } // send the file int filefd = open(file, O_RDONLY); - do - { + do { n = sendfile(sockfd, filefd, NULL, 2048); - } - while (n > 0); - if (n < 0) - { + } while (n > 0); + if (n < 0) { perror("sendfile"); close(filefd); return false; @@ -240,6 +230,7 @@ static bool sendResponse(int sockfd, char* file, char* post) { return true; } +// Handles the different cases for get requests and returns true if a response is sent static bool getRequest(int sockfd, char* buff, char* url, int n) { struct Player* player = checkCookie(buff); @@ -251,12 +242,17 @@ static bool getRequest(int sockfd, char* buff, char* url, int n) { if (strcmp(url,PAGE_3) == 0 || strcmp(url,PAGE_6) == 0) { player->gameState = READY; } + } else if(player1.gameState == GAMEOVER) { + url = PAGE_7; } - sendResponse(sockfd,url,NULL); - return true; + if(sendResponse(sockfd,url,NULL)) { + return true; + } + return false; } +// Handles the different cases for post requests and returns true if a response is sent static bool postRequest(int sockfd, char* buff, char* url, int n) { char* post; char* file; @@ -281,11 +277,13 @@ static bool postRequest(int sockfd, char* buff, char* url, int n) { for(int i = 0; i < player2.numKeywords; i++) { printf("%s\n",player2.keywordList[i]); } + } else if (player1.gameState == COMPLETED && player2.gameState == COMPLETED) { + file = PAGE_6; + } else if(player1.gameState == GAMEOVER) { + file = PAGE_7; } else { file = PAGE_5; } - } else if (player1.gameState == COMPLETED || player2.gameState == COMPLETED) { - file = PAGE_6; } else if((post = strstr(buff,"quit=Quit")) != NULL || player1.gameState == GAMEOVER) { file = PAGE_7; player1.gameState = GAMEOVER; @@ -293,11 +291,29 @@ static bool postRequest(int sockfd, char* buff, char* url, int n) { file = NULL; } - sendResponse(sockfd,file,post); + if(strcmp(file,PAGE_6) == 0) { + int i = 0; + if(player1.numKeywords > 0) { + for(i = 0; i < player1.numKeywords; i++) { + free(player1.keywordList[i]); + } + player1.numKeywords = 0; + } + if(player2.numKeywords > 0) { + for(i = 0; i < player2.numKeywords; i++) { + free(player2.keywordList[i]); + } + player2.numKeywords = 0; + } + } - return true; + if(sendResponse(sockfd,file,post)) { + return true; + } + return false; } +// Attempts to handle the http requests, returns true if a response is sent static bool handle_http_request(int sockfd) { // try to read the request char buff[2049]; @@ -312,6 +328,7 @@ static bool handle_http_request(int sockfd) { return false; } printf("%s\n", buff); + // terminate the string buff[n] = 0; char * curr = buff; @@ -353,12 +370,10 @@ static bool handle_http_request(int sockfd) { // never used, just for completeness fprintf(stderr, "no other methods supported"); } - + printf("P1: %d\nP2: %d\n",player1.gameState,player2.gameState); return true; } - - int main(int argc, char * argv[]) { if (argc < 3) { @@ -466,5 +481,12 @@ int main(int argc, char * argv[]) { } } + if(player1.name != NULL) { + free(player1.name); + } + if(player2.name != NULL) { + free(player2.name); + } + return 0; } \ No newline at end of file -- GitLab