2022-06-23 07:25:50 +00:00
|
|
|
const std = @import("std");
|
|
|
|
const util = @import("util");
|
|
|
|
const http = @import("./lib.zig");
|
|
|
|
|
2022-06-26 07:00:14 +00:00
|
|
|
const Connection = http.Connection;
|
2022-06-23 07:25:50 +00:00
|
|
|
|
|
|
|
const request_buf_size = 1 << 16;
|
|
|
|
|
2022-07-09 20:09:30 +00:00
|
|
|
fn handleConnection(conn: http.Connection) void {
|
2022-06-23 07:25:50 +00:00
|
|
|
var request_buf: [request_buf_size]u8 = undefined;
|
|
|
|
var fba = std.heap.FixedBufferAllocator.init(&request_buf);
|
|
|
|
|
2022-07-09 20:09:30 +00:00
|
|
|
const request = http.Request.parse(fba.allocator(), conn.stream.reader()) catch |err| handleError(conn.stream.writer(), err);
|
2022-06-23 07:25:50 +00:00
|
|
|
_ = request;
|
|
|
|
}
|
|
|
|
|
2022-06-26 06:35:31 +00:00
|
|
|
fn handleError(writer: anytype, err: anyerror) !void {
|
|
|
|
const status: http.Status = switch (err) {
|
|
|
|
error.BadRequest => .bad_request,
|
|
|
|
error.MethodNotImplemented => .method_not_implemented,
|
|
|
|
error.UnknownProtocol => .unknown_protocol,
|
|
|
|
error.UnsupportedMediaType => .unsupported_media_type,
|
|
|
|
error.RequestEntityTooLarge => .request_entity_too_large,
|
|
|
|
error.HttpVersionNotSupported => .http_version_not_supported,
|
|
|
|
|
|
|
|
else => err,
|
|
|
|
};
|
|
|
|
|
|
|
|
try writer.print("HTTP/1.1 {} {}\r\n\r\n", .{ @enumToInt(status), status.phrase() });
|
|
|
|
}
|