From b7721e479fbdfd1151a064ca2fd7beb2676fa7b5 Mon Sep 17 00:00:00 2001
From: Abhisha Nirmalathas <a.nirmalathas1@student.unimelb.edu.au>
Date: Thu, 18 Apr 2019 12:12:05 +1000
Subject: [PATCH] refactoring code

---
 http-server.c |  75 ++++++++++++++++++++++++++------------------------
 http-server.o | Bin 27904 -> 28176 bytes
 image_tagger  | Bin 45264 -> 45432 bytes
 user.c        |  11 ++++++++
 user.h        |   4 ++-
 user.o        | Bin 13144 -> 13888 bytes
 6 files changed, 53 insertions(+), 37 deletions(-)

diff --git a/http-server.c b/http-server.c
index c5e1d8a..33e13fd 100644
--- a/http-server.c
+++ b/http-server.c
@@ -127,12 +127,12 @@ bool get_request(char* buff, int sockfd, char* file_name){
 bool post_request(char *buff, int sockfd, char* file_name){
 	// locate the username, it is safe to do so in this sample code, but usually the result is expected to be
     // copied to another buffer using strcpy or strncpy to ensure that it will not be overwritten.
-    printf("\n\n1. the bufferis: %s\n\n", buff);
+    // printf("\n\n1. the bufferis: %s\n\n", buff);
     char * username = strcpy(buff, "user=") + 5;
     int username_length = strlen(username);
     // the length needs to include the ", " before the username
     long added_length = username_length + 2;
-    printf("\n\n2. the bufferis: %s\n\n", buff);
+    // printf("\n\n2. the bufferis: %s\n\n", buff);
     // get the size of the file
     struct stat st;
     stat(file_name, &st);
@@ -140,7 +140,7 @@ bool post_request(char *buff, int sockfd, char* file_name){
     long size = st.st_size + added_length;
     int n = sprintf(buff, HTTP_200_FORMAT, size);
     // send the header first
-    printf("\n\n3. the bufferis: %s\n\n", buff);
+    // printf("\n\n3. the bufferis: %s\n\n", buff);
     if (write(sockfd, buff, n) < 0)
     {
         perror("write");
@@ -149,9 +149,11 @@ bool post_request(char *buff, int sockfd, char* file_name){
     // read the content of the HTML file
     int filefd = open(file_name, O_RDONLY);
     n = read(filefd, buff, size);
-    // const char needle[10] = "</html>";
-    // buff = strstr(buff, needle)+strlen(needle);
-    printf("\n\n4. the bufferis: %s\n\n", buff);
+    const char needle[10] = "</html>";
+    char* result = strstr(buff, needle)+strlen(needle);
+    int position = result - buff;
+    memcpy(buff, buff, position);
+    // printf("\n\n4. the bufferis: %s\n\n", buff);
     if (n < 0)
     {
         perror("read");
@@ -196,21 +198,16 @@ bool dynamic_post_request(char *buff, int sockfd, char* file_name, User *user){
     int filefd = open(file_name, O_RDONLY);
     n = read(filefd, buff, 2048);
    // printf("%s\n", buff);
-    char insert[60];
-    strcpy(insert, "");
-    for(int i=0; i< user->n_keywords; i++){
-        strcat(insert, user->keywords[i]);
-        strcat(insert,",");
-    }
-    insert[strlen(insert)-1] = '\0';
+    // char insert[60];
+    // strcpy(insert, "");
+    // for(int i=0; i< user->n_keywords; i++){
+    //     strcat(insert, user->keywords[i]);
+    //     strcat(insert,",");
+    // }
+    // insert[strlen(insert)-1] = '\0';
     // printf("the html to be inserted is %s\n", insert);
-    const char needle[10] = "</form>";
-    char *ret;
-
-    ret = strstr(buff, needle)+strlen(needle);
-    int position = ret - buff;
     // printf("The substring is: %s\n", ret);
-    insert_substring(buff, insert, position);
+    
     if (n < 0)
     {
         perror("read");
@@ -218,6 +215,12 @@ bool dynamic_post_request(char *buff, int sockfd, char* file_name, User *user){
         return false;
     }
     printf("dynamic %s\n", buff);
+    char* keywords = return_all_keywords(user);
+    const char needle[10] = "</html>";
+    char* result = strstr(buff, needle)+strlen(needle);
+    int position = result - buff;
+    insert_substring(buff, keywords, position);
+    memcpy(buff, buff, position);
     close(filefd);
     // move the trailing part backward
     // int p1, p2;
@@ -230,6 +233,7 @@ bool dynamic_post_request(char *buff, int sockfd, char* file_name, User *user){
     // // copy the username
     strncpy(buff, username, username_length);
     if (write(sockfd, buff, size) < 0)
+    free(keywords);
     {
         perror("write");
         return false;
@@ -272,23 +276,6 @@ static bool handle_http_request(int sockfd, User_list *users)
         }
         if (req->method == POST){
             if(strncmp(req->body, "keyword=", 8)  == 0){
-                // printf("strncmp with keywoprds is successful");
-                // printf("the numer of users is %d\n", users->n_users);
-                for(int i=0; i < users->n_users; i++){
-                    // printf("USER ID %d", users->users[i]->id);
-                    if(users->users[i]->status == READY){
-                        // printf("is ready\n");
-                    }
-                    if(users->users[i]->status == WAIT){
-                        // printf("is wait\n");
-                    }
-                    if(users->users[i]->status == QUIT){
-                        // printf("is quit\n");
-                    }
-                    if(users->users[i]->status == COMPLETE){
-                        // printf("is complete\n");
-                    }
-                }
                 if(player_won(users)){
                     post_request(buff,sockfd, "6_endgame.html");
                 }
@@ -345,6 +332,22 @@ static bool handle_http_request(int sockfd, User_list *users)
             // never used, just for completeness
             fprintf(stderr, "no other methods supported");   
     } 
+    printf("the numer of users is %d\n", users->n_users);
+    for(int i=0; i < users->n_users; i++){
+        printf("USER ID %d", users->users[i]->id);
+        if(users->users[i]->status == READY){
+            printf("is ready\n");
+        }
+        if(users->users[i]->status == WAIT){
+            printf("is wait\n");
+        }
+        if(users->users[i]->status == QUIT){
+            printf("is quit\n");
+        }
+        if(users->users[i]->status == COMPLETE){
+            printf("is complete\n");
+        }
+    }
     // send 404	
     else if (write(sockfd, HTTP_404, HTTP_404_LENGTH) < 0)
     {
diff --git a/http-server.o b/http-server.o
index 01d0e66c9ce7ebac5f8c6b9f431adc36eed0f4b9..aebc5f8f825d1ccdd215a54163349efd3b095cc0 100644
GIT binary patch
delta 8199
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

delta 8006
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

diff --git a/image_tagger b/image_tagger
index 500d4670814ad0bae7fccbda331e51c3d06b059f..95ba1732538c0d4618bf41dd7d3c47eec79c9bab 100644
GIT binary patch
delta 13327
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

delta 12796
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
X2}*7>=ZXNW`DI{W(BzzaYlR#D7Kd`Z

diff --git a/user.c b/user.c
index 9f1b735..21a307e 100644
--- a/user.c
+++ b/user.c
@@ -154,4 +154,15 @@ User* get_current_user(User_list* users, char* keyword, int id){
         }
     }
     return user;
+}
+
+char* return_all_keywords(User* user){
+    char keywords[60];
+    for(int i=0; i< user->n_keywords; i++){
+        strcat(keywords, user->keywords[i]);
+        strcat(keywords,",");
+    }
+    keywords[strlen(keywords)-1] = '\0';
+    printf("**** %s \n   ", keywords);
+    return keywords;
 }
\ No newline at end of file
diff --git a/user.h b/user.h
index 6ca8b16..025b026 100644
--- a/user.h
+++ b/user.h
@@ -50,4 +50,6 @@ bool has_match_ended(User_list* users, char* keyword, int id);
 
 bool player_won(User_list *users);
 
-User* get_current_user(User_list* users, char* keyword, int id);
\ No newline at end of file
+User* get_current_user(User_list* users, char* keyword, int id);
+
+char* return_all_keywords(User* user);
\ No newline at end of file
diff --git a/user.o b/user.o
index 016374a793e8702125fd09ac11093888a1cf1835..afec124a1f5477eab908c2acb4e789905dc8c58a 100644
GIT binary patch
delta 1378
zcmcbSb|7bh1`~tfMy*He^`Rb}Pd%F76nJ#j&Peg-W>M8(U|{g*bp2s?;JE7=1_lO(
z*O4CGt}{Hk9R#{V*LWmf@;La2*@N+dN4J1Suj>Yn&TAf>$6tUHg1N^J{{R2~zenex
z9blo(>z~$nbe{0|e!-(R;6GRe<At>23_1+Wu4@=Qx|LmLbUR2`yRNC94VHu%)%=3-
zm<#I$29V%nMK)n+uxZ_;KT<r5O~7s}VFg=y@-V|>9*!yeT3T9K3aZ5lTnY*b3=9mD
z=X01cMY2!6#v#u%n`85Lj&L?ciOK%_GAtk27#JpJ^M_^efQ)3Ep97+x_&k(moD;y#
zz#szRG0t~oWME*P*ip|1<}LuqFi%`iFACy<a2|+YU|<l-WMEtv&Hz$8r=Ed9vWS6!
zK`@npfx&w70saa`7Dh%-;mQ7j(u}hwf7BCaJhQo3a5<x@!LDZvOf1Y3K?IY!FqqO4
zU|?clWb<O%$KlNp8ObEJSw}d8Nw_Grq_ik6J~1aJK0CFtJijQVcyhhyMi!9$oAt$h
zGRn#@FfjaK1o0Udz<zP$6KG>{=4E3##lsG=b#j3O%VY<M2F3-G4@!tjZh$Cd5QoxM
z3=9m646F<%Hh+}hXO=ByWMB|tU}QMM4v_~N$-uzS&d9(ZFj-MgWHO_S9Ha4M1sMrO
z^T`S_;!Gwcn}cK&8Rf7zm7%z#C?^#ZSYneu%8E~(AS*C=f*i->6|x0jT0yRWal_<^
za^;L0CUeT~XFRd_r2KQndSMQT-AoJ&3{oKPfs)t%|Nmo=#I=ybi=g6M3=9mc3=9kt
zAleyfpyD8NK;HcWHD@Z4I4F_9#MvPFHg8wF$jEqoa;LIBW7p)J%KD5uC%;sVXY88n
zsdAlh!DK~Mkb7sU_A?et)>K>0cw+KJHGRhZ&5Y{ijEplTTWaiQJT&>IMn7ZC<W9|U
z#?_M<wXQR!PQIyCFF6Nl1<0km3=9mHpb@ufa-p`k<WV%)XHeP8lNV}>*MCBj4Fq`$
z6bevrkYbP!EarrvF$l8@W||V3_)d@}1_lO0s5s1==TJV>_|5yZS1}4e)q*GxKC?Md
zSDcY)Hpk>DJu}V-c}M_mn7mWZobmSLk9ziuw<jCw+jBmEhWM4qmHOsfTR0)=V%aC}
z(l_JeP=Rn8CjZno=M)r#@M<Sp8klqT2|;)UlMN+=C-)erFm>on-eh3MxeqFFVe(G{
zbEX}7lZ_1RIQziamx1BI<Vr(x&OA_@GcYiig7uy;RAE{yK3P#uY_fv{%VZuS6|NOf
z1rkh?t&Ge#FX%z+YM5MUWX>620O4(b=r&T}Iv@!V;b58k%gBuDge-*H$2hr4PYwWJ
C=Sx5U

delta 636
zcmX?*b0ckn29t!|My*Helkad$ncTo>!t{!5@-|L+rZeoDuXBd8F-lI>7m%6kFA%m_
zK(L%qT#wOSl9|tn+nQTl(o<NFQHb3^V!D&$<ZdBprZeo54@!zLuH3v|XgMPj6Vv8y
zkr1ZIpT#z8ULpR2aWb=^#N-c#ER*j@)<{lZfB;Si#h}Q*z`)4B%CKN^p_Dk|j?JA?
z{LGV2$jUPsPG*!7XEHLK%qS<pXtY^MPLYuftVe9}MS1bb1@Z!n6DBvxmorY7{8PSs
za)Ug_<O+oX#s!mKD(q+6v3aH9bH>daDmNGz4^Mums?S(9Sx`-%ap`17wRpy|$qUu4
zGftRXsb0>wVDd-xe#V%|jT*}tcTCpQ)Mu>T9I0u}$k;M@qSk)Kb&~_N`x!GPKh!Q~
zoIW{H=lWy?J&ws1x)qEwCI{+@OD==BiGhoOfq|ESfnhz^i3|(}CqL8`7d#J@Wn^Gr
zU}9ikDB9epw}WwWpaDN4<C)0|jpQdc7)o$f$U-z(OkQYc&cwq33d_kK3^ia(10xMi
z0S<_oBa;)2%tfz2dGDa+gXJbS8VOH6U?jo00TiYT3=ABT9~zl+9^wbfGEA7PXl%|D
zBse+B*p6w3_T*W{cAQOu5V^IJ9~zr8z0jU4Wn#yvFANbpGda=3oawjd<XI+mOa@{Q
zSD9#V8HhpTe=tr~GBun0-;kAsfq@}oa-yj@Q-<#3S*CVe8WIpCH<%|sGBx95kb!WE
JCo3Au0|3~`q{jdN

-- 
GitLab