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