diff --git a/common/include/tfe_stream.h b/common/include/tfe_stream.h index f8b6abf..3b02e24 100644 --- a/common/include/tfe_stream.h +++ b/common/include/tfe_stream.h @@ -98,4 +98,4 @@ int tfe_stream_shutdown_dir(const struct tfe_stream * stream, enum tfe_conn_dir /** * @brief Write linear text for given stream */ -void tfe_stream_write_log(const struct tfe_stream * stream, int level, const char * fmt, ...); +void tfe_stream_write_access_log(const struct tfe_stream * stream, int level, const char * fmt, ...); diff --git a/common/include/tfe_types.h b/common/include/tfe_types.h index 9d5dfc2..41124c3 100644 --- a/common/include/tfe_types.h +++ b/common/include/tfe_types.h @@ -155,7 +155,7 @@ static inline char * tfe_stream_addr_to_str(const struct tfe_stream_addr * addr) inet_ntop(AF_INET, &tuple4_v4->saddr, __src_addr, sizeof(__src_addr)); inet_ntop(AF_INET, &tuple4_v4->daddr, __dst_addr, sizeof(__dst_addr)); - asprintf(&__str_ret, "%s %s %u %u", __src_addr, __dst_addr, __src_port, __dst_port); + asprintf(&__str_ret, "%s %u %s %u", __src_addr, __src_port, __dst_addr, __dst_port); } if(addr->addrtype == TFE_ADDR_STREAM_TUPLE4_V6) diff --git a/common/test/test_addr.cpp b/common/test/test_addr.cpp index 0d531c3..742e292 100644 --- a/common/test/test_addr.cpp +++ b/common/test/test_addr.cpp @@ -18,7 +18,7 @@ TEST(TfeStreamAddrToStr, StreamTuple4) st_addr_v4->daddr.s_addr = 0x6464a8c0; st_addr_v4->dest = 20480; - const char * __sample = "192.168.100.50 192.168.100.100 10080 80"; + const char * __sample = "192.168.100.50 10080 192.168.100.100 80"; char * __result = tfe_stream_addr_to_str(__stream_addr); EXPECT_STREQ(__sample, __result); diff --git a/platform/include/internal/proxy.h b/platform/include/internal/proxy.h index a0dde56..e29e69f 100644 --- a/platform/include/internal/proxy.h +++ b/platform/include/internal/proxy.h @@ -16,6 +16,7 @@ struct tfe_proxy_tcp_options int tcp_keepidle; int tcp_keepintvl; int tcp_keepcnt; + int tcp_user_timeout; }; struct tfe_proxy_accept_para diff --git a/platform/src/proxy.cpp b/platform/src/proxy.cpp index ac9f19c..b1c6f8a 100644 --- a/platform/src/proxy.cpp +++ b/platform/src/proxy.cpp @@ -193,6 +193,7 @@ int tfe_proxy_config(struct tfe_proxy * proxy, const char * profile) MESA_load_profile_int_def(profile, "tcp", "tcp_keepidle", &proxy->tcp_options.tcp_keepidle, -1); MESA_load_profile_int_def(profile, "tcp", "tcp_keepintvl", &proxy->tcp_options.tcp_keepintvl, -1); MESA_load_profile_int_def(profile, "tcp", "tcp_keepcnt", &proxy->tcp_options.tcp_keepcnt, -1); + MESA_load_profile_int_def(profile, "tcp", "tcp_user_timeout", &proxy->tcp_options.tcp_user_timeout, -1); return 0; } diff --git a/platform/src/tcp_stream.cpp b/platform/src/tcp_stream.cpp index 0600a80..94b8148 100644 --- a/platform/src/tcp_stream.cpp +++ b/platform/src/tcp_stream.cpp @@ -67,7 +67,7 @@ static inline enum tfe_conn_dir __bev_dir(struct tfe_stream_private * _stream, s return CONN_DIR_DOWNSTREAM; } - if(_stream->conn_upstream && bev == _stream->conn_upstream->bev) + if (_stream->conn_upstream && bev == _stream->conn_upstream->bev) { return CONN_DIR_UPSTREAM; } @@ -840,7 +840,7 @@ void __stream_fd_option_setup(struct tfe_stream_private * _stream, evutil_socket if (tcp_options->tcp_keepcnt > 0) { - if (setsockopt(fd, SOL_SOCKET, TCP_KEEPCNT, (const void *) &tcp_options->tcp_keepcnt, sizeof(int)) == -1) + if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, (const void *) &tcp_options->tcp_keepcnt, sizeof(int)) == -1) { TFE_STREAM_LOG_ERROR(stream, "setsockopt(TCP_KEEPCNT, %d) failed, ignored: %s", tcp_options->tcp_keepcnt, strerror(errno)); @@ -849,7 +849,7 @@ void __stream_fd_option_setup(struct tfe_stream_private * _stream, evutil_socket if (tcp_options->tcp_keepintvl > 0) { - if (setsockopt(fd, SOL_SOCKET, TCP_KEEPINTVL, (const void *) &tcp_options->tcp_keepintvl, sizeof(int)) == -1) + if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, (const void *) &tcp_options->tcp_keepintvl, sizeof(int)) == -1) { TFE_STREAM_LOG_ERROR(stream, "setsockopt(TCP_KEEPINTVL, %d) failed, ignored: %s", tcp_options->tcp_keepintvl, strerror(errno)); @@ -858,13 +858,23 @@ void __stream_fd_option_setup(struct tfe_stream_private * _stream, evutil_socket if (tcp_options->tcp_keepidle > 0) { - if (setsockopt(fd, SOL_SOCKET, TCP_KEEPIDLE, (const void *) &tcp_options->tcp_keepidle, sizeof(int)) == -1) + if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, (const void *) &tcp_options->tcp_keepidle, sizeof(int)) == -1) { TFE_STREAM_LOG_ERROR(stream, "setsockopt(TCP_KEEPIDLE, %d) failed, ignored: %s", tcp_options->tcp_keepidle, strerror(errno)); } } + if (tcp_options->tcp_user_timeout > 0) + { + if (setsockopt(fd, IPPROTO_TCP, TCP_USER_TIMEOUT, (const void *) &tcp_options->tcp_user_timeout, sizeof(int)) + == -1) + { + TFE_STREAM_LOG_ERROR(stream, "setsockopt(TCP_USER_TIMEOUT, %d) failed, ignored: %s", + tcp_options->tcp_user_timeout, strerror(errno)); + } + } + return; } @@ -932,7 +942,7 @@ int tfe_stream_option_set(struct tfe_stream * stream, enum tfe_stream_option opt return 0; } -void tfe_stream_write_log(const struct tfe_stream * stream, int level, const char * fmt, ...) +void tfe_stream_write_access_log(const struct tfe_stream * stream, int level, const char * fmt, ...) { va_list arg_ptr; va_start(arg_ptr, fmt); diff --git a/plugin/protocol/http/src/http_half.cpp b/plugin/protocol/http/src/http_half.cpp index d1ba418..9384e88 100644 --- a/plugin/protocol/http/src/http_half.cpp +++ b/plugin/protocol/http/src/http_half.cpp @@ -584,7 +584,7 @@ void __write_access_log(struct http_session_private * hs_private) __offset += snprintf(__access_log + __offset, sizeof(__access_log) - __offset, "%s ", __str_url); const struct tfe_stream * stream = hs_private->hc_private->stream; - tfe_stream_write_log(stream, RLOG_LV_INFO, "%s", __access_log); + tfe_stream_write_access_log(stream, RLOG_LV_INFO, "%s", __access_log); (void)resp_spec; } diff --git a/plugin/protocol/http/test/test_http_half.cpp b/plugin/protocol/http/test/test_http_half.cpp index 3ce9f94..dcbc637 100644 --- a/plugin/protocol/http/test/test_http_half.cpp +++ b/plugin/protocol/http/test/test_http_half.cpp @@ -444,7 +444,7 @@ TEST(HttpHalfConstructCallback, PostWithBody) EXPECT_TRUE(ctx->req_end_called); } -void tfe_stream_write_log(const struct tfe_stream * stream, int level, const char * fmt, ...) +void tfe_stream_write_access_log(const struct tfe_stream * stream, int level, const char * fmt, ...) { return; }