summaryrefslogtreecommitdiff
path: root/platform/src/key_keeper.cpp
diff options
context:
space:
mode:
authorzhengchao <[email protected]>2018-11-26 14:54:20 +0800
committerzhengchao <[email protected]>2018-11-26 14:55:39 +0800
commitce9d7fa5ebc99a54e021eace0d76fd1a5f0da3fc (patch)
treec561baef2428d4bc4c91bbeab5ac0a8d19a544f5 /platform/src/key_keeper.cpp
parent35c2559f8a4fdf19cdc38aea6b71661b3041c1cf (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.cpp17
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;
+}
+