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%M&#3zr;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
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

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