fediglam/src/http/server.zig

31 lines
1 KiB
Zig
Raw Normal View History

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;
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);
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() });
}