增加SSL模块初始化代码,修正SSL模块初始化时遇到的空句柄问题。

This commit is contained in:
Lu Qiuwen
2018-08-31 10:39:25 +08:00
parent c15be5af0e
commit 410ce46f06
3 changed files with 11 additions and 5 deletions

View File

@@ -13,7 +13,7 @@
struct ssl_stream; struct ssl_stream;
struct ssl_mgr; struct ssl_mgr;
struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section, struct event_base * evbase, struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section, struct event_base * ev_base_gc,
void * logger, screen_stat_handle_t * fs); void * logger, screen_stat_handle_t * fs);
void ssl_manager_destroy(struct ssl_mgr * mgr); void ssl_manager_destroy(struct ssl_mgr * mgr);

View File

@@ -216,6 +216,11 @@ int main(int argc, char *argv[])
g_default_proxy->gcev = event_new(g_default_proxy->evbase, -1, EV_PERSIST, __gc_handler_cb, g_default_proxy); g_default_proxy->gcev = event_new(g_default_proxy->evbase, -1, EV_PERSIST, __gc_handler_cb, g_default_proxy);
CHECK_OR_EXIT(g_default_proxy->gcev, "Failed at creating GC event. Exit. "); CHECK_OR_EXIT(g_default_proxy->gcev, "Failed at creating GC event. Exit. ");
/* SSL INIT */
g_default_proxy->ssl_mgr_handler = ssl_manager_init(main_profile, "ssl",
g_default_proxy->evbase, g_default_logger, NULL);
CHECK_OR_EXIT(g_default_proxy->ssl_mgr_handler, "Failed at init SSL manager. Exit.");
/* MODULE INIT */ /* MODULE INIT */
g_default_proxy->kni_acceptor_handler = kni_acceptor_init(g_default_proxy, main_profile, g_default_logger); g_default_proxy->kni_acceptor_handler = kni_acceptor_init(g_default_proxy, main_profile, g_default_logger);
CHECK_OR_EXIT(g_default_proxy->kni_acceptor_handler, "Failed at init KNI acceptor. Exit. "); CHECK_OR_EXIT(g_default_proxy->kni_acceptor_handler, "Failed at init KNI acceptor. Exit. ");

View File

@@ -65,6 +65,7 @@ struct ssl_mgr
char trust_CA_dir[TFE_STRING_MAX]; char trust_CA_dir[TFE_STRING_MAX];
X509_STORE * trust_CA_store; X509_STORE * trust_CA_store;
struct key_keeper * keeper_of_keys; struct key_keeper * keeper_of_keys;
struct event_base * ev_base_gc;
}; };
struct __ssl_stream_debug struct __ssl_stream_debug
@@ -279,7 +280,8 @@ void ssl_manager_destroy(struct ssl_mgr * mgr)
free(mgr); free(mgr);
} }
struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section, void * logger) struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section,
struct event_base * ev_base_gc, void * logger, screen_stat_handle_t * fs)
{ {
struct ssl_mgr * mgr = ALLOC(struct ssl_mgr, 1); struct ssl_mgr * mgr = ALLOC(struct ssl_mgr, 1);
int ret = 0, value = 0; int ret = 0, value = 0;
@@ -331,7 +333,7 @@ struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section
} }
MESA_load_profile_string_def(ini_profile, section, "trust_CA_file", mgr->trust_CA_file, sizeof(mgr->trust_CA_file), MESA_load_profile_string_def(ini_profile, section, "trust_CA_file", mgr->trust_CA_file, sizeof(mgr->trust_CA_file),
""); "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem");
MESA_load_profile_string_def(ini_profile, section, "trust_CA_dir", mgr->trust_CA_dir, sizeof(mgr->trust_CA_dir), MESA_load_profile_string_def(ini_profile, section, "trust_CA_dir", mgr->trust_CA_dir, sizeof(mgr->trust_CA_dir),
""); "");
@@ -470,13 +472,12 @@ failed:
static void ssl_async_peek_client_hello(struct future * future, evutil_socket_t fd, struct event_base * evbase, static void ssl_async_peek_client_hello(struct future * future, evutil_socket_t fd, struct event_base * evbase,
void * logger) void * logger)
{ {
struct event * ev = NULL;
struct promise * p = future_to_promise(future); struct promise * p = future_to_promise(future);
struct peek_client_hello_ctx * ctx = ALLOC(struct peek_client_hello_ctx, 1); struct peek_client_hello_ctx * ctx = ALLOC(struct peek_client_hello_ctx, 1);
ctx->ev = event_new(evbase, fd, EV_READ, peek_client_hello_cb, p); ctx->ev = event_new(evbase, fd, EV_READ, peek_client_hello_cb, p);
ctx->logger = logger; ctx->logger = logger;
event_add(ev, NULL); event_add(ctx->ev, NULL);
promise_set_ctx(p, (void *) ctx, peek_client_hello_ctx_free); promise_set_ctx(p, (void *) ctx, peek_client_hello_ctx_free);
return; return;
} }