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_done = 0,
 | 
				
			||||||
  lnm_step_err_io_needed,
 | 
					  lnm_step_err_io_needed,
 | 
				
			||||||
  lnm_step_err_close,
 | 
					  lnm_step_err_close,
 | 
				
			||||||
 | 
					  lnm_step_err_res,
 | 
				
			||||||
} lnm_step_err;
 | 
					} lnm_step_err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef lnm_step_err (*lnm_http_step_fn)(lnm_http_conn *conn);
 | 
					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`.
 | 
					 * Initialize a new `lnm_http_loop`.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @param out where to store pointer to 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.
 | 
					 * Append the given step fn to the step.
 | 
				
			||||||
| 
						 | 
					@ -82,6 +92,9 @@ typedef struct lnm_http_loop_gctx {
 | 
				
			||||||
    lnm_http_route **arr;
 | 
					    lnm_http_route **arr;
 | 
				
			||||||
    size_t len;
 | 
					    size_t len;
 | 
				
			||||||
  } routes;
 | 
					  } routes;
 | 
				
			||||||
 | 
					  lnm_http_ctx_init_fn ctx_init;
 | 
				
			||||||
 | 
					  lnm_http_ctx_reset_fn ctx_reset;
 | 
				
			||||||
 | 
					  lnm_http_ctx_free_fn ctx_free;
 | 
				
			||||||
  void *c;
 | 
					  void *c;
 | 
				
			||||||
} lnm_http_loop_gctx;
 | 
					} 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);
 | 
					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
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,13 +5,20 @@
 | 
				
			||||||
#include "lnm/http/loop_internal.h"
 | 
					#include "lnm/http/loop_internal.h"
 | 
				
			||||||
#include "lnm/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));
 | 
					  lnm_http_loop *hl = calloc(1, sizeof(lnm_http_loop));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (hl == NULL) {
 | 
					  if (hl == NULL) {
 | 
				
			||||||
    return lnm_err_failed_alloc;
 | 
					    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;
 | 
					  *out = hl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return lnm_err_ok;
 | 
					  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