#include "lnm/http/res.h" #include "lnm/log.h" #include "lnm/http/loop.h" #include "lnm/loop.h" lnm_err ctx_init(void **c_ctx, void *gctx) { *c_ctx = NULL; return lnm_err_ok; } void ctx_reset(void *c_ctx) {} void ctx_free(void *c_ctx) {} lnm_err data_streamer(uint64_t *written, char *buf, lnm_http_conn *conn, uint64_t offset, uint64_t len) { // Don't do anything, just let the application return random data stored in // the read buffer. The goal is to benchmark the networking pipeline *written = len; return lnm_err_ok; } lnm_http_step_err step_fn(lnm_http_conn *conn) { lnm_http_loop_ctx *ctx = conn->ctx; uint64_t len = 1 << 30; lnm_http_res_body_set_fn(&ctx->res, data_streamer, len); return lnm_http_step_err_done; } int main() { lnm_http_loop *hl; lnm_http_loop_init(&hl, NULL, ctx_init, ctx_reset, ctx_free); lnm_http_router *router; lnm_http_router_init(&router); lnm_http_route *route; lnm_http_router_add(&route, router, lnm_http_method_get, "/"); lnm_http_route_step_append(route, step_fn, false); lnm_http_loop_router_set(hl, router); lnm_log_init_global(); lnm_log_register_stdout(lnm_log_level_warning); printf("res = %i\n", lnm_http_loop_run(hl, 8080, 1, 0)); }