feat(lnm): wrote part of context code
ci/woodpecker/push/build Pipeline was successful
Details
ci/woodpecker/push/build Pipeline was successful
Details
parent
e04f6e170e
commit
d119f85260
|
@ -18,16 +18,26 @@ typedef enum lnm_step_err {
|
|||
lnm_step_err_done = 0,
|
||||
lnm_step_err_io_needed,
|
||||
lnm_step_err_close,
|
||||
lnm_step_err_res,
|
||||
} lnm_step_err;
|
||||
|
||||
typedef lnm_step_err (*lnm_http_step_fn)(lnm_http_conn *conn);
|
||||
|
||||
typedef lnm_err (*lnm_http_ctx_init_fn)(void **c_ctx, void *gctx);
|
||||
|
||||
typedef void (*lnm_http_ctx_reset_fn)(void *c_ctx);
|
||||
|
||||
typedef void (*lnm_http_ctx_free_fn)(void *c_ctx);
|
||||
|
||||
/**
|
||||
* Initialize a new `lnm_http_loop`.
|
||||
*
|
||||
* @param out where to store pointer to new `lnm_http_loop`
|
||||
*/
|
||||
lnm_err lnm_http_loop_init(lnm_http_loop **out);
|
||||
lnm_err lnm_http_loop_init(lnm_http_loop **out, void *c_gctx,
|
||||
lnm_http_ctx_init_fn ctx_init,
|
||||
lnm_http_ctx_reset_fn ctx_reset,
|
||||
lnm_http_ctx_free_fn ctx_free);
|
||||
|
||||
/**
|
||||
* Append the given step fn to the step.
|
||||
|
@ -82,6 +92,9 @@ typedef struct lnm_http_loop_gctx {
|
|||
lnm_http_route **arr;
|
||||
size_t len;
|
||||
} routes;
|
||||
lnm_http_ctx_init_fn ctx_init;
|
||||
lnm_http_ctx_reset_fn ctx_reset;
|
||||
lnm_http_ctx_free_fn ctx_free;
|
||||
void *c;
|
||||
} lnm_http_loop_gctx;
|
||||
|
||||
|
|
|
@ -40,4 +40,27 @@ lnm_err lnm_http_route_init(lnm_http_route **out);
|
|||
*/
|
||||
lnm_err lnm_http_step_init(lnm_http_step **out, lnm_http_step_fn fn);
|
||||
|
||||
/**
|
||||
* Initialize a new global context object.
|
||||
*
|
||||
* @param out where to store pointer to new `lnm_http_loop_gctx`
|
||||
*/
|
||||
lnm_err lnm_http_loop_gctx_init(lnm_http_loop_gctx **out, void *c_gctx,
|
||||
lnm_http_ctx_init_fn ctx_init,
|
||||
lnm_http_ctx_reset_fn ctx_reset,
|
||||
lnm_http_ctx_free_fn ctx_free);
|
||||
|
||||
/**
|
||||
* Initialize a new context.
|
||||
*
|
||||
* @param out where to store pointer to new object
|
||||
* @param gctx global context for the loop
|
||||
*/
|
||||
lnm_err lnm_http_loop_ctx_init(lnm_http_loop_ctx **out,
|
||||
lnm_http_loop_gctx *gctx);
|
||||
|
||||
void lnm_http_loop_ctx_reset(lnm_http_loop_ctx *ctx);
|
||||
|
||||
void lnm_http_loop_ctx_free(lnm_http_loop_ctx *ctx);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -5,13 +5,20 @@
|
|||
#include "lnm/http/loop_internal.h"
|
||||
#include "lnm/loop_internal.h"
|
||||
|
||||
lnm_err lnm_http_loop_init(lnm_http_loop **out) {
|
||||
lnm_err lnm_http_loop_init(lnm_http_loop **out, void *c_gctx,
|
||||
lnm_http_ctx_init_fn ctx_init,
|
||||
lnm_http_ctx_reset_fn ctx_reset,
|
||||
lnm_http_ctx_free_fn ctx_free) {
|
||||
lnm_http_loop *hl = calloc(1, sizeof(lnm_http_loop));
|
||||
|
||||
if (hl == NULL) {
|
||||
return lnm_err_failed_alloc;
|
||||
}
|
||||
|
||||
LNM_RES2(lnm_http_loop_gctx_init((lnm_http_loop_gctx **)&hl->gctx, c_gctx,
|
||||
ctx_init, ctx_reset, ctx_free),
|
||||
free(hl));
|
||||
|
||||
*out = hl;
|
||||
|
||||
return lnm_err_ok;
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
#include "lnm/http/loop_internal.h"
|
||||
|
||||
lnm_err lnm_http_loop_gctx_init(lnm_http_loop_gctx **out, void *c_gctx,
|
||||
lnm_http_ctx_init_fn ctx_init,
|
||||
lnm_http_ctx_reset_fn ctx_reset,
|
||||
lnm_http_ctx_free_fn ctx_free) {
|
||||
lnm_http_loop_gctx *gctx = calloc(1, sizeof(lnm_http_loop_gctx));
|
||||
|
||||
if (gctx == NULL) {
|
||||
return lnm_err_failed_alloc;
|
||||
}
|
||||
|
||||
gctx->c = c_gctx;
|
||||
gctx->ctx_init = ctx_init;
|
||||
gctx->ctx_reset = ctx_reset;
|
||||
gctx->ctx_free = ctx_free;
|
||||
|
||||
*out = gctx;
|
||||
|
||||
return lnm_err_ok;
|
||||
}
|
||||
|
||||
lnm_err lnm_http_loop_ctx_init(lnm_http_loop_ctx **out,
|
||||
lnm_http_loop_gctx *gctx) {
|
||||
lnm_http_loop_ctx *ctx = calloc(1, sizeof(lnm_http_loop_ctx));
|
||||
|
||||
if (ctx == NULL) {
|
||||
return lnm_err_failed_alloc;
|
||||
}
|
||||
|
||||
LNM_RES2(gctx->ctx_init(&ctx->c, gctx), free(ctx));
|
||||
|
||||
ctx->g = gctx;
|
||||
*out = ctx;
|
||||
|
||||
return lnm_err_ok;
|
||||
}
|
||||
|
||||
void lnm_http_loop_ctx_reset(lnm_http_loop_ctx *ctx) {
|
||||
ctx->g->ctx_reset(ctx->c);
|
||||
// TODO actual reset stuff
|
||||
}
|
||||
|
||||
void lnm_http_loop_ctx_free(lnm_http_loop_ctx *ctx) {
|
||||
ctx->g->ctx_free(ctx->c);
|
||||
// TODO actual free stuff
|
||||
|
||||
free(ctx);
|
||||
}
|
Loading…
Reference in New Issue