Coverage Report

Created: 2026-03-09 06:24

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/h2o/include/h2o/url.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2014,2015 DeNA Co., Ltd.
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a copy
5
 * of this software and associated documentation files (the "Software"), to
6
 * deal in the Software without restriction, including without limitation the
7
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8
 * sell copies of the Software, and to permit persons to whom the Software is
9
 * furnished to do so, subject to the following conditions:
10
 *
11
 * The above copyright notice and this permission notice shall be included in
12
 * all copies or substantial portions of the Software.
13
 *
14
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20
 * IN THE SOFTWARE.
21
 */
22
#ifndef h2o__url_h
23
#define h2o__url_h
24
25
#include <sys/un.h>
26
#include "h2o/memory.h"
27
#include "h2o/string_.h"
28
29
typedef struct st_h2o_url_scheme_t {
30
    h2o_iovec_t name;
31
    uint16_t default_port;
32
    int is_ssl;
33
} h2o_url_scheme_t;
34
35
extern const h2o_url_scheme_t H2O_URL_SCHEME_HTTP, H2O_URL_SCHEME_HTTPS;
36
extern const h2o_url_scheme_t H2O_URL_SCHEME_MASQUE;
37
/**
38
 * used by fastcgi handler
39
 */
40
extern const h2o_url_scheme_t H2O_URL_SCHEME_FASTCGI;
41
42
typedef struct st_h2o_url_t {
43
    const h2o_url_scheme_t *scheme;
44
    h2o_iovec_t authority; /* i.e. host:port */
45
    h2o_iovec_t host;
46
    h2o_iovec_t path;
47
    uint16_t _port;
48
} h2o_url_t;
49
50
/**
51
 * retrieves the port number from url
52
 */
53
static uint16_t h2o_url_get_port(const h2o_url_t *url);
54
/**
55
 * removes "..", ".", decodes %xx from a path representation
56
 * @param pool memory pool to be used in case the path contained references to directories
57
 * @param path source path
58
 * @param len source length
59
 * @param returns offset of '?' within `path` if found, or SIZE_MAX if not
60
 * @param norm_indexes mapping the normalized version to the input version
61
 * @param null_char_found if a NULL character was found in the normalized path being returned
62
 * @return buffer pointing to source, or buffer pointing to an allocated chunk with normalized representation of the given path
63
 */
64
h2o_iovec_t h2o_url_normalize_path(h2o_mem_pool_t *pool, const char *path, size_t len, size_t *query_at, size_t **norm_indexes,
65
                                   int *null_char_found);
66
/**
67
 * initializes URL object given scheme, authority, and path
68
 * @param the output
69
 * @param scheme scheme
70
 * @param authority
71
 * @param path
72
 * @return 0 if successful
73
 */
74
static int h2o_url_init(h2o_url_t *url, const h2o_url_scheme_t *scheme, h2o_iovec_t authority, h2o_iovec_t path);
75
76
int h2o_url_init_with_hostport(h2o_url_t *url, h2o_mem_pool_t *pool, const h2o_url_scheme_t *scheme, h2o_iovec_t host,
77
                               uint16_t port, h2o_iovec_t path);
78
int h2o_url_init_with_sun_path(h2o_url_t *url, h2o_mem_pool_t *pool, const h2o_url_scheme_t *scheme, h2o_iovec_t sun_path,
79
                               h2o_iovec_t path);
80
81
/**
82
 * Parses absolute URL (either http or https). Upon successful return, `path` attribute of the returned object is guaranteed to be
83
 * in absolute form (i.e., starts with `/`) so that it can be passed directly to HTTP clients.
84
 */
85
int h2o_url_parse(h2o_mem_pool_t *pool, const char *url, size_t url_len, h2o_url_t *result);
86
/**
87
 * parses relative URL
88
 */
89
int h2o_url_parse_relative(h2o_mem_pool_t *pool, const char *url, size_t url_len, h2o_url_t *result);
90
/**
91
 * parses the authority and returns the next position (i.e. start of path)
92
 * @return pointer to the end of hostport if successful, or NULL if failed.  *port becomes the specified port number or 65535 if not
93
 */
