diff --git a/platform/include/internal/proxy.h b/platform/include/internal/proxy.h index dd328e9..12203b0 100644 --- a/platform/include/internal/proxy.h +++ b/platform/include/internal/proxy.h @@ -39,6 +39,19 @@ enum TFE_STAT_FIELD /* Protocol */ STAT_STREAM_TCP_PLAIN, STAT_STREAM_TCP_SSL, + + /* Decrypted Traffic Steering */ + STAT_STEERING_SSL_CONN, + STAT_STEERING_HTTP_CONN, + STAT_STEERING_CLIENT_TX_B, + STAT_STEERING_SERVER_RX_B, + STAT_STEERING_SERVER_TX_B, + STAT_STEERING_CLIENT_RX_B, + STAT_STEERING_CLIENT_ERR, + STAT_STEERING_SERVER_ERR, + STAT_STEERING_CLIENT_EOF, + STAT_STEERING_SERVER_EOF, + TFE_STAT_MAX }; diff --git a/platform/src/proxy.cpp b/platform/src/proxy.cpp index f1fb865..869a0bb 100644 --- a/platform/src/proxy.cpp +++ b/platform/src/proxy.cpp @@ -461,6 +461,18 @@ static const char * __str_stat_spec_map[] = [STAT_STREAM_INCPT_UP_BYTES] = "ustm_incpt_B", [STAT_STREAM_TCP_PLAIN] = "plain", [STAT_STREAM_TCP_SSL] = "ssl", + + [STAT_STEERING_SSL_CONN] = "stee_ssl_conn", + [STAT_STEERING_HTTP_CONN] = "stee_http_conn", + [STAT_STEERING_CLIENT_TX_B] = "stee_c_tx_B", + [STAT_STEERING_SERVER_RX_B] = "stee_s_rx_B", + [STAT_STEERING_SERVER_TX_B] = "stee_s_tx_B", + [STAT_STEERING_CLIENT_RX_B] = "stee_c_rx_B", + [STAT_STEERING_CLIENT_ERR] = "stee_c_err", + [STAT_STEERING_SERVER_ERR] = "stee_s_err", + [STAT_STEERING_CLIENT_EOF] = "stee_c_eof", + [STAT_STEERING_SERVER_EOF] = "stee_s_eof", + [TFE_STAT_MAX] = NULL }; diff --git a/platform/src/tcp_stream.cpp b/platform/src/tcp_stream.cpp index cef8f48..01b77c0 100644 --- a/platform/src/tcp_stream.cpp +++ b/platform/src/tcp_stream.cpp @@ -602,13 +602,16 @@ static void __stream_bev_readcb(struct bufferevent * bev, void * arg) (STREAM_PROTO_PLAIN == _stream->session_type && _stream->proxy_ref->traffic_steering_options.enable_steering_http) || (STREAM_PROTO_SSL == _stream->session_type &&_stream->proxy_ref->traffic_steering_options.enable_steering_ssl))) { + enum TFE_STAT_FIELD stat_filed = TFE_STAT_MAX; if (bev == _stream->conn_downstream->bev) { peer_conn = _stream->conn_fake_c; + stat_filed = STAT_STEERING_CLIENT_TX_B; } else if (bev == _stream->conn_upstream->bev) { peer_conn = _stream->conn_fake_s; + stat_filed = STAT_STEERING_SERVER_TX_B; } else { @@ -626,14 +629,13 @@ static void __stream_bev_readcb(struct bufferevent * bev, void * arg) return; } - // TODO 增加计数 - TFE_LOG_DEBUG(__STREAM_LOGGER(_stream), "decrypted traffic steering, %s send %d bytes from %s to %s", _stream->str_stream_addr, evbuffer_get_length(inbuf), bev == _stream->conn_downstream->bev ? "conn_downstream" : "conn_upstream", bev == _stream->conn_downstream->bev ? "conn_fake_c" : "conn_fake_s"); + TFE_PROXY_STAT_INCREASE(stat_filed, evbuffer_get_length(inbuf)); outbuf = bufferevent_get_output(peer_conn->bev); evbuffer_add_buffer(outbuf, inbuf); @@ -1064,13 +1066,16 @@ static void __steering_stream_bev_readcb(struct bufferevent * bev, void * arg) struct tfe_stream_private * _stream = (struct tfe_stream_private *)arg; struct tfe_conn_private * peer_conn = NULL; + enum TFE_STAT_FIELD stat_filed = TFE_STAT_MAX; if (bev == _stream->conn_fake_c->bev) { peer_conn = _stream->conn_downstream; + stat_filed = STAT_STEERING_CLIENT_RX_B; } else if (bev == _stream->conn_fake_s->bev) { peer_conn = _stream->conn_upstream; + stat_filed = STAT_STEERING_SERVER_RX_B; } else { @@ -1088,8 +1093,6 @@ static void __steering_stream_bev_readcb(struct bufferevent * bev, void * arg) return; } - // TODO 增加计数 - TFE_LOG_DEBUG(__STREAM_LOGGER(_stream), "decrypted traffic steering, %s send %d bytes form %s to %s", _stream->str_stream_addr, evbuffer_get_length(inbuf), @@ -1097,6 +1100,7 @@ static void __steering_stream_bev_readcb(struct bufferevent * bev, void * arg) bev == _stream->conn_fake_c->bev ? "conn_downstream" : "conn_upstream" ); + TFE_PROXY_STAT_INCREASE(stat_filed, evbuffer_get_length(inbuf)); struct evbuffer * outbuf = bufferevent_get_output(peer_conn->bev); evbuffer_add_buffer(outbuf, inbuf); } @@ -1188,6 +1192,7 @@ void ssl_downstream_create_on_success(future_result_t * result, void * user) { __conn_private_enable(_stream->conn_fake_c); __conn_private_enable(_stream->conn_fake_s); + TFE_PROXY_STAT_INCREASE(STAT_STEERING_SSL_CONN, 1); } return; @@ -1749,6 +1754,7 @@ int tfe_stream_init_by_fds(struct tfe_stream * stream, evutil_socket_t fd_downst { __conn_private_enable(_stream->conn_fake_s); __conn_private_enable(_stream->conn_fake_c); + TFE_PROXY_STAT_INCREASE(STAT_STEERING_HTTP_CONN, 1); } TFE_PROXY_STAT_INCREASE(STAT_STREAM_TCP_PLAIN, 1);