summaryrefslogtreecommitdiffstats
path: root/debian/vendor-h2o/include/h2o/socket.h
diff options
context:
space:
mode:
Diffstat (limited to 'debian/vendor-h2o/include/h2o/socket.h')
-rw-r--r--debian/vendor-h2o/include/h2o/socket.h403
1 files changed, 0 insertions, 403 deletions
diff --git a/debian/vendor-h2o/include/h2o/socket.h b/debian/vendor-h2o/include/h2o/socket.h
deleted file mode 100644
index 9727e34..0000000
--- a/debian/vendor-h2o/include/h2o/socket.h
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * Copyright (c) 2014-2016 DeNA Co., Ltd., Kazuho Oku, Fastly, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-#ifndef h2o__socket_h
-#define h2o__socket_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-#include <sys/socket.h>
-#include <openssl/ssl.h>
-#include "h2o/cache.h"
-#include "h2o/memory.h"
-#include "h2o/openssl_backport.h"
-#include "h2o/string_.h"
-
-#ifndef H2O_USE_LIBUV
-#if H2O_USE_SELECT || H2O_USE_EPOLL || H2O_USE_KQUEUE
-#define H2O_USE_LIBUV 0
-#else
-#define H2O_USE_LIBUV 1
-#endif
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x10002000L
-#define H2O_USE_ALPN 1
-#define H2O_USE_NPN 1
-#elif OPENSSL_VERSION_NUMBER >= 0x10001000L
-#define H2O_USE_ALPN 0
-#define H2O_USE_NPN 1
-#else
-#define H2O_USE_ALPN 0
-#define H2O_USE_NPN 0
-#endif
-
-typedef struct st_h2o_sliding_counter_t {
- uint64_t average;
- struct {
- uint64_t sum;
- uint64_t slots[8];
- size_t index;
- } prev;
- struct {
- uint64_t start_at;
- } cur;
-} h2o_sliding_counter_t;
-
-static int h2o_sliding_counter_is_running(h2o_sliding_counter_t *counter);
-static void h2o_sliding_counter_start(h2o_sliding_counter_t *counter, uint64_t now);
-void h2o_sliding_counter_stop(h2o_sliding_counter_t *counter, uint64_t now);
-
-#define H2O_SOCKET_INITIAL_INPUT_BUFFER_SIZE 4096
-
-typedef struct st_h2o_socket_t h2o_socket_t;
-
-typedef void (*h2o_socket_cb)(h2o_socket_t *sock, const char *err);
-
-#if H2O_USE_LIBUV
-#include "socket/uv-binding.h"
-#else
-#include "socket/evloop.h"
-#endif
-
-struct st_h2o_socket_peername_t {
- socklen_t len;
- struct sockaddr addr;
-};
-
-enum {
- H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD = 0,
- H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE,
- H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_DISABLED,
- H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_DETERMINED
-};
-
-/**
- * abstraction layer for sockets (SSL vs. TCP)
- */
-struct st_h2o_socket_t {
- void *data;
- struct st_h2o_socket_ssl_t *ssl;
- h2o_buffer_t *input;
- /**
- * total bytes read (above the TLS layer)
- */
- size_t bytes_read;
- /**
- * total bytes written (above the TLS layer)
- */
- size_t bytes_written;
- struct {
- void (*cb)(void *data);
- void *data;
- } on_close;
- struct {
- h2o_socket_cb read;
- h2o_socket_cb write;
- } _cb;
- struct st_h2o_socket_peername_t *_peername;
- struct {
- uint8_t state; /* one of H2O_SOCKET_LATENCY_STATE_* */
- uint8_t notsent_is_minimized : 1;
- uint16_t suggested_tls_payload_size;
- size_t suggested_write_size; /* SIZE_MAX if no need to optimize for latency */
- } _latency_optimization;
-};
-
-typedef struct st_h2o_socket_export_t {
- int fd;
- struct st_h2o_socket_ssl_t *ssl;
- h2o_buffer_t *input;
-} h2o_socket_export_t;
-
-/**
- * sets the conditions to enable the optimization
- */
-typedef struct st_h2o_socket_latency_optimization_conditions_t {
- /**
- * in milliseconds
- */
- unsigned min_rtt;
- /**
- * percent ratio
- */
- unsigned max_additional_delay;
- /**
- * in number of octets
- */
- unsigned max_cwnd;
-} h2o_socket_latency_optimization_conditions_t;
-
-typedef void (*h2o_socket_ssl_resumption_get_async_cb)(h2o_socket_t *sock, h2o_iovec_t session_id);
-typedef void (*h2o_socket_ssl_resumption_new_cb)(h2o_iovec_t session_id, h2o_iovec_t session_data);
-typedef void (*h2o_socket_ssl_resumption_remove_cb)(h2o_iovec_t session_id);
-
-extern h2o_buffer_mmap_settings_t h2o_socket_buffer_mmap_settings;
-extern __thread h2o_buffer_prototype_t h2o_socket_buffer_prototype;
-
-extern const char *h2o_socket_error_out_of_memory;
-extern const char *h2o_socket_error_io;
-extern const char *h2o_socket_error_closed;
-extern const char *h2o_socket_error_conn_fail;
-extern const char *h2o_socket_error_ssl_no_cert;
-extern const char *h2o_socket_error_ssl_cert_invalid;
-extern const char *h2o_socket_error_ssl_cert_name_mismatch;
-extern const char *h2o_socket_error_ssl_decode;
-
-/**
- * returns the loop
- */
-h2o_loop_t *h2o_socket_get_loop(h2o_socket_t *sock);
-/**
- * detaches a socket from loop.
- */
-int h2o_socket_export(h2o_socket_t *sock, h2o_socket_export_t *info);
-/**
- * attaches a socket onto a loop.
- */
-h2o_socket_t *h2o_socket_import(h2o_loop_t *loop, h2o_socket_export_t *info);
-/**
- * destroys an exported socket info.
- */
-void h2o_socket_dispose_export(h2o_socket_export_t *info);
-/**
- * closes the socket
- */
-void h2o_socket_close(h2o_socket_t *sock);
-/**
- * Schedules a callback to be notify we the socket can be written to
- */
-void h2o_socket_notify_write(h2o_socket_t *sock, h2o_socket_cb cb);
-/**
- * Obtain the underlying fd of a sock struct
- */
-int h2o_socket_get_fd(h2o_socket_t *sock);
-/**
- * Set/Unset the H2O_SOCKET_FLAG_DONT_READ flag.
- * Setting it allows to be simply notified rather than having the data
- * automatically be read.
- */
-void h2o_socket_dont_read(h2o_socket_t *sock, int dont_read);
-/**
- * connects to peer
- */
-h2o_socket_t *h2o_socket_connect(h2o_loop_t *loop, struct sockaddr *addr, socklen_t addrlen, h2o_socket_cb cb);
-/**
- * prepares for latency-optimized write and returns the number of octets that should be written, or SIZE_MAX if failed to prepare
- */
-static size_t h2o_socket_prepare_for_latency_optimized_write(h2o_socket_t *sock,
- const h2o_socket_latency_optimization_conditions_t *conditions);
-size_t h2o_socket_do_prepare_for_latency_optimized_write(h2o_socket_t *sock,
- const h2o_socket_latency_optimization_conditions_t *conditions);
-/**
- * writes given data to socket
- * @param sock the socket
- * @param bufs an array of buffers
- * @param bufcnt length of the buffer array
- * @param cb callback to be called when write is complete
- */
-void h2o_socket_write(h2o_socket_t *sock, h2o_iovec_t *bufs, size_t bufcnt, h2o_socket_cb cb);
-/**
- * starts polling on the socket (for read) and calls given callback when data arrives
- * @param sock the socket
- * @param cb callback to be called when data arrives
- * @note callback is called when any data arrives at the TCP level so that the
- * applications can update their timeout counters. In other words, there is no
- * guarantee that _new_ data is available when the callback gets called (e.g.
- * in cases like receiving a partial SSL record or a corrupt TCP packet).
- */
-void h2o_socket_read_start(h2o_socket_t *sock, h2o_socket_cb cb);
-/**
- * stops polling on the socket (for read)
- * @param sock the socket
- */
-void h2o_socket_read_stop(h2o_socket_t *sock);
-/**
- * returns a boolean value indicating whether if there is a write is under operation
- */
-static int h2o_socket_is_writing(h2o_socket_t *sock);
-/**
- * returns a boolean value indicating whether if the socket is being polled for read
- */
-static int h2o_socket_is_reading(h2o_socket_t *sock);
-/**
- * returns the length of the local address obtained (or 0 if failed)
- */
-socklen_t h2o_socket_getsockname(h2o_socket_t *sock, struct sockaddr *sa);
-/**
- * returns the length of the remote address obtained (or 0 if failed)
- */
-socklen_t h2o_socket_getpeername(h2o_socket_t *sock, struct sockaddr *sa);
-/**
- * sets the remote address (used for overriding the value)
- */
-void h2o_socket_setpeername(h2o_socket_t *sock, struct sockaddr *sa, socklen_t len);
-/**
- *
- */
-const char *h2o_socket_get_ssl_protocol_version(h2o_socket_t *sock);
-int h2o_socket_get_ssl_session_reused(h2o_socket_t *sock);
-const char *h2o_socket_get_ssl_cipher(h2o_socket_t *sock);
-int h2o_socket_get_ssl_cipher_bits(h2o_socket_t *sock);
-h2o_iovec_t h2o_socket_get_ssl_session_id(h2o_socket_t *sock);
-const char *h2o_socket_get_ssl_server_name(const h2o_socket_t *sock);
-static h2o_iovec_t h2o_socket_log_ssl_protocol_version(h2o_socket_t *sock, h2o_mem_pool_t *pool);
-static h2o_iovec_t h2o_socket_log_ssl_session_reused(h2o_socket_t *sock, h2o_mem_pool_t *pool);
-static h2o_iovec_t h2o_socket_log_ssl_cipher(h2o_socket_t *sock, h2o_mem_pool_t *pool);
-h2o_iovec_t h2o_socket_log_ssl_cipher_bits(h2o_socket_t *sock, h2o_mem_pool_t *pool);
-h2o_iovec_t h2o_socket_log_ssl_session_id(h2o_socket_t *sock, h2o_mem_pool_t *pool);
-
-/**
- * compares socket addresses
- */
-int h2o_socket_compare_address(struct sockaddr *x, struct sockaddr *y);
-/**
- * getnameinfo (buf should be NI_MAXHOST in length), returns SIZE_MAX if failed
- */
-size_t h2o_socket_getnumerichost(struct sockaddr *sa, socklen_t salen, char *buf);
-/**
- * returns the port number, or -1 if failed
- */
-int32_t h2o_socket_getport(struct sockaddr *sa);
-/**
- * performs SSL handshake on a socket
- * @param sock the socket
- * @param ssl_ctx SSL context
- * @param handshake_cb callback to be called when handshake is complete
- */
-void h2o_socket_ssl_handshake(h2o_socket_t *sock, SSL_CTX *ssl_ctx, const char *server_name, h2o_socket_cb handshake_cb);
-/**
- * resumes SSL handshake with given session data
- * @param sock the socket
- * @param session_data session data (or {NULL,0} if not available)
- */
-void h2o_socket_ssl_resume_server_handshake(h2o_socket_t *sock, h2o_iovec_t session_data);
-/**
- * registers callbacks to be called for handling session data
- */
-void h2o_socket_ssl_async_resumption_init(h2o_socket_ssl_resumption_get_async_cb get_cb, h2o_socket_ssl_resumption_new_cb new_cb);
-/**
- * setups the SSL context to use the async resumption
- */
-void h2o_socket_ssl_async_resumption_setup_ctx(SSL_CTX *ctx);
-/**
- * returns the name of the protocol selected using either NPN or ALPN (ALPN has the precedence).
- * @param sock the socket
- */
-h2o_iovec_t h2o_socket_ssl_get_selected_protocol(h2o_socket_t *sock);
-/**
- *
- */
-struct st_ptls_context_t *h2o_socket_ssl_get_picotls_context(SSL_CTX *ossl);
-/**
- * associates a picotls context to SSL_CTX
- */
-void h2o_socket_ssl_set_picotls_context(SSL_CTX *ossl, struct st_ptls_context_t *ptls);
-/**
- *
- */
-h2o_cache_t *h2o_socket_ssl_get_session_cache(SSL_CTX *ctx);
-/**
- *
- */
-void h2o_socket_ssl_set_session_cache(SSL_CTX *ctx, h2o_cache_t *cache);
-/**
- *
- */
-void h2o_socket_ssl_destroy_session_cache_entry(h2o_iovec_t value);
-/**
- * registers the protocol list to be used for ALPN
- */
-void h2o_ssl_register_alpn_protocols(SSL_CTX *ctx, const h2o_iovec_t *protocols);
-/**
- * registers the protocol list to be used for NPN
- */
-void h2o_ssl_register_npn_protocols(SSL_CTX *ctx, const char *protocols);
-
-void h2o_socket__write_pending(h2o_socket_t *sock);
-void h2o_socket__write_on_complete(h2o_socket_t *sock, int status);
-
-/* inline defs */
-
-inline int h2o_socket_is_writing(h2o_socket_t *sock)
-{
- return sock->_cb.write != NULL;
-}
-
-inline int h2o_socket_is_reading(h2o_socket_t *sock)
-{
- return sock->_cb.read != NULL;
-}
-
-inline size_t h2o_socket_prepare_for_latency_optimized_write(h2o_socket_t *sock,
- const h2o_socket_latency_optimization_conditions_t *conditions)
-{
- switch (sock->_latency_optimization.state) {
- case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_TBD:
- case H2O_SOCKET_LATENCY_OPTIMIZATION_STATE_NEEDS_UPDATE:
- return h2o_socket_do_prepare_for_latency_optimized_write(sock, conditions);
- default:
- return sock->_latency_optimization.suggested_write_size;
- }
-}
-
-inline h2o_iovec_t h2o_socket_log_ssl_protocol_version(h2o_socket_t *sock, h2o_mem_pool_t *pool)
-{
- const char *s = h2o_socket_get_ssl_protocol_version(sock);
- return s != NULL ? h2o_iovec_init(s, strlen(s)) : h2o_iovec_init(NULL, 0);
-}
-
-inline h2o_iovec_t h2o_socket_log_ssl_session_reused(h2o_socket_t *sock, h2o_mem_pool_t *pool)
-{
- switch (h2o_socket_get_ssl_session_reused(sock)) {
- case 0:
- return h2o_iovec_init(H2O_STRLIT("0"));
- case 1:
- return h2o_iovec_init(H2O_STRLIT("1"));
- default:
- return h2o_iovec_init(NULL, 0);
- }
-}
-
-inline h2o_iovec_t h2o_socket_log_ssl_cipher(h2o_socket_t *sock, h2o_mem_pool_t *pool)
-{
- const char *s = h2o_socket_get_ssl_cipher(sock);
- return s != NULL ? h2o_iovec_init(s, strlen(s)) : h2o_iovec_init(NULL, 0);
-}
-
-inline int h2o_sliding_counter_is_running(h2o_sliding_counter_t *counter)
-{
- return counter->cur.start_at != 0;
-}
-
-inline void h2o_sliding_counter_start(h2o_sliding_counter_t *counter, uint64_t now)
-{
- counter->cur.start_at = now;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif