From 5bf18848c1e0d5466b8802c7edbb7e5535f048b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E4=B8=80=E9=B8=A3?= Date: Fri, 28 Sep 2018 14:55:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9hash=E8=A1=A8=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E6=B7=98=E6=B1=B0=E9=87=8A=E6=94=BE=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform/src/key_keeper.cpp | 35 +++++++++++++++++++++---------- platform/test/test_key_keeper.cpp | 23 ++++++++++++++------ 2 files changed, 41 insertions(+), 17 deletions(-) diff --git a/platform/src/key_keeper.cpp b/platform/src/key_keeper.cpp index d2b0add..d374bf4 100644 --- a/platform/src/key_keeper.cpp +++ b/platform/src/key_keeper.cpp @@ -438,29 +438,42 @@ static void certstore_rpc_on_fail(enum e_future_error err, const char * what, vo /* * Certificate, including private key and keyring chain. */ -static int __wrapper_MESA_htable_set_opt(MESA_htable_handle table, enum MESA_htable_opt opt_type, unsigned int value) +static int __wrapper_MESA_htable_set_opt_int(MESA_htable_handle table, enum MESA_htable_opt opt_type, unsigned int value) { int ret = MESA_htable_set_opt(table, opt_type, &value, (int)(sizeof(value))); assert(ret == 0); return ret; } +static int __wrapper_MESA_htable_set_opt_func(MESA_htable_handle table, enum MESA_htable_opt opt_type, void * val, size_t len) +{ + int ret = MESA_htable_set_opt(table, opt_type, val, (int)len); + assert(ret == 0); + return ret; +} + +static void key_keeper_free_serialized(void* data) +{ + printf("call key_keeper_free_serialized\n"); + struct keyring_private* kyr = (struct keyring_private*)data; + key_keeper_free_keyring(&(kyr->head)); +} + static MESA_htable_handle create_hash_table(unsigned int slot_size, unsigned int expire_seconds) { int ret = 0; unsigned max_num = slot_size * 4; MESA_htable_handle htable = MESA_htable_born(); - ret = __wrapper_MESA_htable_set_opt(htable, MHO_SCREEN_PRINT_CTRL, 0); - ret = __wrapper_MESA_htable_set_opt(htable, MHO_THREAD_SAFE, 1); - ret = __wrapper_MESA_htable_set_opt(htable, MHO_MUTEX_NUM, 16); - ret = __wrapper_MESA_htable_set_opt(htable, MHO_HASH_SLOT_SIZE, slot_size); - ret = __wrapper_MESA_htable_set_opt(htable, MHO_HASH_MAX_ELEMENT_NUM, max_num); - ret = __wrapper_MESA_htable_set_opt(htable, MHO_EXPIRE_TIME, expire_seconds); - ret = __wrapper_MESA_htable_set_opt(htable, MHO_ELIMIMINATE_TYPE, + ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_SCREEN_PRINT_CTRL, 0); + ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_THREAD_SAFE, 1); + ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_MUTEX_NUM, 16); + ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_HASH_SLOT_SIZE, slot_size); + ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_HASH_MAX_ELEMENT_NUM, max_num); + ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_EXPIRE_TIME, expire_seconds); + ret = __wrapper_MESA_htable_set_opt_int(htable, MHO_ELIMIMINATE_TYPE, HASH_ELIMINATE_ALGO_FIFO); - //TODO: how to do overide? - //ret = __wrapper_MESA_htable_set_opt(htable, MHO_CBFUN_DATA_FREE, - // (void *)key_keeper_free_serialized); + ret = __wrapper_MESA_htable_set_opt_func(htable, MHO_CBFUN_DATA_FREE, + (void *)key_keeper_free_serialized, sizeof(&key_keeper_free_serialized)); //ret = __wrapper_MESA_htable_set_opt(htable, MHO_CBFUN_DATA_EXPIRE_NOTIFY, // (void *)key_keeper_verify_cb); ret = MESA_htable_mature(htable); diff --git a/platform/test/test_key_keeper.cpp b/platform/test/test_key_keeper.cpp index 4ba2055..bc4a405 100644 --- a/platform/test/test_key_keeper.cpp +++ b/platform/test/test_key_keeper.cpp @@ -8,21 +8,31 @@ void ask_key_keeper_on_succ(void* result, void* user); void ask_key_keeper_on_fail(enum e_future_error error, const char * what, void * user); +struct key_keeper_ctx{ + struct key_keeper* keeper; + struct future* f; +}; + int main() { void* logger = NULL; future_promise_library_init(); - struct event_base* evbase = event_base_new(); + //struct event_base* evbase = event_base_new(); struct key_keeper * keeper = key_keeper_init("./conf/tfe.conf", "key_keeper", logger); - struct promise* user = NULL; - struct future* f = future_create("key_keeper", ask_key_keeper_on_succ, ask_key_keeper_on_fail, user); + struct key_keeper_ctx* ctx = ALLOC(struct key_keeper_ctx, 1); + ctx->keeper = keeper; + struct future* f = future_create("key_keeper", ask_key_keeper_on_succ, ask_key_keeper_on_fail, ctx); + ctx->f = f; X509* origin_cert = ssl_x509_load("./conf/origin_cert.pem"); printf("-------------------------------\n"); int i = 0; printf("call key_keeper_async_ask, i = %d\n", i); - key_keeper_async_ask(f, keeper, "www.baidu.com", 1, origin_cert, 1, evbase); - event_base_dispatch(evbase); - + key_keeper_async_ask(f, keeper, "www.baidu.com", 1, origin_cert, 1, NULL); + X509_free(origin_cert); + key_keeper_destroy(keeper); + future_destroy(f); + free(ctx); + //event_base_dispatch(evbase); /* struct event_base* evbase1 = event_base_new(); struct future* f1 = future_create("key_keeper", ask_key_keeper_on_succ, ask_key_keeper_on_fail, user); @@ -50,6 +60,7 @@ void ask_key_keeper_on_succ(void* result, void* user) { printf("chain is not null\n"); } + key_keeper_free_keyring(kyr); return; }