/src/h2o/include/h2o/socket.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2014-2016 DeNA Co., Ltd., Kazuho Oku, Fastly, Inc. |
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__socket_h |
23 | | #define h2o__socket_h |
24 | | |
25 | | #ifdef __cplusplus |
26 | | extern "C" { |
27 | | #endif |
28 | | |
29 | | #include <stdint.h> |
30 | | #include <sys/socket.h> |
31 | | #include <time.h> |
32 | | #ifdef __linux__ |
33 | | #include <linux/errqueue.h> |
34 | | #endif |
35 | | #include <openssl/ssl.h> |
36 | | #include <openssl/opensslconf.h> |
37 | | #include "picotls.h" |
38 | | #include "picotls/openssl.h" /* for H2O_CAN_OSSL_ASYNC */ |
39 | | #include "h2o/cache.h" |
40 | | #include "h2o/memory.h" |
41 | | #include "h2o/openssl_backport.h" |
42 | | #include "h2o/string_.h" |
43 | | |
44 | | #ifndef H2O_USE_LIBUV |
45 | | #if H2O_USE_POLL || H2O_USE_EPOLL || H2O_USE_KQUEUE |
46 | | #define H2O_USE_LIBUV 0 |
47 | | #else |
48 | | #define H2O_USE_LIBUV 1 |
49 | | #endif |
50 | | #endif |
51 | | |
52 | | #if defined(SO_ZEROCOPY) && defined(SO_EE_ORIGIN_ZEROCOPY) && defined(MSG_ZEROCOPY) |
53 | | #define H2O_USE_MSG_ZEROCOPY 1 |
54 | | #endif |
55 | | |
56 | | #if OPENSSL_VERSION_NUMBER >= 0x10002000L |
57 | | #define H2O_USE_ALPN 1 |
58 | | #ifndef OPENSSL_NO_NEXTPROTONEG |
59 | | #define H2O_USE_NPN 1 |
60 | | #else |
61 | | #define H2O_USE_NPN 0 |
62 | | #endif |
63 | | #elif OPENSSL_VERSION_NUMBER >= 0x10001000L |
64 | | #define H2O_USE_ALPN 0 |
65 | | #define H2O_USE_NPN 1 |
66 | | #else |
67 | | #define H2O_USE_ALPN 0 |
68 | | #define H2O_USE_NPN 0 |
69 | | #endif |
70 | | |
71 | | #if !defined(LIBRESSL_VERSION_NUMBER) && !defined(OPENSSL_IS_BORINGSSL) && OPENSSL_VERSION_NUMBER >= 0x1010100fL |
72 | | #define H2O_USE_OPENSSL_CLIENT_HELLO_CB 1 |
73 | | #endif |
74 | | #if PTLS_OPENSSL_HAVE_ASYNC && H2O_USE_OPENSSL_CLIENT_HELLO_CB |
75 | | #define H2O_CAN_OSSL_ASYNC 1 |
76 | | #endif |
77 | | |
78 | | /** |
79 | | * Maximum size of sendvec when a pull (i.e. non-raw) vector is used. Note also that bufcnt must be set to one when a pull mode |
80 | | * vector is used. |
81 | | */ |
82 | 0 | #define H2O_PULL_SENDVEC_MAX_SIZE 65536 |
83 | | /** |
84 | | * Maximum amount of TLS records to generate at once. Default is 4 full-sized TLS records using 32-byte tag. This value is defined |
85 | | * to be slightly greater than H2O_PULL_SENDVEC_MAX_SIZE, so that the two buffers can recycle the same memory buffers. |
86 | | */ |
87 | | #define H2O_SOCKET_DEFAULT_SSL_BUFFER_SIZE ((5 + 16384 + 32) * 4) |
88 | | |
89 | | typedef struct st_h2o_sliding_counter_t { |
90 | | uint64_t average; |
91 | | struct { |
92 | | uint64_t sum; |
93 | | uint64_t slots[8]; |
94 | | size_t index; |
95 | | } prev; |
96 | | struct { |
97 | | uint64_t start_at; |
98 | | } cur; |
99 | | } h2o_sliding_counter_t; |
100 | | |
101 | | static int h2o_sliding_counter_is_running(h2o_sliding_counter_t *counter); |
102 | | static void h2o_sliding_counter_start(h2o_sliding_counter_t *counter, uint64_t now); |
103 | | void h2o_sliding_counter_stop(h2o_sliding_counter_t *counter, uint64_t now); |
104 | | |
105 | | #define H2O_SOCKET_INITIAL_INPUT_BUFFER_SIZE 4096 |
106 | | |
107 | 0 | #define H2O_SESSID_CTX ((const uint8_t *)"h2o") |
108 | 0 | #define H2O_SESSID_CTX_LEN (sizeof("h2o") - 1) |
109 | | |
110 | | typedef struct st_h2o_socket_t h2o_socket_t; |
111 | | |
112 | | typedef void (*h2o_socket_cb)(h2o_socket_t *sock, const char *err); |
113 | | |
114 | | /* used by probes */ |
115 | | struct st_h2o_io_uring_cmd_t; |
116 | | |
117 | | #if H2O_USE_LIBUV |
118 | | #include "socket/uv-binding.h" |
119 | | #else |
120 | | #include "socket/evloop.h" |
121 | | #endif |
122 | | |
123 | | struct st_h2o_socket_addr_t { |
124 | | socklen_t len; |
125 | | struct sockaddr addr; |
126 | | }; |
127 | | |
128 | | enum { |
129 | | H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD = 0, |
130 | | H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE, |
131 | | H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_DISABLED, |
132 | | H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_DETERMINED |
133 | | }; |
134 | | |
135 | | typedef struct st_h2o_sendvec_t h2o_sendvec_t; |
136 | | |
137 | | /** |
138 | | * Callbacks of `h2o_sendvec_t`. Random access capability has been removed. `read_` and `send_` only provide one-pass sequential |
139 | | * access. Properties of `h2o_sendvec_t` (e.g., `len`, `raw`) are adjusted as bytes are read / sent from the vector. |
140 | | */ |
141 | | typedef struct st_h2o_sendvec_callbacks_t { |
142 | | /** |
143 | | * Mandatory callback used to load the bytes held by the vector. Returns if the operation succeeded. When false is returned, the |
144 | | * generator is considered as been error-closed by itself. If the callback is `h2o_sendvec_read_raw`, the data is available as |
145 | | * raw bytes in `h2o_sendvec_t::raw`. |
146 | | */ |
147 | | int (*read_)(h2o_sendvec_t *vec, void *dst, size_t len); |
148 | | /** |
149 | | * Optional callback for sending contents of a vector directly to a socket. Returns number of bytes being sent (could be zero), |
150 | | * or, upon error, SIZE_MAX. |
151 | | */ |
152 | | size_t (*send_)(h2o_sendvec_t *vec, int sockfd, size_t len); |
153 | | } h2o_sendvec_callbacks_t; |
154 | | |
155 | | /** |
156 | | * send vector. Unlike an ordinary `h2o_iovec_t`, the vector has a callback that allows the sender to delay the flattening of data |
157 | | * until it becomes necessary. |
158 | | */ |
159 | | struct st_h2o_sendvec_t { |
160 | | /** |
161 | | * |
162 | | */ |
163 | | const h2o_sendvec_callbacks_t *callbacks; |
164 | | /** |
165 | | * size of the vector |
166 | | */ |
167 | | size_t len; |
168 | | /** |
169 | | * |
170 | | */ |
171 | | union { |
172 | | char *raw; |
173 | | uint64_t cb_arg[2]; |
174 | | }; |
175 | | }; |
176 | | |
177 | | /** |
178 | | * abstraction layer for sockets (SSL vs. TCP) |
179 | | */ |
180 | | struct st_h2o_socket_t { |
181 | | void *data; |
182 | | struct st_h2o_socket_ssl_t *ssl; |
183 | | h2o_buffer_t *input; |
184 | | /** |
185 | | * total bytes read (above the TLS layer) |
186 | | */ |
187 | | uint64_t bytes_read; |
188 | | /** |
189 | | * total bytes written (above the TLS layer) |
190 | | */ |
191 | | uint64_t bytes_written; |
192 | | /** |
193 | | * trace state; when picotls is used as the TLS stack, this state is duplicated to that of picotls to achieve consistent |
194 | | * behavior across layers |
195 | | */ |
196 | | ptls_log_conn_state_t _log_state; |
197 | | struct { |
198 | | void (*cb)(void *data); |
199 | | void *data; |
200 | | } on_close; |
201 | | struct { |
202 | | h2o_socket_cb read; |
203 | | h2o_socket_cb write; |
204 | | } _cb; |
205 | | struct st_h2o_socket_addr_t *_peername; |
206 | | struct st_h2o_socket_addr_t *_sockname; |
207 | | struct { |
208 | | size_t cnt; |
209 | | h2o_iovec_t *bufs; |
210 | | union { |
211 | | h2o_iovec_t *alloced_ptr; |
212 | | h2o_iovec_t smallbufs[4]; |
213 | | }; |
214 | | char *flattened; |
215 | | } _write_buf; |
216 | | struct { |
217 | | uint8_t state; /* one of H2O_SOCKET_LATENCY_STATE_* */ |
218 | | uint8_t notsent_is_minimized : 1; |
219 | | size_t suggested_tls_payload_size; /* suggested TLS record payload size, or SIZE_MAX when no need to restrict */ |
220 | | size_t suggested_write_size; /* SIZE_MAX if no need to optimize for latency */ |
221 | | } _latency_optimization; |
222 | | struct st_h2o_socket_zerocopy_buffers_t *_zerocopy; |
223 | | }; |
224 | | |
225 | | typedef struct st_h2o_socket_export_t { |
226 | | int fd; |
227 | | struct st_h2o_socket_ssl_t *ssl; |
228 | | h2o_buffer_t *input; |
229 | | } h2o_socket_export_t; |
230 | | |
231 | | /** |
232 | | * sets the conditions to enable the optimization |
233 | | */ |
234 | | typedef struct st_h2o_socket_latency_optimization_conditions_t { |
235 | | /** |
236 | | * in milliseconds |
237 | | */ |
238 | | unsigned min_rtt; |
239 | | /** |
240 | | * percent ratio |
241 | | */ |
242 | | unsigned max_additional_delay; |
243 | | /** |
244 | | * in number of octets |
245 | | */ |
246 | | unsigned max_cwnd; |
247 | | } h2o_socket_latency_optimization_conditions_t; |
248 | | |
249 | | typedef void (*h2o_socket_ssl_resumption_get_async_cb)(h2o_socket_t *sock, h2o_iovec_t session_id); |
250 | | typedef void (*h2o_socket_ssl_resumption_new_cb)(h2o_socket_t *sock, h2o_iovec_t session_id, h2o_iovec_t session_data); |
251 | | typedef void (*h2o_socket_ssl_resumption_remove_cb)(h2o_iovec_t session_id); |
252 | | |
253 | | extern h2o_buffer_mmap_settings_t h2o_socket_buffer_mmap_settings; |
254 | | extern h2o_buffer_prototype_t h2o_socket_buffer_prototype; |
255 | | |
256 | | /** |
257 | | * see H2O_SOCKET_DEFAULT_SSL_BUFFER_SIZE |
258 | | */ |
259 | | extern h2o_mem_recycle_conf_t h2o_socket_ssl_buffer_conf; |
260 | | extern __thread h2o_mem_recycle_t h2o_socket_ssl_buffer_allocator; |
261 | | extern __thread h2o_mem_recycle_t h2o_socket_zerocopy_buffer_allocator; |
262 | | extern __thread size_t h2o_socket_num_zerocopy_buffers_inflight; |
263 | | |
264 | | /** |
265 | | * boolean flag indicating if kTLS should be used (when preferable) |
266 | | */ |
267 | | extern int h2o_socket_use_ktls; |
268 | | |
269 | | extern const char h2o_socket_error_out_of_memory[]; |
270 | | extern const char h2o_socket_error_io[]; |
271 | | extern const char h2o_socket_error_closed[]; |
272 | | extern const char h2o_socket_error_conn_fail[]; |
273 | | extern const char h2o_socket_error_conn_refused[]; |
274 | | extern const char h2o_socket_error_conn_timed_out[]; |
275 | | extern const char h2o_socket_error_network_unreachable[]; |
276 | | extern const char h2o_socket_error_host_unreachable[]; |
277 | | extern const char h2o_socket_error_socket_fail[]; |
278 | | extern const char h2o_socket_error_ssl_no_cert[]; |
279 | | extern const char h2o_socket_error_ssl_cert_invalid[]; |
280 | | extern const char h2o_socket_error_ssl_cert_name_mismatch[]; |
281 | | extern const char h2o_socket_error_ssl_decode[]; |
282 | | extern const char h2o_socket_error_ssl_handshake[]; |
283 | | |
284 | | /** |
285 | | * returns the loop |
286 | | */ |
287 | | h2o_loop_t *h2o_socket_get_loop(h2o_socket_t *sock); |
288 | | /** |
289 | | * detaches a socket from loop. |
290 | | */ |
291 | | int h2o_socket_export(h2o_socket_t *sock, h2o_socket_export_t *info); |
292 | | /** |
293 | | * attaches a socket onto a loop. |
294 | | */ |
295 | | h2o_socket_t *h2o_socket_import(h2o_loop_t *loop, h2o_socket_export_t *info); |
296 | | /** |
297 | | * destroys an exported socket info. |
298 | | */ |
299 | | void h2o_socket_dispose_export(h2o_socket_export_t *info); |
300 | | /** |
301 | | * closes the socket |
302 | | */ |
303 | | void h2o_socket_close(h2o_socket_t *sock); |
304 | | /** |
305 | | * Schedules a callback that would be invoked when the socket becomes immediately writable |
306 | | */ |
307 | | void h2o_socket_notify_write(h2o_socket_t *sock, h2o_socket_cb cb); |
308 | | /** |
309 | | * Obtain the underlying fd of a sock struct |
310 | | */ |
311 | | int h2o_socket_get_fd(h2o_socket_t *sock); |
312 | | /** |
313 | | * Set/Unset the H2O_SOCKET_FLAG_DONT_READ flag. |
314 | | * Setting it allows to be simply notified rather than having the data |
315 | | * automatically be read. |
316 | | */ |
317 | | void h2o_socket_dont_read(h2o_socket_t *sock, int dont_read); |
318 | | /** |
319 | | * connects to peer |
320 | | */ |
321 | | h2o_socket_t *h2o_socket_connect(h2o_loop_t *loop, struct sockaddr *addr, socklen_t addrlen, h2o_socket_cb cb, const char **err); |
322 | | /** |
323 | | * prepares for latency-optimized write and returns the number of octets that should be written, or SIZE_MAX if failed to prepare |
324 | | */ |
325 | | static size_t h2o_socket_prepare_for_latency_optimized_write(h2o_socket_t *sock, |
326 | | const h2o_socket_latency_optimization_conditions_t *conditions); |
327 | | size_t h2o_socket_do_prepare_for_latency_optimized_write(h2o_socket_t *sock, |
328 | | const h2o_socket_latency_optimization_conditions_t *conditions); |
329 | | /** |
330 | | * writes given data to socket |
331 | | * @param sock the socket |
332 | | * @param bufs an array of buffers |
333 | | * @param bufcnt length of the buffer array |
334 | | * @param cb callback to be called when write is complete |
335 | | */ |
336 | | void h2o_socket_write(h2o_socket_t *sock, h2o_iovec_t *bufs, size_t bufcnt, h2o_socket_cb cb); |
337 | | /** |
338 | | * |
339 | | */ |
340 | | void h2o_socket_sendvec(h2o_socket_t *sock, h2o_sendvec_t *bufs, size_t bufcnt, h2o_socket_cb cb); |
341 | | /** |
342 | | * starts polling on the socket (for read) and calls given callback when data arrives |
343 | | * @param sock the socket |
344 | | * @param cb callback to be called when data arrives |
345 | | * @note callback is called when any data arrives at the TCP level so that the |
346 | | * applications can update their timeout counters. In other words, there is no |
347 | | * guarantee that _new_ data is available when the callback gets called (e.g. |
348 | | * in cases like receiving a partial SSL record or a corrupt TCP packet). |
349 | | */ |
350 | | void h2o_socket_read_start(h2o_socket_t *sock, h2o_socket_cb cb); |
351 | | /** |
352 | | * stops polling on the socket (for read) |
353 | | * @param sock the socket |
354 | | */ |
355 | | void h2o_socket_read_stop(h2o_socket_t *sock); |
356 | | /** |
357 | | * returns a boolean value indicating whether if there is a write is under operation |
358 | | */ |
359 | | static int h2o_socket_is_writing(h2o_socket_t *sock); |
360 | | /** |
361 | | * returns a boolean value indicating whether if the socket is being polled for read |
362 | | */ |
363 | | static int h2o_socket_is_reading(h2o_socket_t *sock); |
364 | | /** |
365 | | * returns the length of the local address obtained (or 0 if failed) |
366 | | */ |
367 | | socklen_t h2o_socket_getsockname(h2o_socket_t *sock, struct sockaddr *sa); |
368 | | /** |
369 | | * returns the length of the remote address obtained (or 0 if failed) |
370 | | */ |
371 | | socklen_t h2o_socket_getpeername(h2o_socket_t *sock, struct sockaddr *sa); |
372 | | /** |
373 | | * sets the remote address (used for overriding the value) |
374 | | */ |
375 | | void h2o_socket_setpeername(h2o_socket_t *sock, struct sockaddr *sa, socklen_t len); |
376 | | /** |
377 | | * |
378 | | */ |
379 | | ptls_t *h2o_socket_get_ptls(h2o_socket_t *sock); |
380 | | /** |
381 | | * |
382 | | */ |
383 | | int h2o_socket_can_tls_offload(h2o_socket_t *sock); |
384 | | /** |
385 | | * |
386 | | */ |
387 | | h2o_iovec_t h2o_socket_log_tcp_congestion_controller(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
388 | | h2o_iovec_t h2o_socket_log_tcp_delivery_rate(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
389 | | const char *h2o_socket_get_ssl_protocol_version(h2o_socket_t *sock); |
390 | | int h2o_socket_get_ssl_session_reused(h2o_socket_t *sock); |
391 | | const char *h2o_socket_get_ssl_cipher(h2o_socket_t *sock); |
392 | | int h2o_socket_get_ssl_cipher_bits(h2o_socket_t *sock); |
393 | | h2o_iovec_t h2o_socket_get_ssl_session_id(h2o_socket_t *sock); |
394 | | const char *h2o_socket_get_ssl_server_name(const h2o_socket_t *sock); |
395 | | static h2o_iovec_t h2o_socket_log_ssl_protocol_version(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
396 | | static h2o_iovec_t h2o_socket_log_ssl_session_reused(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
397 | | static h2o_iovec_t h2o_socket_log_ssl_cipher(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
398 | | h2o_iovec_t h2o_socket_log_ssl_cipher_bits(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
399 | | h2o_iovec_t h2o_socket_log_ssl_session_id(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
400 | | static h2o_iovec_t h2o_socket_log_ssl_server_name(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
401 | | static h2o_iovec_t h2o_socket_log_ssl_negotiated_protocol(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
402 | | h2o_iovec_t h2o_socket_log_ssl_ech_config_id(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
403 | | h2o_iovec_t h2o_socket_log_ssl_ech_kem(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
404 | | h2o_iovec_t h2o_socket_log_ssl_ech_cipher(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
405 | | h2o_iovec_t h2o_socket_log_ssl_ech_cipher_bits(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
406 | | h2o_iovec_t h2o_socket_log_ssl_backend(h2o_socket_t *sock, h2o_mem_pool_t *pool); |
407 | | int h2o_socket_ssl_new_session_cb(SSL *s, SSL_SESSION *sess); |
408 | | |
409 | | /** |
410 | | * compares socket addresses |
411 | | */ |
412 | | int h2o_socket_compare_address(struct sockaddr *x, struct sockaddr *y, int check_port); |
413 | | /** |
414 | | * getnameinfo (buf should be NI_MAXHOST in length), returns SIZE_MAX if failed |
415 | | */ |
416 | | size_t h2o_socket_getnumerichost(const struct sockaddr *sa, socklen_t salen, char *buf); |
417 | | /** |
418 | | * returns the port number, or -1 if failed |
419 | | */ |
420 | | int32_t h2o_socket_getport(const struct sockaddr *sa); |
421 | | /** |
422 | | * converts given error number to string representation if known, otherwise returns `default_err` |
423 | | */ |
424 | | const char *h2o_socket_get_error_string(int errnum, const char *default_err); |
425 | | /** |
426 | | * performs SSL handshake on a socket |
427 | | * @param sock the socket |
428 | | * @param ssl_ctx SSL context |
429 | | * @param handshake_cb callback to be called when handshake is complete |
430 | | */ |
431 | | void h2o_socket_ssl_handshake(h2o_socket_t *sock, SSL_CTX *ssl_ctx, const char *server_name, h2o_iovec_t alpn_protos, |
432 | | h2o_socket_cb handshake_cb); |
433 | | /** |
434 | | * resumes SSL handshake with given session data |
435 | | * @param sock the socket |
436 | | * @param session_data session data (or {NULL,0} if not available) |
437 | | */ |
438 | | void h2o_socket_ssl_resume_server_handshake(h2o_socket_t *sock, h2o_iovec_t session_data); |
439 | | /** |
440 | | * registers callbacks to be called for handling session data |
441 | | */ |
442 | | void h2o_socket_ssl_async_resumption_init(h2o_socket_ssl_resumption_get_async_cb get_cb, h2o_socket_ssl_resumption_new_cb new_cb); |
443 | | /** |
444 | | * setups the SSL context to use the async resumption |
445 | | */ |
446 | | void h2o_socket_ssl_async_resumption_setup_ctx(SSL_CTX *ctx); |
447 | | /** |
448 | | * returns the name of the protocol selected using either NPN or ALPN (ALPN has the precedence). |
449 | | * @param sock the socket |
450 | | */ |
451 | | h2o_iovec_t h2o_socket_ssl_get_selected_protocol(h2o_socket_t *sock); |
452 | | /** |
453 | | * returns if the socket is in early-data state (i.e. have not yet seen ClientFinished) |
454 | | */ |
455 | | int h2o_socket_ssl_is_early_data(h2o_socket_t *sock); |
456 | | /** |
457 | | * |
458 | | */ |
459 | | struct st_ptls_context_t *h2o_socket_ssl_get_picotls_context(SSL_CTX *ossl); |
460 | | /** |
461 | | * associates a picotls context to SSL_CTX |
462 | | */ |
463 | | void h2o_socket_ssl_set_picotls_context(SSL_CTX *ossl, struct st_ptls_context_t *ptls); |
464 | | /** |
465 | | * |
466 | | */ |
467 | | h2o_cache_t *h2o_socket_ssl_get_session_cache(SSL_CTX *ctx); |
468 | | /** |
469 | | * |
470 | | */ |
471 | | void h2o_socket_ssl_set_session_cache(SSL_CTX *ctx, h2o_cache_t *cache); |
472 | | /** |
473 | | * |
474 | | */ |
475 | | void h2o_socket_ssl_destroy_session_cache_entry(h2o_iovec_t value); |
476 | | /** |
477 | | * registers the protocol list to be used for ALPN |
478 | | */ |
479 | | void h2o_ssl_register_alpn_protocols(SSL_CTX *ctx, const h2o_iovec_t *protocols); |
480 | | /** |
481 | | * registers the protocol list to be used for NPN |
482 | | */ |
483 | | void h2o_ssl_register_npn_protocols(SSL_CTX *ctx, const char *protocols); |
484 | | /** |
485 | | * Sets the DF bit if possible. Returns true when the operation was succcessful, or when the operating system does not provide the |
486 | | * necessary features. In either case, operation can continue with or without the DF bit being set. |
487 | | */ |
488 | | int h2o_socket_set_df_bit(int fd, int domain); |
489 | | /** |
490 | | * returns trace state |
491 | | */ |
492 | | static ptls_log_conn_state_t *h2o_socket_log_state(h2o_socket_t *sock); |
493 | | |
494 | | #if H2O_CAN_OSSL_ASYNC |
495 | | /** |
496 | | * When generating a TLS handshake signature asynchronously, it is necessary to wait for a notification on a file descriptor at |
497 | | * which point the TLS handshake machinery is to be resumed. This function sets up a callback that would be called when that |
498 | | * notification is received. The callback must invoke `h2o_socket_async_handshake_on_notify` to do the necessary clean up, as well |
499 | | * as obtain the `data` pointer it has supplied. |
500 | | */ |
501 | | void h2o_socket_start_async_handshake(h2o_loop_t *loop, int async_fd, void *data, h2o_socket_cb cb); |
502 | | /** |
503 | | * The function to be called by the callback supplied to `h2o_socket_start_async_handshake`. It returns the `data` pointer supplied |
504 | | * to `h2o_socket_start_async_handshake`. |
505 | | */ |
506 | | void *h2o_socket_async_handshake_on_notify(h2o_socket_t *async_sock, const char *err); |
507 | | #endif |
508 | | |
509 | | /** |
510 | | * Initializes a send vector that refers to mutable memory region. When the `proceed` callback is invoked, it is possible for the |
511 | | * generator to reuse (or release) that memory region. |
512 | | */ |
513 | | void h2o_sendvec_init_raw(h2o_sendvec_t *vec, const void *base, size_t len); |
514 | | /** |
515 | | * |
516 | | */ |
517 | | int h2o_sendvec_read_raw(h2o_sendvec_t *vec, void *dst, size_t len); |
518 | | |
519 | | /** |
520 | | * GC resources |
521 | | */ |
522 | | void h2o_socket_clear_recycle(int full); |
523 | | /** |
524 | | * |
525 | | */ |
526 | | int h2o_socket_recycle_is_empty(void); |
527 | | |
528 | | /** |
529 | | * This is a thin wrapper around sendfile (2) that hides the differences between various OS implementations. |
530 | | * @return number of bytes written (zero is a valid value indicating that the send buffer is full), or SIZE_MAX on error |
531 | | */ |
532 | | size_t h2o_sendfile(int sockfd, int filefd, off_t off, size_t len); |
533 | | |
534 | | #ifdef OPENSSL_IS_BORINGSSL |
535 | | /** |
536 | | * returns SSL_[gs]et_ext_data slot used to store `ptls_async_job_t` for handling async TLS handshake signature generation |
537 | | */ |
538 | | int h2o_socket_boringssl_get_async_job_index(void); |
539 | | /** |
540 | | * If async resumption is in flight. When true is returned the TLS handshake is going to be discarded, and therefore the async |
541 | | * signature calculation callback should return failure rather than starting the calculation. |
542 | | */ |
543 | | int h2o_socket_boringssl_async_resumption_in_flight(SSL *ssl); |
544 | | #endif |
545 | | |
546 | | /* inline defs */ |
547 | | |
548 | | inline int h2o_socket_is_writing(h2o_socket_t *sock) |
549 | 135k | { |
550 | 135k | return sock->_cb.write != NULL; |
551 | 135k | } Unexecuted instantiation: driver.cc:h2o_socket_is_writing(st_h2o_socket_t*) Unexecuted instantiation: driver_common.cc:h2o_socket_is_writing(st_h2o_socket_t*) Unexecuted instantiation: multithread.c:h2o_socket_is_writing socket.c:h2o_socket_is_writing Line | Count | Source | 549 | 34.9k | { | 550 | | return sock->_cb.write != NULL; | 551 | 34.9k | } |
Unexecuted instantiation: socketpool.c:h2o_socket_is_writing Unexecuted instantiation: roundrobin.c:h2o_socket_is_writing Unexecuted instantiation: config.c:h2o_socket_is_writing Unexecuted instantiation: configurator.c:h2o_socket_is_writing Unexecuted instantiation: context.c:h2o_socket_is_writing Unexecuted instantiation: headers.c:h2o_socket_is_writing Unexecuted instantiation: request.c:h2o_socket_is_writing Unexecuted instantiation: util.c:h2o_socket_is_writing Unexecuted instantiation: access_log.c:h2o_socket_is_writing Unexecuted instantiation: file.c:h2o_socket_is_writing Unexecuted instantiation: mimemap.c:h2o_socket_is_writing Unexecuted instantiation: proxy.c:h2o_socket_is_writing Unexecuted instantiation: http1.c:h2o_socket_is_writing connection.c:h2o_socket_is_writing Line | Count | Source | 549 | 99.6k | { | 550 | | return sock->_cb.write != NULL; | 551 | 99.6k | } |
Unexecuted instantiation: scheduler.c:h2o_socket_is_writing Unexecuted instantiation: stream.c:h2o_socket_is_writing Unexecuted instantiation: http2_debug_state.c:h2o_socket_is_writing Unexecuted instantiation: common.c:h2o_socket_is_writing Unexecuted instantiation: server.c:h2o_socket_is_writing Unexecuted instantiation: hostinfo.c:h2o_socket_is_writing Unexecuted instantiation: http3client.c:h2o_socket_is_writing Unexecuted instantiation: httpclient.c:h2o_socket_is_writing Unexecuted instantiation: memcached.c:h2o_socket_is_writing Unexecuted instantiation: redis.c:h2o_socket_is_writing Unexecuted instantiation: serverutil.c:h2o_socket_is_writing Unexecuted instantiation: absprio.c:h2o_socket_is_writing Unexecuted instantiation: logconf.c:h2o_socket_is_writing Unexecuted instantiation: compress.c:h2o_socket_is_writing Unexecuted instantiation: gzip.c:h2o_socket_is_writing Unexecuted instantiation: headers_util.c:h2o_socket_is_writing Unexecuted instantiation: frame.c:h2o_socket_is_writing Unexecuted instantiation: qpack.c:h2o_socket_is_writing http1client.c:h2o_socket_is_writing Line | Count | Source | 549 | 779 | { | 550 | | return sock->_cb.write != NULL; | 551 | 779 | } |
Unexecuted instantiation: http2client.c:h2o_socket_is_writing Unexecuted instantiation: pipe_sender.c:h2o_socket_is_writing Unexecuted instantiation: driver_url.cc:h2o_socket_is_writing(st_h2o_socket_t*) Unexecuted instantiation: driver_h3.cc:h2o_socket_is_writing(st_h2o_socket_t*) Unexecuted instantiation: least_conn.c:h2o_socket_is_writing Unexecuted instantiation: errordoc.c:h2o_socket_is_writing Unexecuted instantiation: expires.c:h2o_socket_is_writing Unexecuted instantiation: fastcgi.c:h2o_socket_is_writing Unexecuted instantiation: h2olog.c:h2o_socket_is_writing Unexecuted instantiation: connect.c:h2o_socket_is_writing Unexecuted instantiation: redirect.c:h2o_socket_is_writing Unexecuted instantiation: reproxy.c:h2o_socket_is_writing Unexecuted instantiation: throttle_resp.c:h2o_socket_is_writing Unexecuted instantiation: self_trace.c:h2o_socket_is_writing Unexecuted instantiation: server_timing.c:h2o_socket_is_writing Unexecuted instantiation: status.c:h2o_socket_is_writing Unexecuted instantiation: events.c:h2o_socket_is_writing Unexecuted instantiation: memory.c:h2o_socket_is_writing Unexecuted instantiation: requests.c:h2o_socket_is_writing Unexecuted instantiation: ssl.c:h2o_socket_is_writing Unexecuted instantiation: durations.c:h2o_socket_is_writing Unexecuted instantiation: brotli.c:h2o_socket_is_writing |
552 | | |
553 | | inline int h2o_socket_is_reading(h2o_socket_t *sock) |
554 | 139k | { |
555 | 139k | return sock->_cb.read != NULL; |
556 | 139k | } Unexecuted instantiation: driver.cc:h2o_socket_is_reading(st_h2o_socket_t*) Unexecuted instantiation: driver_common.cc:h2o_socket_is_reading(st_h2o_socket_t*) Unexecuted instantiation: multithread.c:h2o_socket_is_reading socket.c:h2o_socket_is_reading Line | Count | Source | 554 | 34.9k | { | 555 | | return sock->_cb.read != NULL; | 556 | 34.9k | } |
Unexecuted instantiation: socketpool.c:h2o_socket_is_reading Unexecuted instantiation: roundrobin.c:h2o_socket_is_reading Unexecuted instantiation: config.c:h2o_socket_is_reading Unexecuted instantiation: configurator.c:h2o_socket_is_reading Unexecuted instantiation: context.c:h2o_socket_is_reading Unexecuted instantiation: headers.c:h2o_socket_is_reading Unexecuted instantiation: request.c:h2o_socket_is_reading Unexecuted instantiation: util.c:h2o_socket_is_reading Unexecuted instantiation: access_log.c:h2o_socket_is_reading Unexecuted instantiation: file.c:h2o_socket_is_reading Unexecuted instantiation: mimemap.c:h2o_socket_is_reading Unexecuted instantiation: proxy.c:h2o_socket_is_reading Unexecuted instantiation: http1.c:h2o_socket_is_reading connection.c:h2o_socket_is_reading Line | Count | Source | 554 | 94.9k | { | 555 | | return sock->_cb.read != NULL; | 556 | 94.9k | } |
Unexecuted instantiation: scheduler.c:h2o_socket_is_reading Unexecuted instantiation: stream.c:h2o_socket_is_reading Unexecuted instantiation: http2_debug_state.c:h2o_socket_is_reading Unexecuted instantiation: common.c:h2o_socket_is_reading Unexecuted instantiation: server.c:h2o_socket_is_reading Unexecuted instantiation: hostinfo.c:h2o_socket_is_reading Unexecuted instantiation: http3client.c:h2o_socket_is_reading Unexecuted instantiation: httpclient.c:h2o_socket_is_reading Unexecuted instantiation: memcached.c:h2o_socket_is_reading Unexecuted instantiation: redis.c:h2o_socket_is_reading Unexecuted instantiation: serverutil.c:h2o_socket_is_reading Unexecuted instantiation: absprio.c:h2o_socket_is_reading Unexecuted instantiation: logconf.c:h2o_socket_is_reading Unexecuted instantiation: compress.c:h2o_socket_is_reading Unexecuted instantiation: gzip.c:h2o_socket_is_reading Unexecuted instantiation: headers_util.c:h2o_socket_is_reading Unexecuted instantiation: frame.c:h2o_socket_is_reading Unexecuted instantiation: qpack.c:h2o_socket_is_reading http1client.c:h2o_socket_is_reading Line | Count | Source | 554 | 9.54k | { | 555 | | return sock->_cb.read != NULL; | 556 | 9.54k | } |
Unexecuted instantiation: http2client.c:h2o_socket_is_reading Unexecuted instantiation: pipe_sender.c:h2o_socket_is_reading Unexecuted instantiation: driver_url.cc:h2o_socket_is_reading(st_h2o_socket_t*) Unexecuted instantiation: driver_h3.cc:h2o_socket_is_reading(st_h2o_socket_t*) Unexecuted instantiation: least_conn.c:h2o_socket_is_reading Unexecuted instantiation: errordoc.c:h2o_socket_is_reading Unexecuted instantiation: expires.c:h2o_socket_is_reading Unexecuted instantiation: fastcgi.c:h2o_socket_is_reading Unexecuted instantiation: h2olog.c:h2o_socket_is_reading Unexecuted instantiation: connect.c:h2o_socket_is_reading Unexecuted instantiation: redirect.c:h2o_socket_is_reading Unexecuted instantiation: reproxy.c:h2o_socket_is_reading Unexecuted instantiation: throttle_resp.c:h2o_socket_is_reading Unexecuted instantiation: self_trace.c:h2o_socket_is_reading Unexecuted instantiation: server_timing.c:h2o_socket_is_reading Unexecuted instantiation: status.c:h2o_socket_is_reading Unexecuted instantiation: events.c:h2o_socket_is_reading Unexecuted instantiation: memory.c:h2o_socket_is_reading Unexecuted instantiation: requests.c:h2o_socket_is_reading Unexecuted instantiation: ssl.c:h2o_socket_is_reading Unexecuted instantiation: durations.c:h2o_socket_is_reading Unexecuted instantiation: brotli.c:h2o_socket_is_reading |
557 | | |
558 | | inline size_t h2o_socket_prepare_for_latency_optimized_write(h2o_socket_t *sock, |
559 | | const h2o_socket_latency_optimization_conditions_t *conditions) |
560 | 37.4k | { |
561 | 37.4k | switch (sock->_latency_optimization.state) { |
562 | 6.96k | case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD: |
563 | 6.96k | case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE: |
564 | 6.96k | return h2o_socket_do_prepare_for_latency_optimized_write(sock, conditions); |
565 | 30.5k | default: |
566 | 30.5k | return sock->_latency_optimization.suggested_write_size; |
567 | 37.4k | } |
568 | 37.4k | } Unexecuted instantiation: driver.cc:h2o_socket_prepare_for_latency_optimized_write(st_h2o_socket_t*, st_h2o_socket_latency_optimization_conditions_t const*) Unexecuted instantiation: driver_common.cc:h2o_socket_prepare_for_latency_optimized_write(st_h2o_socket_t*, st_h2o_socket_latency_optimization_conditions_t const*) Unexecuted instantiation: multithread.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: socket.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: socketpool.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: roundrobin.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: config.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: configurator.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: context.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: headers.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: request.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: util.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: access_log.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: file.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: mimemap.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: proxy.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: http1.c:h2o_socket_prepare_for_latency_optimized_write connection.c:h2o_socket_prepare_for_latency_optimized_write Line | Count | Source | 560 | 30.7k | { | 561 | 30.7k | switch (sock->_latency_optimization.state) { | 562 | 6.96k | case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD: | 563 | 6.96k | case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE: | 564 | 6.96k | return h2o_socket_do_prepare_for_latency_optimized_write(sock, conditions); | 565 | 23.7k | default: | 566 | 23.7k | return sock->_latency_optimization.suggested_write_size; | 567 | 30.7k | } | 568 | 30.7k | } |
Unexecuted instantiation: scheduler.c:h2o_socket_prepare_for_latency_optimized_write stream.c:h2o_socket_prepare_for_latency_optimized_write Line | Count | Source | 560 | 6.77k | { | 561 | 6.77k | switch (sock->_latency_optimization.state) { | 562 | 0 | case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD: | 563 | 0 | case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE: | 564 | 0 | return h2o_socket_do_prepare_for_latency_optimized_write(sock, conditions); | 565 | 6.77k | default: | 566 | 6.77k | return sock->_latency_optimization.suggested_write_size; | 567 | 6.77k | } | 568 | 6.77k | } |
Unexecuted instantiation: http2_debug_state.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: common.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: server.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: hostinfo.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: http3client.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: httpclient.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: memcached.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: redis.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: serverutil.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: absprio.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: logconf.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: compress.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: gzip.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: headers_util.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: frame.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: qpack.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: http1client.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: http2client.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: pipe_sender.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: driver_url.cc:h2o_socket_prepare_for_latency_optimized_write(st_h2o_socket_t*, st_h2o_socket_latency_optimization_conditions_t const*) Unexecuted instantiation: driver_h3.cc:h2o_socket_prepare_for_latency_optimized_write(st_h2o_socket_t*, st_h2o_socket_latency_optimization_conditions_t const*) Unexecuted instantiation: least_conn.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: errordoc.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: expires.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: fastcgi.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: h2olog.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: connect.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: redirect.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: reproxy.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: throttle_resp.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: self_trace.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: server_timing.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: status.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: events.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: memory.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: requests.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: ssl.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: durations.c:h2o_socket_prepare_for_latency_optimized_write Unexecuted instantiation: brotli.c:h2o_socket_prepare_for_latency_optimized_write |
569 | | |
570 | | inline h2o_iovec_t h2o_socket_log_ssl_protocol_version(h2o_socket_t *sock, h2o_mem_pool_t *pool) |
571 | 0 | { |
572 | 0 | (void)pool; |
573 | 0 | const char *s = h2o_socket_get_ssl_protocol_version(sock); |
574 | 0 | return s != NULL ? h2o_iovec_init(s, strlen(s)) : h2o_iovec_init(NULL, 0); |
575 | 0 | } Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_protocol_version(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_protocol_version(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: socket.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: config.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: context.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: headers.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: request.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: util.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: file.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: http1.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: connection.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: stream.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: common.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: server.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: redis.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: compress.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: frame.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_protocol_version(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_protocol_version(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: expires.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: connect.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: status.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: events.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: memory.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: requests.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: durations.c:h2o_socket_log_ssl_protocol_version Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_protocol_version |
576 | | |
577 | | inline h2o_iovec_t h2o_socket_log_ssl_session_reused(h2o_socket_t *sock, h2o_mem_pool_t *pool) |
578 | 0 | { |
579 | 0 | (void)pool; |
580 | 0 | switch (h2o_socket_get_ssl_session_reused(sock)) { |
581 | 0 | case 0: |
582 | 0 | return h2o_iovec_init(H2O_STRLIT("0")); |
583 | 0 | case 1: |
584 | 0 | return h2o_iovec_init(H2O_STRLIT("1")); |
585 | 0 | default: |
586 | 0 | return h2o_iovec_init(NULL, 0); |
587 | 0 | } |
588 | 0 | } Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_session_reused(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_session_reused(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: socket.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: config.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: context.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: headers.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: request.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: util.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: file.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: http1.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: connection.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: stream.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: common.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: server.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: redis.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: compress.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: frame.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_session_reused(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_session_reused(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: expires.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: connect.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: status.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: events.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: memory.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: requests.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: durations.c:h2o_socket_log_ssl_session_reused Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_session_reused |
589 | | |
590 | | inline h2o_iovec_t h2o_socket_log_ssl_cipher(h2o_socket_t *sock, h2o_mem_pool_t *pool) |
591 | 0 | { |
592 | 0 | (void)pool; |
593 | 0 | const char *s = h2o_socket_get_ssl_cipher(sock); |
594 | 0 | return s != NULL ? h2o_iovec_init(s, strlen(s)) : h2o_iovec_init(NULL, 0); |
595 | 0 | } Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_cipher(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_cipher(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: socket.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: config.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: context.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: headers.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: request.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: util.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: file.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: http1.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: connection.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: stream.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: common.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: server.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: redis.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: compress.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: frame.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_cipher(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_cipher(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: expires.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: connect.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: status.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: events.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: memory.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: requests.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: durations.c:h2o_socket_log_ssl_cipher Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_cipher |
596 | | |
597 | | inline h2o_iovec_t h2o_socket_log_ssl_server_name(h2o_socket_t *sock, h2o_mem_pool_t *pool) |
598 | 0 | { |
599 | 0 | (void)pool; |
600 | 0 | const char *s = h2o_socket_get_ssl_server_name(sock); |
601 | 0 | return s != NULL ? h2o_iovec_init(s, strlen(s)) : h2o_iovec_init(NULL, 0); |
602 | 0 | } Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_server_name(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_server_name(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: socket.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: config.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: context.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: headers.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: request.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: util.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: file.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: http1.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: connection.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: stream.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: common.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: server.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: redis.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: compress.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: frame.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_server_name(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_server_name(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: expires.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: connect.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: status.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: events.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: memory.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: requests.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: durations.c:h2o_socket_log_ssl_server_name Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_server_name |
603 | | |
604 | | inline h2o_iovec_t h2o_socket_log_ssl_negotiated_protocol(h2o_socket_t *sock, h2o_mem_pool_t *pool) |
605 | 0 | { |
606 | 0 | (void)pool; |
607 | 0 | return h2o_socket_ssl_get_selected_protocol(sock); |
608 | 0 | } Unexecuted instantiation: driver.cc:h2o_socket_log_ssl_negotiated_protocol(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_common.cc:h2o_socket_log_ssl_negotiated_protocol(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: multithread.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: socket.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: socketpool.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: roundrobin.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: config.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: configurator.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: context.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: headers.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: request.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: util.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: access_log.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: file.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: mimemap.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: proxy.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: http1.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: connection.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: scheduler.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: stream.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: common.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: server.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: hostinfo.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: http3client.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: httpclient.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: memcached.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: redis.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: serverutil.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: absprio.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: logconf.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: compress.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: gzip.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: headers_util.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: frame.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: qpack.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: http1client.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: http2client.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: pipe_sender.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: driver_url.cc:h2o_socket_log_ssl_negotiated_protocol(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: driver_h3.cc:h2o_socket_log_ssl_negotiated_protocol(st_h2o_socket_t*, st_h2o_mem_pool_t*) Unexecuted instantiation: least_conn.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: errordoc.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: expires.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: fastcgi.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: h2olog.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: connect.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: redirect.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: reproxy.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: throttle_resp.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: self_trace.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: server_timing.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: status.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: events.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: memory.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: requests.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: ssl.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: durations.c:h2o_socket_log_ssl_negotiated_protocol Unexecuted instantiation: brotli.c:h2o_socket_log_ssl_negotiated_protocol |
609 | | |
610 | | inline int h2o_sliding_counter_is_running(h2o_sliding_counter_t *counter) |
611 | 1.83M | { |
612 | 1.83M | return counter->cur.start_at != 0; |
613 | 1.83M | } Unexecuted instantiation: driver.cc:h2o_sliding_counter_is_running(st_h2o_sliding_counter_t*) Unexecuted instantiation: driver_common.cc:h2o_sliding_counter_is_running(st_h2o_sliding_counter_t*) Unexecuted instantiation: multithread.c:h2o_sliding_counter_is_running socket.c:h2o_sliding_counter_is_running Line | Count | Source | 611 | 1.83M | { | 612 | 1.83M | return counter->cur.start_at != 0; | 613 | 1.83M | } |
Unexecuted instantiation: socketpool.c:h2o_sliding_counter_is_running Unexecuted instantiation: roundrobin.c:h2o_sliding_counter_is_running Unexecuted instantiation: config.c:h2o_sliding_counter_is_running Unexecuted instantiation: configurator.c:h2o_sliding_counter_is_running Unexecuted instantiation: context.c:h2o_sliding_counter_is_running Unexecuted instantiation: headers.c:h2o_sliding_counter_is_running Unexecuted instantiation: request.c:h2o_sliding_counter_is_running Unexecuted instantiation: util.c:h2o_sliding_counter_is_running Unexecuted instantiation: access_log.c:h2o_sliding_counter_is_running Unexecuted instantiation: file.c:h2o_sliding_counter_is_running Unexecuted instantiation: mimemap.c:h2o_sliding_counter_is_running Unexecuted instantiation: proxy.c:h2o_sliding_counter_is_running Unexecuted instantiation: http1.c:h2o_sliding_counter_is_running Unexecuted instantiation: connection.c:h2o_sliding_counter_is_running Unexecuted instantiation: scheduler.c:h2o_sliding_counter_is_running Unexecuted instantiation: stream.c:h2o_sliding_counter_is_running Unexecuted instantiation: http2_debug_state.c:h2o_sliding_counter_is_running Unexecuted instantiation: common.c:h2o_sliding_counter_is_running Unexecuted instantiation: server.c:h2o_sliding_counter_is_running Unexecuted instantiation: hostinfo.c:h2o_sliding_counter_is_running Unexecuted instantiation: http3client.c:h2o_sliding_counter_is_running Unexecuted instantiation: httpclient.c:h2o_sliding_counter_is_running Unexecuted instantiation: memcached.c:h2o_sliding_counter_is_running Unexecuted instantiation: redis.c:h2o_sliding_counter_is_running Unexecuted instantiation: serverutil.c:h2o_sliding_counter_is_running Unexecuted instantiation: absprio.c:h2o_sliding_counter_is_running Unexecuted instantiation: logconf.c:h2o_sliding_counter_is_running Unexecuted instantiation: compress.c:h2o_sliding_counter_is_running Unexecuted instantiation: gzip.c:h2o_sliding_counter_is_running Unexecuted instantiation: headers_util.c:h2o_sliding_counter_is_running Unexecuted instantiation: frame.c:h2o_sliding_counter_is_running Unexecuted instantiation: qpack.c:h2o_sliding_counter_is_running Unexecuted instantiation: http1client.c:h2o_sliding_counter_is_running Unexecuted instantiation: http2client.c:h2o_sliding_counter_is_running Unexecuted instantiation: pipe_sender.c:h2o_sliding_counter_is_running Unexecuted instantiation: driver_url.cc:h2o_sliding_counter_is_running(st_h2o_sliding_counter_t*) Unexecuted instantiation: driver_h3.cc:h2o_sliding_counter_is_running(st_h2o_sliding_counter_t*) Unexecuted instantiation: least_conn.c:h2o_sliding_counter_is_running Unexecuted instantiation: errordoc.c:h2o_sliding_counter_is_running Unexecuted instantiation: expires.c:h2o_sliding_counter_is_running Unexecuted instantiation: fastcgi.c:h2o_sliding_counter_is_running Unexecuted instantiation: h2olog.c:h2o_sliding_counter_is_running Unexecuted instantiation: connect.c:h2o_sliding_counter_is_running Unexecuted instantiation: redirect.c:h2o_sliding_counter_is_running Unexecuted instantiation: reproxy.c:h2o_sliding_counter_is_running Unexecuted instantiation: throttle_resp.c:h2o_sliding_counter_is_running Unexecuted instantiation: self_trace.c:h2o_sliding_counter_is_running Unexecuted instantiation: server_timing.c:h2o_sliding_counter_is_running Unexecuted instantiation: status.c:h2o_sliding_counter_is_running Unexecuted instantiation: events.c:h2o_sliding_counter_is_running Unexecuted instantiation: memory.c:h2o_sliding_counter_is_running Unexecuted instantiation: requests.c:h2o_sliding_counter_is_running Unexecuted instantiation: ssl.c:h2o_sliding_counter_is_running Unexecuted instantiation: durations.c:h2o_sliding_counter_is_running Unexecuted instantiation: brotli.c:h2o_sliding_counter_is_running |
614 | | |
615 | | inline void h2o_sliding_counter_start(h2o_sliding_counter_t *counter, uint64_t now) |
616 | 41.3k | { |
617 | 41.3k | counter->cur.start_at = now; |
618 | 41.3k | } Unexecuted instantiation: driver.cc:h2o_sliding_counter_start(st_h2o_sliding_counter_t*, unsigned long) Unexecuted instantiation: driver_common.cc:h2o_sliding_counter_start(st_h2o_sliding_counter_t*, unsigned long) Unexecuted instantiation: multithread.c:h2o_sliding_counter_start socket.c:h2o_sliding_counter_start Line | Count | Source | 616 | 41.3k | { | 617 | 41.3k | counter->cur.start_at = now; | 618 | 41.3k | } |
Unexecuted instantiation: socketpool.c:h2o_sliding_counter_start Unexecuted instantiation: roundrobin.c:h2o_sliding_counter_start Unexecuted instantiation: config.c:h2o_sliding_counter_start Unexecuted instantiation: configurator.c:h2o_sliding_counter_start Unexecuted instantiation: context.c:h2o_sliding_counter_start Unexecuted instantiation: headers.c:h2o_sliding_counter_start Unexecuted instantiation: request.c:h2o_sliding_counter_start Unexecuted instantiation: util.c:h2o_sliding_counter_start Unexecuted instantiation: access_log.c:h2o_sliding_counter_start Unexecuted instantiation: file.c:h2o_sliding_counter_start Unexecuted instantiation: mimemap.c:h2o_sliding_counter_start Unexecuted instantiation: proxy.c:h2o_sliding_counter_start Unexecuted instantiation: http1.c:h2o_sliding_counter_start Unexecuted instantiation: connection.c:h2o_sliding_counter_start Unexecuted instantiation: scheduler.c:h2o_sliding_counter_start Unexecuted instantiation: stream.c:h2o_sliding_counter_start Unexecuted instantiation: http2_debug_state.c:h2o_sliding_counter_start Unexecuted instantiation: common.c:h2o_sliding_counter_start Unexecuted instantiation: server.c:h2o_sliding_counter_start Unexecuted instantiation: hostinfo.c:h2o_sliding_counter_start Unexecuted instantiation: http3client.c:h2o_sliding_counter_start Unexecuted instantiation: httpclient.c:h2o_sliding_counter_start Unexecuted instantiation: memcached.c:h2o_sliding_counter_start Unexecuted instantiation: redis.c:h2o_sliding_counter_start Unexecuted instantiation: serverutil.c:h2o_sliding_counter_start Unexecuted instantiation: absprio.c:h2o_sliding_counter_start Unexecuted instantiation: logconf.c:h2o_sliding_counter_start Unexecuted instantiation: compress.c:h2o_sliding_counter_start Unexecuted instantiation: gzip.c:h2o_sliding_counter_start Unexecuted instantiation: headers_util.c:h2o_sliding_counter_start Unexecuted instantiation: frame.c:h2o_sliding_counter_start Unexecuted instantiation: qpack.c:h2o_sliding_counter_start Unexecuted instantiation: http1client.c:h2o_sliding_counter_start Unexecuted instantiation: http2client.c:h2o_sliding_counter_start Unexecuted instantiation: pipe_sender.c:h2o_sliding_counter_start Unexecuted instantiation: driver_url.cc:h2o_sliding_counter_start(st_h2o_sliding_counter_t*, unsigned long) Unexecuted instantiation: driver_h3.cc:h2o_sliding_counter_start(st_h2o_sliding_counter_t*, unsigned long) Unexecuted instantiation: least_conn.c:h2o_sliding_counter_start Unexecuted instantiation: errordoc.c:h2o_sliding_counter_start Unexecuted instantiation: expires.c:h2o_sliding_counter_start Unexecuted instantiation: fastcgi.c:h2o_sliding_counter_start Unexecuted instantiation: h2olog.c:h2o_sliding_counter_start Unexecuted instantiation: connect.c:h2o_sliding_counter_start Unexecuted instantiation: redirect.c:h2o_sliding_counter_start Unexecuted instantiation: reproxy.c:h2o_sliding_counter_start Unexecuted instantiation: throttle_resp.c:h2o_sliding_counter_start Unexecuted instantiation: self_trace.c:h2o_sliding_counter_start Unexecuted instantiation: server_timing.c:h2o_sliding_counter_start Unexecuted instantiation: status.c:h2o_sliding_counter_start Unexecuted instantiation: events.c:h2o_sliding_counter_start Unexecuted instantiation: memory.c:h2o_sliding_counter_start Unexecuted instantiation: requests.c:h2o_sliding_counter_start Unexecuted instantiation: ssl.c:h2o_sliding_counter_start Unexecuted instantiation: durations.c:h2o_sliding_counter_start Unexecuted instantiation: brotli.c:h2o_sliding_counter_start |
619 | | |
620 | | inline ptls_log_conn_state_t *h2o_socket_log_state(h2o_socket_t *sock) |
621 | 0 | { |
622 | 0 | return &sock->_log_state; |
623 | 0 | } Unexecuted instantiation: driver.cc:h2o_socket_log_state(st_h2o_socket_t*) Unexecuted instantiation: driver_common.cc:h2o_socket_log_state(st_h2o_socket_t*) Unexecuted instantiation: multithread.c:h2o_socket_log_state Unexecuted instantiation: socket.c:h2o_socket_log_state Unexecuted instantiation: socketpool.c:h2o_socket_log_state Unexecuted instantiation: roundrobin.c:h2o_socket_log_state Unexecuted instantiation: config.c:h2o_socket_log_state Unexecuted instantiation: configurator.c:h2o_socket_log_state Unexecuted instantiation: context.c:h2o_socket_log_state Unexecuted instantiation: headers.c:h2o_socket_log_state Unexecuted instantiation: request.c:h2o_socket_log_state Unexecuted instantiation: util.c:h2o_socket_log_state Unexecuted instantiation: access_log.c:h2o_socket_log_state Unexecuted instantiation: file.c:h2o_socket_log_state Unexecuted instantiation: mimemap.c:h2o_socket_log_state Unexecuted instantiation: proxy.c:h2o_socket_log_state Unexecuted instantiation: http1.c:h2o_socket_log_state Unexecuted instantiation: connection.c:h2o_socket_log_state Unexecuted instantiation: scheduler.c:h2o_socket_log_state Unexecuted instantiation: stream.c:h2o_socket_log_state Unexecuted instantiation: http2_debug_state.c:h2o_socket_log_state Unexecuted instantiation: common.c:h2o_socket_log_state Unexecuted instantiation: server.c:h2o_socket_log_state Unexecuted instantiation: hostinfo.c:h2o_socket_log_state Unexecuted instantiation: http3client.c:h2o_socket_log_state Unexecuted instantiation: httpclient.c:h2o_socket_log_state Unexecuted instantiation: memcached.c:h2o_socket_log_state Unexecuted instantiation: redis.c:h2o_socket_log_state Unexecuted instantiation: serverutil.c:h2o_socket_log_state Unexecuted instantiation: absprio.c:h2o_socket_log_state Unexecuted instantiation: logconf.c:h2o_socket_log_state Unexecuted instantiation: compress.c:h2o_socket_log_state Unexecuted instantiation: gzip.c:h2o_socket_log_state Unexecuted instantiation: headers_util.c:h2o_socket_log_state Unexecuted instantiation: frame.c:h2o_socket_log_state Unexecuted instantiation: qpack.c:h2o_socket_log_state Unexecuted instantiation: http1client.c:h2o_socket_log_state Unexecuted instantiation: http2client.c:h2o_socket_log_state Unexecuted instantiation: pipe_sender.c:h2o_socket_log_state Unexecuted instantiation: driver_url.cc:h2o_socket_log_state(st_h2o_socket_t*) Unexecuted instantiation: driver_h3.cc:h2o_socket_log_state(st_h2o_socket_t*) Unexecuted instantiation: least_conn.c:h2o_socket_log_state Unexecuted instantiation: errordoc.c:h2o_socket_log_state Unexecuted instantiation: expires.c:h2o_socket_log_state Unexecuted instantiation: fastcgi.c:h2o_socket_log_state Unexecuted instantiation: h2olog.c:h2o_socket_log_state Unexecuted instantiation: connect.c:h2o_socket_log_state Unexecuted instantiation: redirect.c:h2o_socket_log_state Unexecuted instantiation: reproxy.c:h2o_socket_log_state Unexecuted instantiation: throttle_resp.c:h2o_socket_log_state Unexecuted instantiation: self_trace.c:h2o_socket_log_state Unexecuted instantiation: server_timing.c:h2o_socket_log_state Unexecuted instantiation: status.c:h2o_socket_log_state Unexecuted instantiation: events.c:h2o_socket_log_state Unexecuted instantiation: memory.c:h2o_socket_log_state Unexecuted instantiation: requests.c:h2o_socket_log_state Unexecuted instantiation: ssl.c:h2o_socket_log_state Unexecuted instantiation: durations.c:h2o_socket_log_state Unexecuted instantiation: brotli.c:h2o_socket_log_state |
624 | | |
625 | | #ifdef __cplusplus |
626 | | } |
627 | | #endif |
628 | | |
629 | | #endif |