diff options
| author | zhengchao <[email protected]> | 2018-11-26 14:54:20 +0800 |
|---|---|---|
| committer | zhengchao <[email protected]> | 2018-11-26 14:55:39 +0800 |
| commit | ce9d7fa5ebc99a54e021eace0d76fd1a5f0da3fc (patch) | |
| tree | c561baef2428d4bc4c91bbeab5ac0a8d19a544f5 /platform/src/key_keeper.cpp | |
| parent | 35c2559f8a4fdf19cdc38aea6b71661b3041c1cf (diff) | |
#64 key keeper增加evdnsbase参数。
避免创建大量dnsbase,耗尽fd。ssl stream/tcp stream/proxy也做了相应修改。
Diffstat (limited to 'platform/src/key_keeper.cpp')
| -rw-r--r-- | platform/src/key_keeper.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/platform/src/key_keeper.cpp b/platform/src/key_keeper.cpp index 189d81d..d573112 100644 --- a/platform/src/key_keeper.cpp +++ b/platform/src/key_keeper.cpp @@ -43,6 +43,8 @@ struct key_keeper X509* untrusted_ca_cert; EVP_PKEY* untrusted_ca_key; unsigned int no_cache; + struct key_keeper_stat stat; + }; @@ -601,7 +603,7 @@ char* url_escape(char* url) return _url; } -void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const char* sni, int keyring_id, X509 * origin_cert, int is_cert_valid, struct event_base * evbase) +void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const char* sni, int keyring_id, X509 * origin_cert, int is_cert_valid, struct event_base * evbase, struct evdns_base* dnsbase) { struct promise* p = future_to_promise(f); unsigned int len = 0; @@ -618,12 +620,14 @@ void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const c ctx->key_len = len; promise_set_ctx(p, (void*)ctx, key_keeper_promise_free_ctx); long int cb_rtn = 0; + keeper->stat.ask_times++; if(!keeper->no_cache) { MESA_htable_search_cb(keeper->cert_cache, (const unsigned char*)(ctx->key), ctx->key_len, keyring_local_cache_query_cb, p, &cb_rtn); if(cb_rtn == KEYRING_EXSITED) { //printf("KEYRING_EXSITED\n"); + keeper->stat.cache_hit++; return; } } @@ -644,7 +648,7 @@ void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const c promise_failed(p, FUTURE_ERROR_EXCEPTION, "url escape failed"); break; } - struct future* f_certstore_rpc = future_create("tfe_rpc", certstore_rpc_on_succ, certstore_rpc_on_fail, p); + struct future* f_certstore_rpc = future_create("crt_store", certstore_rpc_on_succ, certstore_rpc_on_fail, p); ctx->f_certstore_rpc = f_certstore_rpc; char *url = NULL; @@ -661,7 +665,7 @@ void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const c } TFE_LOG_DEBUG(keeper->logger, "CertStore query: %.100s", url); curl_free(escaped_origin_cert_pem); - tfe_rpc_async_ask(f_certstore_rpc, url, GET, DONE_CB, NULL, 0, evbase); + tfe_rpc_async_ask(f_certstore_rpc, url, GET, DONE_CB, NULL, 0, evbase, dnsbase); free(url); break; } @@ -699,3 +703,10 @@ void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const c } return; } +void key_keeper_statistic(struct key_keeper *keeper, struct key_keeper_stat* result) +{ + keeper->stat.cached_num=MESA_htable_get_elem_num(keeper->cert_cache); + *result=keeper->stat; + return; +} + |