94
const char *h2o_url_parse_hostport(const char *s, size_t len, h2o_iovec_t *host, uint16_t *port);
95
/**
96
 * resolves the URL (stored to `dest` as well as returning the stringified representation (always allocated using pool)
97
 */
98
h2o_iovec_t h2o_url_resolve(h2o_mem_pool_t *pool, const h2o_url_t *base, const h2o_url_t *relative, h2o_url_t *dest);
99
/**
100
 * resolves the path part of the URL (both the arguments are modified; the result is h2o_concat(*base, *relative))
101
 */
102
void h2o_url_resolve_path(h2o_iovec_t *base, h2o_iovec_t *relative);
103
/**
104
 * stringifies the URL
105
 */
106
static h2o_iovec_t h2o_url_stringify(h2o_mem_pool_t *pool, const h2o_url_t *url);
107
/**
108
 * copies a URL object (null-terminates all the string elements)
109
 */
110
void h2o_url_copy(h2o_mem_pool_t *pool, h2o_url_t *dest, const h2o_url_t *src);
111
/**
112
 * extracts sockaddr_un from host and returns NULL (or returns an error string if failed)
113
 */
114
const char *h2o_url_host_to_sun(h2o_iovec_t host, struct sockaddr_un *sa);
115
extern const char h2o_url_host_to_sun_err_is_not_unix_socket[];
116
117
/* inline definitions */
118
119
inline int h2o_url_init(h2o_url_t *url, const h2o_url_scheme_t *scheme, h2o_iovec_t authority, h2o_iovec_t path)
120
3.56k
{
121
3.56k
    if (h2o_url_parse_hostport(authority.base, authority.len, &url->host, &url->_port) != authority.base + authority.len)
122
0
        return -1;
123
3.56k
    url->scheme = scheme;
124
3.56k
    url->authority = authority;
125
3.56k
    url->path = path;
126
3.56k
    return 0;
127
3.56k
}
Unexecuted instantiation: driver.cc:h2o_url_init(st_h2o_url_t*, st_h2o_url_scheme_t const*, st_h2o_iovec_t, st_h2o_iovec_t)
Unexecuted instantiation: driver_common.cc:h2o_url_init(st_h2o_url_t*, st_h2o_url_scheme_t const*, st_h2o_iovec_t, st_h2o_iovec_t)
Unexecuted instantiation: socketpool.c:h2o_url_init
Unexecuted instantiation: url.c:h2o_url_init
Unexecuted instantiation: roundrobin.c:h2o_url_init
Unexecuted instantiation: config.c:h2o_url_init
Unexecuted instantiation: configurator.c:h2o_url_init
Unexecuted instantiation: context.c:h2o_url_init
Unexecuted instantiation: headers.c:h2o_url_init
Unexecuted instantiation: request.c:h2o_url_init
Unexecuted instantiation: util.c:h2o_url_init
Unexecuted instantiation: access_log.c:h2o_url_init
Unexecuted instantiation: file.c:h2o_url_init
Unexecuted instantiation: mimemap.c:h2o_url_init
proxy.c:h2o_url_init
Line
Count
Source
120
3.56k
{
121
3.56k
    if (h2o_url_parse_hostport(authority.base, authority.len, &url->host, &url->_port) != authority.base + authority.len)
122
0
        return -1;
123
3.56k
    url->scheme = scheme;
124
3.56k
    url->authority = authority;
125
3.56k
    url->path = path;
126
3.56k
    return 0;
127
3.56k
}
Unexecuted instantiation: http1.c:h2o_url_init
Unexecuted instantiation: connection.c:h2o_url_init
Unexecuted instantiation: frame.c:h2o_url_init
Unexecuted instantiation: hpack.c:h2o_url_init
Unexecuted instantiation: scheduler.c:h2o_url_init
Unexecuted instantiation: stream.c:h2o_url_init
Unexecuted instantiation: http2_debug_state.c:h2o_url_init
Unexecuted instantiation: common.c:h2o_url_init
Unexecuted instantiation: server.c:h2o_url_init
Unexecuted instantiation: http3client.c:h2o_url_init
Unexecuted instantiation: httpclient.c:h2o_url_init
Unexecuted instantiation: absprio.c:h2o_url_init
Unexecuted instantiation: logconf.c:h2o_url_init
Unexecuted instantiation: compress.c:h2o_url_init
Unexecuted instantiation: gzip.c:h2o_url_init
Unexecuted instantiation: headers_util.c:h2o_url_init
Unexecuted instantiation: qpack.c:h2o_url_init
Unexecuted instantiation: http1client.c:h2o_url_init
Unexecuted instantiation: http2client.c:h2o_url_init
Unexecuted instantiation: pipe_sender.c:h2o_url_init
Unexecuted instantiation: driver_url.cc:h2o_url_init(st_h2o_url_t*, st_h2o_url_scheme_t const*, st_h2o_iovec_t, st_h2o_iovec_t)
Unexecuted instantiation: driver_h3.cc:h2o_url_init(st_h2o_url_t*, st_h2o_url_scheme_t const*, st_h2o_iovec_t, st_h2o_iovec_t)
Unexecuted instantiation: least_conn.c:h2o_url_init
Unexecuted instantiation: errordoc.c:h2o_url_init
Unexecuted instantiation: expires.c:h2o_url_init
Unexecuted instantiation: fastcgi.c:h2o_url_init
Unexecuted instantiation: h2olog.c:h2o_url_init
Unexecuted instantiation: connect.c:h2o_url_init
Unexecuted instantiation: redirect.c:h2o_url_init
Unexecuted instantiation: reproxy.c:h2o_url_init
Unexecuted instantiation: throttle_resp.c:h2o_url_init
Unexecuted instantiation: self_trace.c:h2o_url_init
Unexecuted instantiation: server_timing.c:h2o_url_init
Unexecuted instantiation: status.c:h2o_url_init
Unexecuted instantiation: events.c:h2o_url_init
Unexecuted instantiation: memory.c:h2o_url_init
Unexecuted instantiation: requests.c:h2o_url_init
Unexecuted instantiation: ssl.c:h2o_url_init
Unexecuted instantiation: durations.c:h2o_url_init
Unexecuted instantiation: brotli.c:h2o_url_init
128
129
inline uint16_t h2o_url_get_port(const h2o_url_t *url)
130
0
{
131
0
    return url->_port != 65535 ? url->_port : url->scheme->default_port;
132
0
}
Unexecuted instantiation: driver.cc:h2o_url_get_port(st_h2o_url_t const*)
Unexecuted instantiation: driver_common.cc:h2o_url_get_port(st_h2o_url_t const*)
Unexecuted instantiation: socketpool.c:h2o_url_get_port
Unexecuted instantiation: url.c:h2o_url_get_port
Unexecuted instantiation: roundrobin.c:h2o_url_get_port
Unexecuted instantiation: config.c:h2o_url_get_port
Unexecuted instantiation: configurator.c:h2o_url_get_port
Unexecuted instantiation: context.c:h2o_url_get_port
Unexecuted instantiation: headers.c:h2o_url_get_port
Unexecuted instantiation: request.c:h2o_url_get_port
Unexecuted instantiation: util.c:h2o_url_get_port
Unexecuted instantiation: access_log.c:h2o_url_get_port
Unexecuted instantiation: file.c:h2o_url_get_port
Unexecuted instantiation: mimemap.c:h2o_url_get_port
Unexecuted instantiation: proxy.c:h2o_url_get_port
Unexecuted instantiation: http1.c:h2o_url_get_port
Unexecuted instantiation: connection.c:h2o_url_get_port
Unexecuted instantiation: frame.c:h2o_url_get_port
Unexecuted instantiation: hpack.c:h2o_url_get_port
Unexecuted instantiation: scheduler.c:h2o_url_get_port
Unexecuted instantiation: stream.c:h2o_url_get_port
Unexecuted instantiation: http2_debug_state.c:h2o_url_get_port
Unexecuted instantiation: common.c:h2o_url_get_port
Unexecuted instantiation: server.c:h2o_url_get_port
Unexecuted instantiation: http3client.c:h2o_url_get_port
Unexecuted instantiation: httpclient.c:h2o_url_get_port
Unexecuted instantiation: absprio.c:h2o_url_get_port
Unexecuted instantiation: logconf.c:h2o_url_get_port
Unexecuted instantiation: compress.c:h2o_url_get_port
Unexecuted instantiation: gzip.c:h2o_url_get_port
Unexecuted instantiation: headers_util.c:h2o_url_get_port
Unexecuted instantiation: qpack.c:h2o_url_get_port
Unexecuted instantiation: http1client.c:h2o_url_get_port
Unexecuted instantiation: http2client.c:h2o_url_get_port
Unexecuted instantiation: pipe_sender.c:h2o_url_get_port
Unexecuted instantiation: driver_url.cc:h2o_url_get_port(st_h2o_url_t const*)
Unexecuted instantiation: driver_h3.cc:h2o_url_get_port(st_h2o_url_t const*)
Unexecuted instantiation: least_conn.c:h2o_url_get_port
Unexecuted instantiation: errordoc.c:h2o_url_get_port
Unexecuted instantiation: expires.c:h2o_url_get_port
Unexecuted instantiation: fastcgi.c:h2o_url_get_port
Unexecuted instantiation: h2olog.c:h2o_url_get_port
Unexecuted instantiation: connect.c:h2o_url_get_port
Unexecuted instantiation: redirect.c:h2o_url_get_port
Unexecuted instantiation: reproxy.c:h2o_url_get_port
Unexecuted instantiation: throttle_resp.c:h2o_url_get_port
Unexecuted instantiation: self_trace.c:h2o_url_get_port
Unexecuted instantiation: server_timing.c:h2o_url_get_port
Unexecuted instantiation: status.c:h2o_url_get_port
Unexecuted instantiation: events.c:h2o_url_get_port
Unexecuted instantiation: memory.c:h2o_url_get_port
Unexecuted instantiation: requests.c:h2o_url_get_port
Unexecuted instantiation: ssl.c:h2o_url_get_port
Unexecuted instantiation: durations.c:h2o_url_get_port
Unexecuted instantiation: brotli.c:h2o_url_get_port
133
134
inline h2o_iovec_t h2o_url_stringify(h2o_mem_pool_t *pool, const h2o_url_t *url)
135
0
{
136
0
    h2o_url_t tmp;
137
0
    return h2o_url_resolve(pool, url, NULL, &tmp);
138
0
}
Unexecuted instantiation: driver.cc:h2o_url_stringify(st_h2o_mem_pool_t*, st_h2o_url_t const*)
Unexecuted instantiation: driver_common.cc:h2o_url_stringify(st_h2o_mem_pool_t*, st_h2o_url_t const*)
Unexecuted instantiation: socketpool.c:h2o_url_stringify
Unexecuted instantiation: url.c:h2o_url_stringify
Unexecuted instantiation: roundrobin.c:h2o_url_stringify
Unexecuted instantiation: config.c:h2o_url_stringify
Unexecuted instantiation: configurator.c:h2o_url_stringify
Unexecuted instantiation: context.c:h2o_url_stringify
Unexecuted instantiation: headers.c:h2o_url_stringify
Unexecuted instantiation: request.c:h2o_url_stringify
Unexecuted instantiation: util.c:h2o_url_stringify
Unexecuted instantiation: access_log.c:h2o_url_stringify
Unexecuted instantiation: file.c:h2o_url_stringify
Unexecuted instantiation: mimemap.c:h2o_url_stringify
Unexecuted instantiation: proxy.c:h2o_url_stringify
Unexecuted instantiation: http1.c:h2o_url_stringify
Unexecuted instantiation: connection.c:h2o_url_stringify
Unexecuted instantiation: frame.c:h2o_url_stringify
Unexecuted instantiation: hpack.c:h2o_url_stringify
Unexecuted instantiation: scheduler.c:h2o_url_stringify
Unexecuted instantiation: stream.c:h2o_url_stringify
Unexecuted instantiation: http2_debug_state.c:h2o_url_stringify
Unexecuted instantiation: common.c:h2o_url_stringify
Unexecuted instantiation: server.c:h2o_url_stringify
Unexecuted instantiation: http3client.c:h2o_url_stringify
Unexecuted instantiation: httpclient.c:h2o_url_stringify
Unexecuted instantiation: absprio.c:h2o_url_stringify
Unexecuted instantiation: logconf.c:h2o_url_stringify
Unexecuted instantiation: compress.c:h2o_url_stringify
Unexecuted instantiation: gzip.c:h2o_url_stringify
Unexecuted instantiation: headers_util.c:h2o_url_stringify
Unexecuted instantiation: qpack.c:h2o_url_stringify
Unexecuted instantiation: http1client.c:h2o_url_stringify
Unexecuted instantiation: http2client.c:h2o_url_stringify
Unexecuted instantiation: pipe_sender.c:h2o_url_stringify
Unexecuted instantiation: driver_url.cc:h2o_url_stringify(st_h2o_mem_pool_t*, st_h2o_url_t const*)
Unexecuted instantiation: driver_h3.cc:h2o_url_stringify(st_h2o_mem_pool_t*, st_h2o_url_t const*)
Unexecuted instantiation: least_conn.c:h2o_url_stringify
Unexecuted instantiation: errordoc.c:h2o_url_stringify
Unexecuted instantiation: expires.c:h2o_url_stringify
Unexecuted instantiation: fastcgi.c:h2o_url_stringify
Unexecuted instantiation: h2olog.c:h2o_url_stringify
Unexecuted instantiation: connect.c:h2o_url_stringify
Unexecuted instantiation: redirect.c:h2o_url_stringify
Unexecuted instantiation: reproxy.c:h2o_url_stringify
Unexecuted instantiation: throttle_resp.c:h2o_url_stringify
Unexecuted instantiation: self_trace.c:h2o_url_stringify
Unexecuted instantiation: server_timing.c:h2o_url_stringify
Unexecuted instantiation: status.c:h2o_url_stringify
Unexecuted instantiation: events.c:h2o_url_stringify
Unexecuted instantiation: memory.c:h2o_url_stringify
Unexecuted instantiation: requests.c:h2o_url_stringify
Unexecuted instantiation: ssl.c:h2o_url_stringify
Unexecuted instantiation: durations.c:h2o_url_stringify
Unexecuted instantiation: brotli.c:h2o_url_stringify
139
140
static inline int h2o_url_host_is_unix_path(h2o_iovec_t host)
141
0
{
142
0
    if (host.len < 5) {
143
0
        return 0;
144
0
    }
145
0
    return h2o_memis(host.base, 5, H2O_STRLIT("unix:"));
146
0
}
Unexecuted instantiation: driver.cc:h2o_url_host_is_unix_path(st_h2o_iovec_t)
Unexecuted instantiation: driver_common.cc:h2o_url_host_is_unix_path(st_h2o_iovec_t)
Unexecuted instantiation: socketpool.c:h2o_url_host_is_unix_path
Unexecuted instantiation: url.c:h2o_url_host_is_unix_path
Unexecuted instantiation: roundrobin.c:h2o_url_host_is_unix_path
Unexecuted instantiation: config.c:h2o_url_host_is_unix_path
Unexecuted instantiation: configurator.c:h2o_url_host_is_unix_path
Unexecuted instantiation: context.c:h2o_url_host_is_unix_path
Unexecuted instantiation: headers.c:h2o_url_host_is_unix_path
Unexecuted instantiation: request.c:h2o_url_host_is_unix_path
Unexecuted instantiation: util.c:h2o_url_host_is_unix_path
Unexecuted instantiation: access_log.c:h2o_url_host_is_unix_path
Unexecuted instantiation: file.c:h2o_url_host_is_unix_path
Unexecuted instantiation: mimemap.c:h2o_url_host_is_unix_path
Unexecuted instantiation: proxy.c:h2o_url_host_is_unix_path
Unexecuted instantiation: http1.c:h2o_url_host_is_unix_path
Unexecuted instantiation: connection.c:h2o_url_host_is_unix_path
Unexecuted instantiation: frame.c:h2o_url_host_is_unix_path
Unexecuted instantiation: hpack.c:h2o_url_host_is_unix_path
Unexecuted instantiation: scheduler.c:h2o_url_host_is_unix_path
Unexecuted instantiation: stream.c:h2o_url_host_is_unix_path
Unexecuted instantiation: http2_debug_state.c:h2o_url_host_is_unix_path
Unexecuted instantiation: common.c:h2o_url_host_is_unix_path
Unexecuted instantiation: server.c:h2o_url_host_is_unix_path
Unexecuted instantiation: http3client.c:h2o_url_host_is_unix_path
Unexecuted instantiation: httpclient.c:h2o_url_host_is_unix_path
Unexecuted instantiation: absprio.c:h2o_url_host_is_unix_path
Unexecuted instantiation: logconf.c:h2o_url_host_is_unix_path
Unexecuted instantiation: compress.c:h2o_url_host_is_unix_path
Unexecuted instantiation: gzip.c:h2o_url_host_is_unix_path
Unexecuted instantiation: headers_util.c:h2o_url_host_is_unix_path
Unexecuted instantiation: qpack.c:h2o_url_host_is_unix_path
Unexecuted instantiation: http1client.c:h2o_url_host_is_unix_path
Unexecuted instantiation: http2client.c:h2o_url_host_is_unix_path
Unexecuted instantiation: pipe_sender.c:h2o_url_host_is_unix_path
Unexecuted instantiation: driver_url.cc:h2o_url_host_is_unix_path(st_h2o_iovec_t)
Unexecuted instantiation: driver_h3.cc:h2o_url_host_is_unix_path(st_h2o_iovec_t)
Unexecuted instantiation: least_conn.c:h2o_url_host_is_unix_path
Unexecuted instantiation: errordoc.c:h2o_url_host_is_unix_path
Unexecuted instantiation: expires.c:h2o_url_host_is_unix_path
Unexecuted instantiation: fastcgi.c:h2o_url_host_is_unix_path
Unexecuted instantiation: h2olog.c:h2o_url_host_is_unix_path
Unexecuted instantiation: connect.c:h2o_url_host_is_unix_path
Unexecuted instantiation: redirect.c:h2o_url_host_is_unix_path
Unexecuted instantiation: reproxy.c:h2o_url_host_is_unix_path
Unexecuted instantiation: throttle_resp.c:h2o_url_host_is_unix_path
Unexecuted instantiation: self_trace.c:h2o_url_host_is_unix_path
Unexecuted instantiation: server_timing.c:h2o_url_host_is_unix_path
Unexecuted instantiation: status.c:h2o_url_host_is_unix_path
Unexecuted instantiation: events.c:h2o_url_host_is_unix_path
Unexecuted instantiation: memory.c:h2o_url_host_is_unix_path
Unexecuted instantiation: requests.c:h2o_url_host_is_unix_path
Unexecuted instantiation: ssl.c:h2o_url_host_is_unix_path
Unexecuted instantiation: durations.c:h2o_url_host_is_unix_path
Unexecuted instantiation: brotli.c:h2o_url_host_is_unix_path
147
148
/**
149
 * Compares to hostnames, taking into account whether they contain a
150
 * unix path (the comparison will be case sensitive) or not.
151
 */
