1
Fork 0
hare-http/net/http/server.ha
Willow Barraco 1d5c710f55 Implement server-side HTTP support
Co-authored-by: Drew DeVault <sir@cmpwn.com>
Signed-off-by: Willow Barraco <contact@willowbarraco.fr>
Signed-off-by: Drew DeVault <sir@cmpwn.com>
2024-04-19 11:22:15 +02:00

44 lines
892 B
Hare

use net;
use net::ip;
use net::tcp;
export type server = struct {
socket: net::socket,
};
export type server_request = struct {
socket: net::socket,
request: request,
};
export fn listen(ip: ip::addr, port: u16) (*server | net::error) = {
return alloc(server {
socket = tcp::listen(ip, port)?,
});
};
export fn server_finish(server: *server) void = {
net::close(server.socket)!;
free(server);
};
export fn accept(server: *server) (net::socket | net::error) = {
return net::accept(server.socket)?;
};
export fn serve(server: *server) (*server_request | net::error) = {
const socket = accept(server)?;
const request = request_parse(socket)!;
return alloc(server_request {
request = request,
socket = socket,
});
};
export fn serve_finish(serv_req: *server_request) void = {
parsed_request_finish(&serv_req.request);
net::close(serv_req.socket)!;
free(serv_req);
};