87 lines
1.9 KiB
C
87 lines
1.9 KiB
C
#include <stdlib.h>
|
|
|
|
#include "lnm/common.h"
|
|
#include "lnm/http/loop.h"
|
|
#include "lnm/http/loop_internal.h"
|
|
#include "lnm/loop_internal.h"
|
|
|
|
lnm_err lnm_http_loop_init(lnm_http_loop **out) {
|
|
lnm_http_loop *hl = calloc(1, sizeof(lnm_http_loop));
|
|
|
|
if (hl == NULL) {
|
|
return lnm_err_failed_alloc;
|
|
}
|
|
|
|
*out = hl;
|
|
|
|
return lnm_err_ok;
|
|
}
|
|
|
|
lnm_err lnm_http_step_init(lnm_http_step **out, lnm_http_step_fn fn) {
|
|
lnm_http_step *step = calloc(1, sizeof(lnm_http_step));
|
|
|
|
if (step == NULL) {
|
|
return lnm_err_failed_alloc;
|
|
}
|
|
|
|
step->fn = fn;
|
|
*out = step;
|
|
|
|
return lnm_err_ok;
|
|
}
|
|
|
|
lnm_err lnm_http_step_append(lnm_http_step **out, lnm_http_step *step,
|
|
lnm_http_step_fn fn) {
|
|
LNM_RES(lnm_http_step_init(out, fn));
|
|
|
|
step->next = *out;
|
|
|
|
return lnm_err_ok;
|
|
}
|
|
|
|
lnm_err lnm_http_route_init(lnm_http_route **out) {
|
|
lnm_http_route *route = calloc(1, sizeof(lnm_http_route));
|
|
|
|
if (route == NULL) {
|
|
return lnm_err_failed_alloc;
|
|
}
|
|
|
|
*out = route;
|
|
|
|
return lnm_err_ok;
|
|
}
|
|
|
|
lnm_err lnm_http_route_init_literal(lnm_http_route **out, const char *path,
|
|
lnm_http_step *step) {
|
|
LNM_RES(lnm_http_route_init(out));
|
|
|
|
(*out)->type = lnm_http_route_type_literal;
|
|
(*out)->route.s = path;
|
|
(*out)->step = step;
|
|
|
|
return lnm_err_ok;
|
|
}
|
|
|
|
lnm_err lnm_http_route_init_regex(lnm_http_route **out, const char *pattern,
|
|
int regex_group_count, lnm_http_step *step) {
|
|
regex_t *regex = calloc(1, sizeof(regex_t));
|
|
|
|
if (regex == NULL) {
|
|
return lnm_err_failed_alloc;
|
|
}
|
|
|
|
if (regcomp(regex, pattern, REG_EXTENDED) != 0) {
|
|
free(regex);
|
|
return lnm_err_bad_regex;
|
|
}
|
|
|
|
LNM_RES2(lnm_http_route_init(out), free(regex));
|
|
|
|
(*out)->type = lnm_http_route_type_regex;
|
|
(*out)->route.regex = regex;
|
|
(*out)->regex_group_count = regex_group_count;
|
|
(*out)->step = step;
|
|
|
|
return lnm_err_ok;
|
|
}
|