152
static inline int h2o_url_hosts_are_equal(const h2o_url_t *url_a, const h2o_url_t *url_b)
153
0
{
154
0
    if (url_a->host.len != url_b->host.len)
155
0
        return 0;
156
157
0
    if (h2o_url_host_is_unix_path(url_a->host))
158
0
        return h2o_memis(url_a->host.base, url_a->host.len, url_b->host.base, url_b->host.len);
159
0
    else
160
0
        return h2o_lcstris(url_a->host.base, url_a->host.len, url_b->host.base, url_b->host.len);
161
0
}
Unexecuted instantiation: driver.cc:h2o_url_hosts_are_equal(st_h2o_url_t const*, st_h2o_url_t const*)
Unexecuted instantiation: driver_common.cc:h2o_url_hosts_are_equal(st_h2o_url_t const*, st_h2o_url_t const*)
Unexecuted instantiation: socketpool.c:h2o_url_hosts_are_equal
Unexecuted instantiation: url.c:h2o_url_hosts_are_equal
Unexecuted instantiation: roundrobin.c:h2o_url_hosts_are_equal
Unexecuted instantiation: config.c:h2o_url_hosts_are_equal
Unexecuted instantiation: configurator.c:h2o_url_hosts_are_equal
Unexecuted instantiation: context.c:h2o_url_hosts_are_equal
Unexecuted instantiation: headers.c:h2o_url_hosts_are_equal
Unexecuted instantiation: request.c:h2o_url_hosts_are_equal
Unexecuted instantiation: util.c:h2o_url_hosts_are_equal
Unexecuted instantiation: access_log.c:h2o_url_hosts_are_equal
Unexecuted instantiation: file.c:h2o_url_hosts_are_equal
Unexecuted instantiation: mimemap.c:h2o_url_hosts_are_equal
Unexecuted instantiation: proxy.c:h2o_url_hosts_are_equal
Unexecuted instantiation: http1.c:h2o_url_hosts_are_equal
Unexecuted instantiation: connection.c:h2o_url_hosts_are_equal
Unexecuted instantiation: frame.c:h2o_url_hosts_are_equal
Unexecuted instantiation: hpack.c:h2o_url_hosts_are_equal
Unexecuted instantiation: scheduler.c:h2o_url_hosts_are_equal
Unexecuted instantiation: stream.c:h2o_url_hosts_are_equal
Unexecuted instantiation: http2_debug_state.c:h2o_url_hosts_are_equal
Unexecuted instantiation: common.c:h2o_url_hosts_are_equal
Unexecuted instantiation: server.c:h2o_url_hosts_are_equal
Unexecuted instantiation: http3client.c:h2o_url_hosts_are_equal
Unexecuted instantiation: httpclient.c:h2o_url_hosts_are_equal
Unexecuted instantiation: absprio.c:h2o_url_hosts_are_equal
Unexecuted instantiation: logconf.c:h2o_url_hosts_are_equal
Unexecuted instantiation: compress.c:h2o_url_hosts_are_equal
Unexecuted instantiation: gzip.c:h2o_url_hosts_are_equal
Unexecuted instantiation: headers_util.c:h2o_url_hosts_are_equal
Unexecuted instantiation: qpack.c:h2o_url_hosts_are_equal
Unexecuted instantiation: http1client.c:h2o_url_hosts_are_equal
Unexecuted instantiation: http2client.c:h2o_url_hosts_are_equal
Unexecuted instantiation: pipe_sender.c:h2o_url_hosts_are_equal
Unexecuted instantiation: driver_url.cc:h2o_url_hosts_are_equal(st_h2o_url_t const*, st_h2o_url_t const*)
Unexecuted instantiation: driver_h3.cc:h2o_url_hosts_are_equal(st_h2o_url_t const*, st_h2o_url_t const*)
Unexecuted instantiation: least_conn.c:h2o_url_hosts_are_equal
Unexecuted instantiation: errordoc.c:h2o_url_hosts_are_equal
Unexecuted instantiation: expires.c:h2o_url_hosts_are_equal
Unexecuted instantiation: fastcgi.c:h2o_url_hosts_are_equal
Unexecuted instantiation: h2olog.c:h2o_url_hosts_are_equal
Unexecuted instantiation: connect.c:h2o_url_hosts_are_equal
Unexecuted instantiation: redirect.c:h2o_url_hosts_are_equal
Unexecuted instantiation: reproxy.c:h2o_url_hosts_are_equal
Unexecuted instantiation: throttle_resp.c:h2o_url_hosts_are_equal
Unexecuted instantiation: self_trace.c:h2o_url_hosts_are_equal
Unexecuted instantiation: server_timing.c:h2o_url_hosts_are_equal
Unexecuted instantiation: status.c:h2o_url_hosts_are_equal
Unexecuted instantiation: events.c:h2o_url_hosts_are_equal
Unexecuted instantiation: memory.c:h2o_url_hosts_are_equal
Unexecuted instantiation: requests.c:h2o_url_hosts_are_equal
Unexecuted instantiation: ssl.c:h2o_url_hosts_are_equal
Unexecuted instantiation: durations.c:h2o_url_hosts_are_equal
Unexecuted instantiation: brotli.c:h2o_url_hosts_are_equal
162
163
#endif