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