From 71c558d7bfb1358cb8c3b7af7ef12b19a0cbd394 Mon Sep 17 00:00:00 2001 From: anulax1225 Date: Sun, 3 Mar 2024 14:52:26 +0100 Subject: [PATCH] Created a simple http client/server --- sandbox/client/client.cpp | 20 ++++++++------ sandbox/server/server.cpp | 55 ++++++++++++++++++++++++++------------- 2 files changed, 49 insertions(+), 26 deletions(-) diff --git a/sandbox/client/client.cpp b/sandbox/client/client.cpp index 3a4601c..5abef3d 100644 --- a/sandbox/client/client.cpp +++ b/sandbox/client/client.cpp @@ -2,25 +2,29 @@ using namespace Bk::Net; +void http_client(); + int main() +{ + http_client(); + return 0; +} + +void http_client() { log(dns_lookup("edus2.rpn.ch", IpVersion::IPv4)[0]) IpAddress ip("127.0.0.1"); - Socket sock(ip, 9000, IpProtocol::TCP); + Socket sock(ip, 80, IpProtocol::TCP); if(!sock.conn()) { perror("Couldn't connect to the end point."); exit(1); } - Packet packet, meta; - std::string str("Hello world"); + Packet packet; + std::string str("GET / HTTP/1.1\r\n\r\n"); packet.push(str.c_str(), str.length()); - meta.push(packet.size()); - - sock.write(meta.payload); - sock.write(packet.payload); - return 0; + sock.send(packet.payload); } \ No newline at end of file diff --git a/sandbox/server/server.cpp b/sandbox/server/server.cpp index 82a39f8..b346432 100644 --- a/sandbox/server/server.cpp +++ b/sandbox/server/server.cpp @@ -2,28 +2,47 @@ using namespace Bk::Net; +void http_server(); +std::string http_handle(Socket& sock, Connection conn); + int main() +{ + http_server(); + return 0; +} + +void http_server() { IpAddress ip("127.0.0.1"); - Socket sock(ip, 9000, IpProtocol::TCP); - - bool running = sock.init() && sock.start(50); - - while (running) - { - Connection conn; - if ((conn = sock.ack()) > 0) + Socket sock(ip, 80, IpProtocol::TCP); + bool running = sock.init() && sock.start(5); + while (running) + { + Connection conn = sock.ack(); + if (conn >= 0) { - log("New Connection") - Packet meta_data(sock.recv(conn, 4)); - int length = meta_data.pull(); - if (length > 0) - { - Packet data(sock.recv(conn, length + 2)); - log(data.pull(length).release()); - } - close(conn); + log(http_handle(sock, conn)); } } - return 0; +} + +std::string http_handle(Socket& sock, Connection conn) +{ + Packet req; + + bool reading = true; + while(reading) + { + std::vector raw_data; + raw_data = sock.recv(conn, 4); + reading = req.append_data(raw_data); + } + + close(conn); + + int req_size = req.size(); + std::unique_ptr req_test = req.pull(req_size); + + if (req_size) return std::string(req_test.release(), req_size); + return ""; } \ No newline at end of file