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