From 617c0847823af50d43260c3d3186a712dcfe29af Mon Sep 17 00:00:00 2001 From: landrigun Date: Mon, 19 Sep 2022 10:51:30 +0100 Subject: [PATCH] improv: #5 handle the request and return a response (useful for tests) --- src/handlers/request.rs | 4 ++-- src/main.rs | 23 ++++++++++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/handlers/request.rs b/src/handlers/request.rs index b6bcb65..323ba07 100644 --- a/src/handlers/request.rs +++ b/src/handlers/request.rs @@ -122,7 +122,7 @@ impl HTTPStartLine { HTTP_VERSION_REGEX.is_match(version) } - fn is_valid(&self) -> bool { + pub fn is_valid(&self) -> bool { return self.method != "" && self.target != ""; } } @@ -234,7 +234,7 @@ impl HTTPRequest { } } - fn is_valid(&self) -> bool { + pub fn is_valid(&self) -> bool { return self.start_line.is_valid(); } } diff --git a/src/main.rs b/src/main.rs index f8dd27c..baa6e5f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,14 +25,23 @@ async fn handle_connection(mut stream: TcpStream) { let mut buffer: [u8; 1024] = [0; 1024]; let n = stream.read(&mut buffer).await.unwrap(); - println!("buffer : {:?}", std::str::from_utf8(&buffer[0..n])); + let request_string = std::str::from_utf8(&buffer[0..n]).unwrap(); + let request = handle_request(request_string); - let contents = "{\"balance\": 0.00}"; - let response = format!( - "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: {}\r\n\r\n{}", - contents.len(), - contents - ); + if request.is_valid() { + let contents = "{\"status\": \"ok\"}"; + let response = format!( + "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: {}\r\n\r\n{}", + contents.len(), + contents + ); + + stream.write(response.as_bytes()).await.unwrap(); + stream.flush().await.unwrap(); + return; + } + + let response = "HTTP/1.1 400 OK\r\n\r\n".to_string(); stream.write(response.as_bytes()).await.unwrap(); stream.flush().await.unwrap(); }