rewrite.c 1003 B

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