fediglam/src/main/controllers/api/streaming.zig

37 lines
1.1 KiB
Zig

const http = @import("http");
const std = @import("std");
pub const streaming = struct {
pub const method = .GET;
pub const path = "/streaming";
pub fn handler(req: anytype, response: anytype, _: anytype) !void {
var iter = req.headers.iterator();
std.log.debug("--Headers--", .{});
while (iter.next()) |pair| {
std.log.debug("{s}: {s}", .{ pair.key_ptr.*, pair.value_ptr.* });
}
const res = response.hijack();
var socket = try http.socket.handshake(req.allocator, req.base_request, res);
while (true) {
var message = try socket.accept();
defer message.close();
std.log.debug("Message received", .{});
const reader = message.reader();
const msg = try reader.readAllAlloc(req.allocator, 1 << 63);
defer req.allocator.free(msg);
var response_msg = try socket.openMessage(.text, req.allocator, .{});
defer response_msg.close();
try response_msg.writer().writeAll(msg);
try response_msg.finish();
std.log.debug("{s}", .{msg});
}
}
};