#pragma once #include #include #include struct ssl_stream; struct ssl_mgr; struct ssl_mgr* init_ssl_manager(const char* ini_profile, const char* section, void* logger); void destroy_ssl_manager(struct ssl_mgr* mgr); struct ssl_chello { //client hello int version; char* sni; char* cipher_suites; }; struct ssl_chello* ssl_peek_result_release_chello(future_result_t* result); void ssl_chello_free(struct ssl_chello* client_hello); void ssl_async_peek_client_hello(struct future* future, evutil_socket_t fd, struct event_base *evbase); struct ssl_stream* ssl_upstream_create_result_release_stream(future_result_t* result); struct bufferevent* ssl_upstream_create_result_release_bev(future_result_t* result); void ssl_async_upstream_create(struct future* future, struct ssl_mgr* mgr, const struct ssl_chello* chello, evutil_socket_t fd, struct event_base *evbase); struct ssl_stream * ssl_downstream_create(struct ssl_mgr* mgr, struct ssl_chello* hello, struct cert* crt); void ssl_stream_free_and_close_fd(struct ssl_stream* stream, struct event_base *evbase, evutil_socket_t fd);