Nameless 08bdaf3bd6
std.http: add http server
* extract http protocol into protocol.zig, as it is shared between client and server
* coalesce Request and Response back into Client.zig, they don't contain
  any large chunks of code anymore
* http.Server is implemented as basic as possible, a simple example below:

```zig
fn handler(res: *Server.Response) !void {
    while (true) {
        defer res.reset();

        try res.waitForCompleteHead();
        res.headers.transfer_encoding = .{ .content_length = 14 };
        res.headers.connection = res.request.headers.connection;
        try res.sendResponseHead();
        _ = try res.write("Hello, World!\n");

        if (res.connection.closing) break;
    }
}

pub fn main() !void {
    var server = Server.init(std.heap.page_allocator, .{ .reuse_address = true });
    defer server.deinit();

    try server.listen(try net.Address.parseIp("127.0.0.1", 8080));

    while (true) {
        const res = try server.accept(.{ .dynamic = 8192 });

        const thread = try std.Thread.spawn(.{}, handler, .{res});
        thread.detach();
    }
}
```
2023-04-08 09:59:35 -05:00
..
2023-03-18 16:01:09 -07:00
2023-01-31 15:09:35 -07:00
2023-01-31 15:09:35 -07:00
2023-04-05 23:22:29 -07:00
2023-01-26 16:36:13 -07:00
2023-01-26 16:36:14 -07:00
2023-04-08 09:59:35 -05:00
2023-02-04 15:19:53 -05:00
2022-11-04 00:09:27 +03:30
2023-04-06 08:40:02 -07:00