xref: /aosp_15_r20/external/libwebsockets/lib/roles/http/server/rewrite.c (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
1*1c60b9acSAndroid Build Coastguard Worker #include "private-lib-core.h"
2*1c60b9acSAndroid Build Coastguard Worker 
3*1c60b9acSAndroid Build Coastguard Worker #if defined(LWS_WITH_HUBBUB)
4*1c60b9acSAndroid Build Coastguard Worker 
5*1c60b9acSAndroid Build Coastguard Worker struct lws_rewrite *
lws_rewrite_create(struct lws * wsi,hubbub_callback_t cb,const char * from,const char * to)6*1c60b9acSAndroid Build Coastguard Worker lws_rewrite_create(struct lws *wsi, hubbub_callback_t cb, const char *from,
7*1c60b9acSAndroid Build Coastguard Worker 		   const char *to)
8*1c60b9acSAndroid Build Coastguard Worker {
9*1c60b9acSAndroid Build Coastguard Worker 	struct lws_rewrite *r = lws_malloc(sizeof(*r), "rewrite");
10*1c60b9acSAndroid Build Coastguard Worker 
11*1c60b9acSAndroid Build Coastguard Worker 	if (!r) {
12*1c60b9acSAndroid Build Coastguard Worker 		lwsl_err("OOM\n");
13*1c60b9acSAndroid Build Coastguard Worker 		return NULL;
14*1c60b9acSAndroid Build Coastguard Worker 	}
15*1c60b9acSAndroid Build Coastguard Worker 
16*1c60b9acSAndroid Build Coastguard Worker 	if (hubbub_parser_create("UTF-8", false, &r->parser) != HUBBUB_OK) {
17*1c60b9acSAndroid Build Coastguard Worker 		lws_free(r);
18*1c60b9acSAndroid Build Coastguard Worker 
19*1c60b9acSAndroid Build Coastguard Worker 		return NULL;
20*1c60b9acSAndroid Build Coastguard Worker 	}
21*1c60b9acSAndroid Build Coastguard Worker 	r->from = from;
22*1c60b9acSAndroid Build Coastguard Worker 	r->from_len = strlen(from);
23*1c60b9acSAndroid Build Coastguard Worker 	r->to = to;
24*1c60b9acSAndroid Build Coastguard Worker 	r->to_len = strlen(to);
25*1c60b9acSAndroid Build Coastguard Worker 	r->params.token_handler.handler = cb;
26*1c60b9acSAndroid Build Coastguard Worker 	r->wsi = wsi;
27*1c60b9acSAndroid Build Coastguard Worker 	r->params.token_handler.pw = (void *)r;
28*1c60b9acSAndroid Build Coastguard Worker 	if (hubbub_parser_setopt(r->parser, HUBBUB_PARSER_TOKEN_HANDLER,
29*1c60b9acSAndroid Build Coastguard Worker 				 &r->params) != HUBBUB_OK) {
30*1c60b9acSAndroid Build Coastguard Worker 		lws_free(r);
31*1c60b9acSAndroid Build Coastguard Worker 
32*1c60b9acSAndroid Build Coastguard Worker 		return NULL;
33*1c60b9acSAndroid Build Coastguard Worker 	}
34*1c60b9acSAndroid Build Coastguard Worker 
35*1c60b9acSAndroid Build Coastguard Worker 	return r;
36*1c60b9acSAndroid Build Coastguard Worker }
37*1c60b9acSAndroid Build Coastguard Worker 
38*1c60b9acSAndroid Build Coastguard Worker int
lws_rewrite_parse(struct lws_rewrite * r,const unsigned char * in,int in_len)39*1c60b9acSAndroid Build Coastguard Worker lws_rewrite_parse(struct lws_rewrite *r,
40*1c60b9acSAndroid Build Coastguard Worker 		  const unsigned char *in, int in_len)
41*1c60b9acSAndroid Build Coastguard Worker {
42*1c60b9acSAndroid Build Coastguard Worker 	if (r && hubbub_parser_parse_chunk(r->parser, in, in_len) != HUBBUB_OK)
43*1c60b9acSAndroid Build Coastguard Worker 		return -1;
44*1c60b9acSAndroid Build Coastguard Worker 
45*1c60b9acSAndroid Build Coastguard Worker 	return 0;
46*1c60b9acSAndroid Build Coastguard Worker }
47*1c60b9acSAndroid Build Coastguard Worker 
48*1c60b9acSAndroid Build Coastguard Worker void
lws_rewrite_destroy(struct lws_rewrite * r)49*1c60b9acSAndroid Build Coastguard Worker lws_rewrite_destroy(struct lws_rewrite *r)
50*1c60b9acSAndroid Build Coastguard Worker {
51*1c60b9acSAndroid Build Coastguard Worker 	hubbub_parser_destroy(r->parser);
52*1c60b9acSAndroid Build Coastguard Worker 	lws_free(r);
53*1c60b9acSAndroid Build Coastguard Worker }
54*1c60b9acSAndroid Build Coastguard Worker 
55*1c60b9acSAndroid Build Coastguard Worker #endif
56