#pragma once #include #include #include #include #include #include struct tfe_thread_ctx { pthread_t thr; unsigned int thread_id; unsigned int load; struct event_base * evbase; unsigned char running; struct tfe_stats stat; struct cert_mgr * cert_mgr; unsigned int nr_modules; const struct tfe_plugin * modules; }; enum tfe_plugin_state { PLUG_STATE_READONLY, PLUG_STATE_PREEPTION, PLUG_STATE_DETACHED }; struct plugin_ctx { enum tfe_plugin_state state; void * pme; }; struct tfe_stream_write_ctx { struct tfe_stream_private * _stream; enum tfe_conn_dir dir; }; struct tfe_conn_private { evutil_socket_t fd; struct bufferevent * bev; uint8_t on_writing; uint8_t closed; uint8_t need_shutdown; struct tfe_stream_write_ctx w_ctx; }; struct tfe_stream_private { struct tfe_stream head; struct tfe_proxy * proxy_ref; struct tfe_thread_ctx * thread_ref; enum tfe_stream_proto session_type; struct tfe_conn_private * conn_upstream; struct tfe_conn_private * conn_downstream; struct { struct ssl_mgr * ssl_mgr; struct ssl_stream * ssl_downstream; struct ssl_stream * ssl_upstream; }; uint8_t is_plugin_opened; int calling_idx; size_t forward_bytes; size_t defere_bytes; size_t drop_bytes; enum tfe_app_proto app_proto; int plugin_num; struct plugin_ctx * plug_ctx; /* TCP forward without scan or decode when the passthough is set */ bool passthough; /* For defer connection setup */ evutil_socket_t defer_fd_downstream; evutil_socket_t defer_fd_upstream; /* ASYNC UPSTREAM */ future * future_upstream_create; /* ASYNC DOWNSTREAM */ future * future_downstream_create; }; static inline void * __STREAM_LOGGER(struct tfe_stream_private * _stream) { return _stream->proxy_ref->logger; }