h2o_utils.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_H2O_UTILS_H
  3. #define NETDATA_H2O_UTILS_H
  4. #include "h2o/memory.h"
  5. #define __HAS_URL_PARAMS(reqptr) ((reqptr)->query_at != SIZE_MAX && ((reqptr)->path.len - (reqptr)->query_at > 1))
  6. #define IF_HAS_URL_PARAMS(reqptr) if __HAS_URL_PARAMS(reqptr)
  7. #define UNLESS_HAS_URL_PARAMS(reqptr) if (!__HAS_URL_PARAMS(reqptr))
  8. #define URL_PARAMS_IOVEC_INIT(reqptr) { .base = &(reqptr)->path.base[(reqptr)->query_at + 1], \
  9. .len = (reqptr)->path.len - (reqptr)->query_at - 1 }
  10. #define URL_PARAMS_IOVEC_INIT_WITH_QUESTIONMARK(reqptr) { .base = &(reqptr)->path.base[(reqptr)->query_at], \
  11. .len = (reqptr)->path.len - (reqptr)->query_at }
  12. #define PRINTF_H2O_IOVEC_FMT "%.*s"
  13. #define PRINTF_H2O_IOVEC(iovec) ((int)(iovec)->len), ((iovec)->base)
  14. char *iovec_to_cstr(h2o_iovec_t *str);
  15. typedef struct h2o_iovec_pair {
  16. h2o_iovec_t name;
  17. h2o_iovec_t value;
  18. } h2o_iovec_pair_t;
  19. typedef H2O_VECTOR(h2o_iovec_pair_t) h2o_iovec_pair_vector_t;
  20. // Takes the part of url behind ? (the url encoded parameters)
  21. // and parse it to vector of name/value pairs without copying the actual strings
  22. h2o_iovec_pair_vector_t *parse_URL_params(h2o_mem_pool_t *pool, h2o_iovec_t params_string);
  23. // Searches for parameter by name (provided in needle)
  24. // returns pointer to it or NULL
  25. h2o_iovec_pair_t *get_URL_param_by_name(h2o_iovec_pair_vector_t *params_vec, const void *needle, size_t needle_len);
  26. char *url_unescape(const char *url);
  27. #endif /* NETDATA_H2O_UTILS_H */