diff options
Diffstat (limited to 'platform/src/tcp_stream.cpp')
| -rw-r--r-- | platform/src/tcp_stream.cpp | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/platform/src/tcp_stream.cpp b/platform/src/tcp_stream.cpp index be895a0..439908b 100644 --- a/platform/src/tcp_stream.cpp +++ b/platform/src/tcp_stream.cpp @@ -1603,7 +1603,7 @@ static void get_tcp_option_from_cmsg(struct tfe_cmsg *cmsg, struct tfe_tcp_optio } } -void __stream_fd_option_setup(struct tfe_stream_private * _stream, evutil_socket_t fd, tfe_conn_dir dir) +void __stream_fd_option_setup(struct tfe_stream_private * _stream, evutil_socket_t fd, tfe_conn_dir dir, int overwrite_ttl) { struct tfe_stream * stream = &_stream->head; struct tfe_proxy_tcp_options * tcp_options = &_stream->proxy_ref->tcp_options; @@ -1720,21 +1720,31 @@ void __stream_fd_option_setup(struct tfe_stream_private * _stream, evutil_socket errno = 0; } - if (options.tcp_ttl > 0) + if (overwrite_ttl > 0) { - if (__fd_ttl_option_setup(_stream, fd, options.tcp_ttl) < 0) + if (__fd_ttl_option_setup(_stream, fd, overwrite_ttl) < 0) { TFE_LOG_ERROR(g_default_logger, "%s: Failed at setup FD's ttl option, ttl = %d, fd = %d", - stream->str_stream_info, options.tcp_ttl, fd); + stream->str_stream_info, overwrite_ttl, fd); + } + } + else + { + if (options.tcp_ttl > 0) + { + if (__fd_ttl_option_setup(_stream, fd, options.tcp_ttl) < 0) + { + TFE_LOG_ERROR(g_default_logger, "%s: Failed at setup FD's ttl option, ttl = %d, fd = %d", + stream->str_stream_info, options.tcp_ttl, fd); + } } } TFE_LOG_DEBUG(g_default_logger, - "%p %s %s: fetch tcp options, nodelay: %d ttl: %d keepalive: %d keepcnt: %d keepidle: %d keepintvl: %d user_timeout: %d", - stream, stream->str_stream_info, (dir == CONN_DIR_DOWNSTREAM ? "downstream" : "upstream"), - options.tcp_nodelay, options.tcp_ttl, options.tcp_keepalive, - options.tcp_keepcnt, options.tcp_keepidle, options.tcp_keepintvl, options.tcp_user_timeout); - + "%p %s %s: fetch tcp options, nodelay: %d ttl: %d keepalive: %d keepcnt: %d keepidle: %d keepintvl: %d user_timeout: %d", + stream, stream->str_stream_info, (dir == CONN_DIR_DOWNSTREAM ? "downstream" : "upstream"), + options.tcp_nodelay, overwrite_ttl > 0 ? overwrite_ttl : options.tcp_ttl, options.tcp_keepalive, + options.tcp_keepcnt, options.tcp_keepidle, options.tcp_keepintvl, options.tcp_user_timeout); } int tfe_stream_init_by_fds(struct tfe_stream * stream, evutil_socket_t fd_downstream, evutil_socket_t fd_upstream, evutil_socket_t fd_fake_c, evutil_socket_t fd_fake_s) @@ -1763,13 +1773,13 @@ int tfe_stream_init_by_fds(struct tfe_stream * stream, evutil_socket_t fd_downst _stream->str_stream_addr = tfe_stream_addr_to_str(_stream->head.addr); stream->str_stream_info = _stream->str_stream_addr; - __stream_fd_option_setup(_stream, fd_downstream, CONN_DIR_DOWNSTREAM); - __stream_fd_option_setup(_stream, fd_upstream, CONN_DIR_UPSTREAM); + __stream_fd_option_setup(_stream, fd_downstream, CONN_DIR_DOWNSTREAM, 0); + __stream_fd_option_setup(_stream, fd_upstream, CONN_DIR_UPSTREAM, 0); if (_stream->is_decrypted_traffic_steering) { - __stream_fd_option_setup(_stream, fd_fake_s, CONN_DIR_UPSTREAM); - __stream_fd_option_setup(_stream, fd_fake_c, CONN_DIR_DOWNSTREAM); + __stream_fd_option_setup(_stream, fd_fake_s, CONN_DIR_UPSTREAM, TFE_FAKE_S_DEFAULT_TTL); + __stream_fd_option_setup(_stream, fd_fake_c, CONN_DIR_DOWNSTREAM, TFE_FAKE_C_DEFAULT_TTL); _stream->conn_fake_s = __conn_private_create_by_fake_fd(_stream, fd_fake_s); if (_stream->conn_fake_s == NULL) |
