From 8c512ca29279d1e36ac7fa2134b807e112fcb818 Mon Sep 17 00:00:00 2001 From: Neeserg Parajuli <n.parajuli@student.unimelb.edu.au> Date: Tue, 17 Apr 2018 08:40:53 +0000 Subject: [PATCH] not working with tests but working sending and recieving using clients. --- form_response.c | 18 +++++-- server | Bin 14728 -> 14752 bytes server.c | 5 +- test/directory/index.html | 5 ++ test/directory/sample.jpg | Bin 0 -> 17868 bytes test/directory/script.js | 3 ++ test/directory/style.css | 3 ++ test/index.html | 5 ++ test/sample.jpg | Bin 0 -> 17868 bytes test/script.js | 3 ++ test/style.css | 3 ++ test_log.txt | 8 ++++ test_script.sh | 96 ++++++++++++++++++++++++++++++++++++++ 13 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 test/directory/index.html create mode 100644 test/directory/sample.jpg create mode 100644 test/directory/script.js create mode 100644 test/directory/style.css create mode 100644 test/index.html create mode 100644 test/sample.jpg create mode 100644 test/script.js create mode 100644 test/style.css create mode 100644 test_log.txt create mode 100755 test_script.sh diff --git a/form_response.c b/form_response.c index 945a1f7..b77caaf 100644 --- a/form_response.c +++ b/form_response.c @@ -54,7 +54,6 @@ int sendresponse(int sockfd, struct GET_header* header){ fp = fopen(header->filepath, "r"); struct RESP_header resphead; char buffer[BUFFERSIZE]; - printf("%zu\n", sizeof(buffer)); memset(buffer, 0, BUFFERSIZE); if (fp == NULL) { @@ -78,8 +77,21 @@ int sendresponse(int sockfd, struct GET_header* header){ return send(sockfd, buffer, BUFFERSIZE, 0); } formresponse(buffer, &resphead); - fclose(fp); - return send(sockfd, buffer, BUFFERSIZE, 0); + if(send(sockfd, buffer, BUFFERSIZE, 0)<0){ + return -1; + } + while(!feof(fp)){ + memset(buffer, 0, BUFFERSIZE); + int n_bytes = fread(buffer, 1, BUFFERSIZE, fp); + if(n_bytes <=0){ + break; + } + if(send(sockfd, buffer,n_bytes,0)<0){ + return -1; + } + + } + return 0; } fclose(fp); diff --git a/server b/server index 1c46ef1dce07553ecf74015d404308972ce0da59..b3ce87548f745b9c48c1b643b9813367ae78a383 100755 GIT binary patch delta 2729 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 delta 2622 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˅<YGhzw$N|YR)`Q8(U~>6nM=j~eC0Zhk=RkbPM^K%hVhdz0IGr*uFuVuJ zGBQuTs3p!Q0VcITq@*1S1A`zFX54yBHq;hpOaZAetYv}t-$VrB8VRUBAA>`Xo8bo+ zL>y!v2zP>XNzMhC%pl32f#(0klMiZ(Gj0c|+5AEK47BZZQ1{H{`Fb_Xn-z=_7#XuC zHyZ16mas$2E!n)&_&6g|5zpi%Q#~$NdTWuKyvx)~5SF?pNP?_p03{VOeNIH1&(h4C bGXdHHOxRp$R?oz^d-6|<cE;0_8!hDlsNsrQ diff --git a/server.c b/server.c index 30ef036..ede5a95 100644 --- a/server.c +++ b/server.c @@ -16,7 +16,6 @@ int main(int argc, char *argv[]){ fprintf(stderr,"ERROR, no port provided\n");//to check if there is no port provided at start exit(1); } - printf("%s\n", argv[2]); strcpy(root, argv[2]); memset(&info, 0, sizeof(info)); info.ai_family = AF_UNSPEC; ///sets it to unspecified @@ -93,9 +92,10 @@ void* handleclient(void * newsockfd){ char buffer[BUFFERSIZE]; bzero(buffer, BUFFERSIZE); - if ((numbytes = recv(sockfd, buffer, 255, 0)) <0) + if ((numbytes = recv(sockfd, buffer, BUFFERSIZE, 0)) <0) { perror("ERROR recieving"); + close(sockfd); return NULL; } struct GET_header header; @@ -105,6 +105,7 @@ void* handleclient(void * newsockfd){ if (sendresponse(sockfd, &header) <0) { perror("ERROR sending"); + close(sockfd); return NULL; } diff --git a/test/directory/index.html b/test/directory/index.html new file mode 100644 index 0000000..e499c4e --- /dev/null +++ b/test/directory/index.html @@ -0,0 +1,5 @@ +<html> + <body> + <p>hello</p> + </body> +</html> \ No newline at end of file diff --git a/test/directory/sample.jpg b/test/directory/sample.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14ce979b6625ed3b809778ab969b7b0f30690cb6 GIT binary patch literal 17868 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 A=>Px# literal 0 HcmV?d00001 diff --git a/test/directory/script.js b/test/directory/script.js new file mode 100644 index 0000000..57efed4 --- /dev/null +++ b/test/directory/script.js @@ -0,0 +1,3 @@ +function test(){ + alert("hello world!"); +} diff --git a/test/directory/style.css b/test/directory/style.css new file mode 100644 index 0000000..4a57d6b --- /dev/null +++ b/test/directory/style.css @@ -0,0 +1,3 @@ +body { + background-color: lightblue; +} \ No newline at end of file diff --git a/test/index.html b/test/index.html new file mode 100644 index 0000000..e499c4e --- /dev/null +++ b/test/index.html @@ -0,0 +1,5 @@ +<html> + <body> + <p>hello</p> + </body> +</html> \ No newline at end of file diff --git a/test/sample.jpg b/test/sample.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14ce979b6625ed3b809778ab969b7b0f30690cb6 GIT binary patch literal 17868 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 A=>Px# literal 0 HcmV?d00001 diff --git a/test/script.js b/test/script.js new file mode 100644 index 0000000..57efed4 --- /dev/null +++ b/test/script.js @@ -0,0 +1,3 @@ +function test(){ + alert("hello world!"); +} diff --git a/test/style.css b/test/style.css new file mode 100644 index 0000000..4a57d6b --- /dev/null +++ b/test/style.css @@ -0,0 +1,3 @@ +body { + background-color: lightblue; +} \ No newline at end of file diff --git a/test_log.txt b/test_log.txt new file mode 100644 index 0000000..cd676f4 --- /dev/null +++ b/test_log.txt @@ -0,0 +1,8 @@ +ERROR sending: Connection reset by peer +ERROR sending: Connection reset by peer +ERROR sending: Connection reset by peer +ERROR sending: Connection reset by peer +ERROR sending: Connection reset by peer +ERROR sending: Connection reset by peer +ERROR sending: Connection reset by peer +ERROR sending: Connection reset by peer diff --git a/test_script.sh b/test_script.sh new file mode 100755 index 0000000..17f5081 --- /dev/null +++ b/test_script.sh @@ -0,0 +1,96 @@ +#!/bin/bash +if [ "$#" -ne 2 ]; then + echo "Usage: $0 server_name port" >&2 + exit 1 +fi +./$1 $2 ./test &>test_log.txt & +echo "Starting server, saving log: $temp_log_file" + +sleep 1s +server_pid=$! +if ps -p $server_pid > /dev/null +then + echo "Server started with PID: $server_pid" +else + echo "Error starting server, check test_log.txt" + exit 1 +fi +base_url="http://127.0.0.1:$2/" +sub_url="${base_url}directory/" + +web_root="./test/" +sub_root=${web_root}"directory/" +index_file="index.html" +css_file="style.css" +javascript_file="script.js" +jpeg_file="sample.jpg" +mime_html="Content-Type: text/html$" +mime_jpeg="Content-Type: image/jpeg$" +mime_css="Content-Type: text/css$" +mime_javascript="Content-Type: text/javascript$|Content-Type: application/javascript$" + +do_http_get () { + test_num=$1 + test_desc=$2 + test_url=$3 + test_file=$4 + test_resp=$5 + test_mime=$6 + + temp_file="$(mktemp /tmp/myscript.XXXXXX)" + + temp_header="$(mktemp /tmp/myscript.XXXXXX)" + + header_pass=false + get_pass=false + mime_pass=false + wget -q --server-response -O $temp_file $test_url 2> $temp_header + if [ "$test_resp" == "404" ];then + if grep -Eiq 'HTTP/1.0 404|HTTP/1.1 404' $temp_header + then + header_pass=true + fi + get_pass=true + mime_pass=true + else + if grep -Eiq 'HTTP/1.0 200 OK$|HTTP/1.1 200 OK$' $temp_header + then + header_pass=true + fi + if grep -Eiq "$test_mime" $temp_header + then + mime_pass=true + fi + diff $test_file $temp_file &>/dev/null + diff_res=$? + if [ $diff_res -eq 0 ]; + then + get_pass=true + else + get_pass=false + diff $test_file $temp_file + fi + fi + rm -f "$temp_file" + rm -f "$temp_header" + + if $header_pass && $get_pass && $mime_pass; + then + echo "Test $test_num: $test_desc: PASS" + else + echo "Test $test_num: $test_desc: FAIL: header:$header_pass, get:$get_pass, mime:$mime_pass" + fi +} + +do_http_get 1 "GET HTML file in root" $base_url$index_file $web_root$index_file "200" "$mime_html" +do_http_get 2 "GET Non-existent HTML file in root" $base_url"junk.html" $web_root$index_file "404" +do_http_get 3 "GET CSS file in root" $base_url$css_file $web_root$css_file "200" "$mime_css" +do_http_get 4 "GET JavaScript file in root" $base_url$javascript_file $web_root$javascript_file "200" "$mime_javascript" +do_http_get 5 "GET JPEG file in root" $base_url$jpeg_file $web_root$jpeg_file "200" "$mime_jpeg" +do_http_get 6 "GET HTML file in directory" "$sub_url$index_file" "$sub_root$index_file" "200" "$mime_html" +do_http_get 7 "GET CSS file in directory" "$sub_url$css_file" "$sub_root$css_file" "200" "$mime_css" +do_http_get 8 "GET JavaScript file in directory" "$sub_url$javascript_file" "$sub_root$javascript_file" "200" "$mime_javascript" +do_http_get 9 "GET JPEG file in directory" "$sub_url$jpeg_file" "$sub_root$jpeg_file" "200" "$mime_jpeg" + + +kill $server_pid -- GitLab