From 6678825506e92b811176fb00d33ca478493e94b0 Mon Sep 17 00:00:00 2001 From: Nick Chambers Date: Thu, 18 Apr 2024 11:34:59 -0500 Subject: [PATCH] Add request inspection logic --- src/Cobweb.java | 4 ++++ .../spookyinternet/cobweb/HttpConnection.java | 11 +++++++++++ .../spookyinternet/cobweb/HttpRequest.java | 19 ++++++++++++++++++- src/com/spookyinternet/cobweb/HttpThread.java | 4 +++- 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/com/spookyinternet/cobweb/HttpConnection.java diff --git a/src/Cobweb.java b/src/Cobweb.java index d4cbab1..63c2c5c 100644 --- a/src/Cobweb.java +++ b/src/Cobweb.java @@ -10,6 +10,10 @@ public class Cobweb { try { CobwebServer srv = new CobwebServer(PORT, HOST); + srv.inspect("get", "/*", (req) -> { + System.out.println(req.conn.ip + ":" + req.conn.port + " wants " + req.url()); + }); + srv.on("get", "/hello/{?name}", (req) -> { if(req.params.length > 0) { return new HttpStaticResponse("Hello, " + req.params[0] + "!"); diff --git a/src/com/spookyinternet/cobweb/HttpConnection.java b/src/com/spookyinternet/cobweb/HttpConnection.java new file mode 100644 index 0000000..6a45548 --- /dev/null +++ b/src/com/spookyinternet/cobweb/HttpConnection.java @@ -0,0 +1,11 @@ +package com.spookyinternet.cobweb; + +public class HttpConnection { + public String ip; + public int port; + + public HttpConnection(String ip, int port) { + this.ip = ip; + this.port = port; + } +} diff --git a/src/com/spookyinternet/cobweb/HttpRequest.java b/src/com/spookyinternet/cobweb/HttpRequest.java index 8b69917..1a0b6a5 100644 --- a/src/com/spookyinternet/cobweb/HttpRequest.java +++ b/src/com/spookyinternet/cobweb/HttpRequest.java @@ -4,14 +4,19 @@ import java.io.*; import java.util.*; public class HttpRequest { + public HttpConnection conn; public String method; public String path; public Map headers; public String[] params; - public HttpRequest(BufferedReader reader) { + public HttpRequest(BufferedReader reader, String ip, int port) { + this.headers = new HashMap(); + System.out.println(ip + "-" + port); HttpTokenStream tokens = new HttpTokenStream(reader); boolean processed = false; + String header = null; + StringBuilder value = new StringBuilder(); while(tokens.hasNext() && !processed) { HttpToken token = tokens.next(); @@ -20,9 +25,21 @@ public class HttpRequest { this.method = token.value.toLowerCase(); } else if(token.line == 1 && token.seq == 3) { this.path = token.value; + } else if(token.seq == 1 && token.value.endsWith(":")) { + header = token.value.substring(0, token.value.length() - 1); + } else if(token.eol && header != null) { + this.headers.put(header.toLowerCase(), value.toString()); + header = null; + value = new StringBuilder(); + } else if(header != null && token.seq > 2) { + value.append(token.value); } processed = token.value == "\r\n" && token.complete(); } } + + public String url() { + return "http://" + this.headers.get("host") + this.path; + } } diff --git a/src/com/spookyinternet/cobweb/HttpThread.java b/src/com/spookyinternet/cobweb/HttpThread.java index 58484ba..10db4d8 100644 --- a/src/com/spookyinternet/cobweb/HttpThread.java +++ b/src/com/spookyinternet/cobweb/HttpThread.java @@ -19,7 +19,9 @@ public class HttpThread extends Thread { try { InputStream stream = this.sock.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); - HttpRequest req = new HttpRequest(reader); + String ip = this.sock.getInetAddress().toString().substring(1); + int port = this.sock.getPort(); + HttpRequest req = new HttpRequest(reader, ip, port); } catch(Exception err) { // :) }