From e480ce7efc6538f18df14926ec35dd666c320cc0 Mon Sep 17 00:00:00 2001 From: Abhisha Nirmalathas <a.nirmalathas1@student.unimelb.edu.au> Date: Fri, 19 Apr 2019 13:19:16 +1000 Subject: [PATCH] bug fix, keyword print --- hashtable.c | 24 +++++++++++++++++++++--- hashtable.h | 4 +++- hashtable.o | Bin 13112 -> 0 bytes http-parser.o | Bin 6992 -> 0 bytes http-response.c | 11 +++++++---- http-response.h | 1 + http-response.o | Bin 7480 -> 0 bytes http-server.c | 15 ++++++++++++++- http-server.o | Bin 29096 -> 0 bytes server | Bin 14480 -> 0 bytes user.c | 15 +++++++++++++++ user.h | 3 +++ user.o | Bin 14288 -> 0 bytes 13 files changed, 64 insertions(+), 9 deletions(-) delete mode 100644 hashtable.o delete mode 100644 http-parser.o delete mode 100644 http-response.o delete mode 100644 http-server.o delete mode 100644 server delete mode 100644 user.o diff --git a/hashtable.c b/hashtable.c index 14c6890..a02d701 100644 --- a/hashtable.c +++ b/hashtable.c @@ -139,7 +139,8 @@ void move_to_front(Bucket *bucket, int index){ /************************************************************************/ char* hash_table_get(HashTable *table, char *key) { /*Checks if key in hash table and returns value if present*/ - char* freq = malloc(60*sizeof(char)); + char* freq = calloc(60,sizeof(char)); + assert(freq); assert(table != NULL); assert(key != NULL); @@ -149,7 +150,7 @@ char* hash_table_get(HashTable *table, char *key) { Bucket *bucket = &table->buckets[hash_value]; for (int i=0; i < bucket->n_elems; i++){ if (equal(bucket->keys[i], key)){ - freq = bucket->values[i]; + memcpy(freq, bucket->values[i], strlen(bucket->values[i])); move_to_front(bucket, i); break; } @@ -175,7 +176,8 @@ bool hash_table_has(HashTable *table, char *key) { return false; } char* print_hash_map(HashTable *table){ - char* headers = malloc(100*sizeof(char)); + char* headers = calloc(100,sizeof(char)); + assert(headers); for (int i = 0; i < table->size; i++) { if (table->buckets[i].n_elems > 0){ for (int j=0; j< table->buckets[i].n_elems; j++){ @@ -186,4 +188,20 @@ char* print_hash_map(HashTable *table){ } } return headers; +} + +void free_cookie(HashTable *headers) { + /*Checks if key in hash table and returns value if present*/ + + assert(headers != NULL); + + int hash_value = xor_hash("Set-cookie: ", headers->size); + + // look for existing key + Bucket *bucket = &headers->buckets[hash_value]; + for (int i=0; i < bucket->n_elems; i++){ + if (equal(bucket->keys[i], "Set-cookie: ")){ + free(bucket->values[i]); + } + } } \ No newline at end of file diff --git a/hashtable.h b/hashtable.h index eb041bf..4f50386 100644 --- a/hashtable.h +++ b/hashtable.h @@ -23,4 +23,6 @@ char* hash_table_get(HashTable *table, char *key); //Checks if the key exists in hash table bool hash_table_has(HashTable *table, char *key); -char* print_hash_map(HashTable *table); \ No newline at end of file +char* print_hash_map(HashTable *table); + +void free_cookie(HashTable *headers); \ No newline at end of file diff --git a/hashtable.o b/hashtable.o deleted file mode 100644 index 006163fa4be2a66e79f11cc80bcc1cee4acdae9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13112 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 ShAfZ;a8b}=3nUH$0|Nj?i<aR4 diff --git a/http-parser.o b/http-parser.o deleted file mode 100644 index feeecba7d45e8a54a1ce6497414c0d2ab8aca3bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6992 zcmb<-^>JfjWMqH=Mg}_u1P><4z#t%oU^{@B4h*6ULJXlEoliX)-#lPpVDRYNtMU8) z{}hjI7F7)f5a0EO;emZ1=6;ZoFF@KnI$JG%|NrmNyca|<luGUdiSFWOU|`q>V(kYJ z5S86vmAgRt!BQTb$H5ZETTOod|IY=op}Q4i<1QAMZkUqR1Eq={5dFtN1~PawgH^I1 zjDKz80oBclMYlXu11sDVkPi^Lp?Xo=<<WTvs@kJ7fCI+tcHn@y%A@%JqX#3{Aq4dc zAoL3$>1TrK-w*OWI5bdfm3X-Y5iA&v>uq%a1%2l=xPg!mKvhWCk-e=8{{H{(LC_qS zV-a4F@aUZi*4x_)amqO~r|@rMu;DEcf(8$W$Hm{O^Z);Us0g}Kk*olv1ds;aQa-3+ z5Ra=w1aAFQkP?s10EO55FtOtf3ZV1><97T0NbxY{0Vm%QR&e;9JPc0a&2I!eI%|J; zbi4lW=ys4mINS9Hj6LDxVFrebl9B@5g2bZY)FQoPhN9F$26xvG1qRQOVueJ7^wbiD z0RLb(zaYQ3gh7FUmy3Y`tR=oEwXig`xP;*qBLf2{Q8O@bfYKcU56F?on2#C3W8z>3 zahMo6z!VdN#{!`k*&u?TM9#p>!kU>^!ob7<=0Wwba1=2xFfc(BvVz$Vd5BJq2@DJj zV6!+_oER7wm{~wcjMLpUgn<E+2pJf`BohNzIWxyp1_lOhkewRLTp-7TozBb+(!{`9 zT9m`U%#*{wz`y|!=LN9^AZ$L6atR2VA0)28z{1hWzyLK_0F?XqKqfQt&IE@Fh|R$8 zm<d8N&H;&n3K9lJu(8Y&XOszmVt|nkB*Q#$MVTN->3T*622ObR34w$d1;asJo4BM5 z!d2SB$iTonaRZdA4B<|wW?<pqV`N|uu4G_f02w2a%D}+D%fLDxBnS$+ql^p;q9DO= zCI)bc$!GyGAB43*1Oo#D;~a6Yqbxv<Vw#x2z`!WTsLChI&CDmwC&(zoE+Edpz@);! z&27ic%*VjM3}tdKFtG45aC3VKGcd5KF@PvGF$QKnD{gDB7`re7GoOtl0|N&OBS;lU zoKcv8fm4HlnL~z~fq_edfte4);1*_N=HupuDd6FSn_|Juz`)DPz{~-X^ArYg`Scj= zB_Xz`OL_`}9Oxi1%}EkuG(Rg`CzAvNgMbNKCx|O(!obYuDQqGM;s}8_5K}>1VMazz zVUQ6biVU8@`rHf*qF@Fq1A`c{g>dT_7{pmoOlQymrCM;9g3~>i1tO5M28a*Co51Q_ zKrz7hn~#@)kr7<&F)}bPqUBl!28N8p;*65Sq?}Z}43K{0Tn!drVBmx%I|c@39!3s@ zryP+COe~CS^Vm3=IhyBl>^|ANhhum1$puVG!W<{T1V=>_lcosAbuhtP!KA_n)^UxE znTtb#<2sacox}cFDM!@q&%2qJ85kKeQWH~Bix|pMi;6Sz^B8hdOEU6P81mvF;>8Tb z8Tmye3ZPtFoLQAxQdyA75FZ~9<QftZ8SfVA=N#hc?-w7>kXDqM3NKwe5{olJK%Qd= zf|fU6uQKH1=cOxv36Obk25QlypPN^rpR8Y6oLW?@pO}=9pRezdpIn-onpaY+@0gU4 zS)7rm5So{%;F6zQtZ!ssXsMr^pIcB`l3JutTv=R_np>=&msymXn3GtNkyxA<50W)D zFfcNX2Puv(D9X=DO)k+jWJt<Ssbp~X3srEov{W$FGto0pFfuSSGcYr-RM5>WDa}i@ zO;62BEy_$*(9KOOO3tvYurSj#Gf~h@SI{jkNwH0~v{cYdD=tY)&ekm`$}dSxF3B&_ zEiNg_&r4@0%`47K&r3~FNX|$sVhHu~_VW+-V?Y*zs{n-tatcUhfP{X0T4riaN_<{o zZYne$P_%#zhN>(}%qdL;m;I1XMo|bY_2Y9>i;EM}QyF|+Lp=Ol7#Q50ovjo!LX%4K zN=hLCplenN<{8!*n&}ys=vit)#Nh$MAOcFRpfp|;#K2e~z$neb&M|?JfkB1=f<e;Y z64Q}SppD6ymyP)z6AwEFSl$LC$-uw>E~#MhX&_ms1QrTZ5VJ6R{EtP7ff;K{l7WGl z0bcr|Xk&)fc_@OQa+v{KU!e$t%6UcxRt8w{3a%KSDwrWP29$@Om>Ez@3YZKt11F4$ zLNh}uG88cohnayFL}6fN29T>Tgc+C_1TY1`{z7&&M2Q9i1A`D!xPjw}fq}t{fdQ*2 zwm8JSafk=u5Rbwk9*;vj4TpFx4)Gcs;>|e3yK#um!XdsI8g8)g0;gdH28JCt)Stj1 zj#d?5DNFT?j4UnD+H1*)IXU^s4Ds=a#l@*bCGlyAnK=x(skz0eB@D$SMS01&1q=nH zCB-04Nq#nn%1O;*$V)Ac2h}w3kn*><q$s(d5+s>iT#yH@gCH{T1*Ihn@$ul2EIv6S z8)806nGWV4nFZp5QWU6`1ks?{3X}@}{D%NgQw}5!YP^AR7c3w7fCL#JO*@b{l*<qZ zWx&+KQf?Sj9ArMIbp<m&A4we4rh<ugLB(O_faE|zlRyNxhGt+8W?*1|soww<hp88b z^0z{1kiDQX52hXzuOKOydPNY2fq~%ylm@9sHvb(|9Hw3!%Kr?dLF$pshZS@%^+r&2 z?4W`W>V8oq_iG@DgBpY|ciKb6Vdj`X&2fi{gX~2%Cj&_w*_>J=aZuR6%%1}lhnWv^ z=Mtzmy7@bi#3hj24{FeYoQ7`BStRw6Na~+J#bN4U{(1uyN4J*|BmfOJWP5p`;^^jx zLd8K8vb`=K0jN1rNbV_silduT0Tl;P$mSdZ2|&9rp!9DJ@;n0r!(FI2h>}J!|2Ieg zYOgGkI6Jh814+vviGzDd(ENp58-cq$P;qeg2^wCYJOy$B$o(Mk4yZUNZ6J$J1aTM` z7(jjjF+s{ec7xa;tO+8Z=7Y?Fav2Pu43HSe{7WE>3=9k~f5XHhq2hLE>Q_L;UD3p= zq2kEp3CR3>sCY1%dT=+Kfq@|rO}q-qhqk)GT~3fWT2S#)C=GMxZm9W<XyTy$BuJ<Y zL_os<WKIZ_4+}q-IiUItB((xWAgPC?`*mpI=}>!N<r2)CFHrFVXzJsj{4-D*rXJRU zc!DMl?twEfFnmB0hjJPIKp8M|ena{EQ2SxxFnguY#6k5iNQ(+o97G|fA8U{RQaHf! zIV@ek%r^!Z!oa|g3{?-JK=}w(zvO@fkjw#<WgsoE^a3+y8dO~ul!l2Pfbx$)X_&Y> z$PfkwhBHuc5Cw8StUZ97?_gmG(gLazK{QM~hz-K9`VL(jmQF!tgD^-f2t&q185lrf zAPlpYL9e(nw<Ix%L9e)^2tsGTSVgHhiFzfe6(tOMDTyVC40=h$#SD5y`4A3RHYGKw zG(A2uFD;)z55i7NN-9b%W6(pAPAp2yOHT!91sMoYmXn#63e!?tQpBK_oSzHoqcP~^ z<(H)Dx%-9cf}0aigHki%(~3a-7?58m!JzN~g&8coVP?U?2fcR=QVUZ9qCsUVXygl~ z9wY|B51>u%3D9yCRELA~!pcxk-2qak2I~8O+twf+0{cPrAw(c7kQopbgaoyhKxU#V zCsw~9)P7JJfS3p&1E2=FLAY=dWEY&nz`y`1U(wwJlAi|E{|-$Ojmu!k02w(%55EFv zMN$DZ2NZswID**^3qLQY`$2Xh;}%dR2K7VGEJWin#NyDu3uGAs1H8V0nT@VL0*Cuw zfEr;)`a$jo_1e(gUx>s0S5W)6!7PT-==Ou^32f<40$Sn1!U<$QsQy5=zZPmgtX_p$ z!>|Ba==?^r5XObk9XRyQ26>i&fx#4JAe4sbgVCUR4912k0aF*C`oSC|0$uGgsQu{a z7p5N+KS<g!dejSX#Ge5){9xe%3O`WUiynTUWC~59$ks3<K=s4=129Q+_k;N8ZU?E= n096zW3=A)zlAz=Ss%z2h2L%&0`vsuo&smURNEl=v5|;r01yd{7 diff --git a/http-response.c b/http-response.c index ae80e7e..679a02d 100644 --- a/http-response.c +++ b/http-response.c @@ -27,8 +27,8 @@ Response* initialise_session(Request* request){ resp->version = request->version; resp->phrase = "OK"; resp->header = new_hash_table(2); - char *cook = cookie_generator(); - hash_table_put(resp->header, "Set-cookie: ", cook); + char *cookie = cookie_generator(); + hash_table_put(resp->header, "Set-cookie: ", cookie); resp->body=""; return resp; } @@ -44,14 +44,17 @@ char* parse_response(Response* response){ strcat(response_string, " "); strcat(response_string, response->phrase); strcat(response_string, "\r\n"); - strcat(response_string, print_hash_map(response->header)); + char* headers = print_hash_map(response->header); + memcpy(response_string, headers, strlen(headers)); strcat(response_string, "\r\n"); strcat(response_string, response->body); + free(headers); return response_string; } void free_response(Response* resp){ + free_cookie(resp->header); free_hash_table(resp->header); free(resp); -} \ No newline at end of file +} diff --git a/http-response.h b/http-response.h index adbcb3a..11a55c2 100644 --- a/http-response.h +++ b/http-response.h @@ -17,5 +17,6 @@ char* parse_response(Response* response); char* cookie_generator(); +void free_response(Response* resp); Response* initialise_session(Request* request); \ No newline at end of file diff --git a/http-response.o b/http-response.o deleted file mode 100644 index 57bc34d925ed688f24eeacd72ac0ac1abd5bdbdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7480 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 diff --git a/http-server.c b/http-server.c index 3c3eca7..efd66f0 100644 --- a/http-server.c +++ b/http-server.c @@ -22,8 +22,14 @@ #include <unistd.h> #include "http-parser.h" #include "http-response.h" +#include "hashtable.h" #include "user.h" +#define ROUND_1 3 +#define ROUND_2 4 +#define ROUND_3 1 +#define ROUND_4 2 + // constants static char const * const HTTP_200_FORMAT = "HTTP/1.1 200 OK\r\n\ Content-Type: text/html\r\n\ @@ -33,6 +39,8 @@ 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; + + char *substring(char *string, int position, int length) { char *p; @@ -287,8 +295,13 @@ static bool handle_http_request(int sockfd, User_list *users) // char* resp_string = parse_response(resp); // printf("COOKIE CREATING RESP %s\n", resp_string); // player_session(buff, sockfd, "1_welcome.html", resp_string); + // User* new_player = new_user(sockfd); + // add_user(new_player, users); + // char* cookie = hash_table_get(resp->header, "Set-cookie: ")+13; + // cookie = strtok(cookie, ";"); + // printf("the cookie token is %s*****\n", cookie); // free(resp_string); - // free(resp); + // free_response(resp); User* new_player = new_user(sockfd); add_user(new_player, users); get_request(buff,sockfd, "1_welcome.html"); diff --git a/http-server.o b/http-server.o deleted file mode 100644 index b01a947c7792a7ea3df9585f7c5ce2caa7d9ae8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29096 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 J*$1Lw7yvPQ<-7m@ diff --git a/server b/server deleted file mode 100644 index c63bbc29bdba00c9da7a64d718dba72f1c414565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14480 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 NXc-1%A4CR10szatrI`Q# diff --git a/user.c b/user.c index b95e67f..3ecf95e 100644 --- a/user.c +++ b/user.c @@ -18,6 +18,7 @@ User* new_user(int id){ user->n_keywords = 0; user->status = WAIT; user->keywords = calloc(user->n_capacity,sizeof(char*)); + user->round = 0; assert(user->keywords); return user; } @@ -108,6 +109,20 @@ void change_player_status(int user_id, User_list* users, STATUS status){ } } +void change_player_round(int user_id, User_list* users){ + for(int i=0; i < users->n_users; i++){ + if (users->users[i]->id == user_id){ + if (users->users[i]->round < 4){ + users->users[i]->round++; + } + else{ + users->users[i]->round = 1; + } + } + } +} + + bool keyword_match(User* user, char* keyword){ printf("keyword is %s\n\n", keyword); for(int i=0; i <user->n_keywords;i++){ diff --git a/user.h b/user.h index 025b026..0858844 100644 --- a/user.h +++ b/user.h @@ -15,6 +15,7 @@ typedef struct User { int n_keywords; STATUS status; int n_capacity; + int round; }User; typedef struct User_list{ @@ -42,6 +43,8 @@ bool players_ready(User_list* users); void change_player_status(int user_id, User_list* users, STATUS status); +void change_player_round(int user_id, User_list* users); + bool keyword_match(User* user, char* keyword); void reset_players(User_list *users); diff --git a/user.o b/user.o deleted file mode 100644 index 2753a832f6660fb872898e5e75f4541b5336c52d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14288 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 N2U!3%5kjDG836K6=F0#8 -- GitLab