#pragma once #include #include #include #include #define PINNING_ST_NOT_PINNING 0 #define PINNING_ST_PINNING 1 #define PINNING_ST_MAYBE_PINNING 2 struct ssl_service_status { char cli_pinning_status; char is_app_not_pinning; char is_ev; char is_ct; char is_mutual_auth; char has_protocol_errors; }; struct ssl_service_cache_statistics { long long pinning_cli_cnt; long long mutual_auth_cli_cnt; long long proto_err_cli_cnt; long long ev_srv_cnt; long long ct_srv_cnt; long long app_not_pinning_cnt; long long trusted_cert_cnt; }; struct ssl_service_cache { MESA_htable_handle cli_st_hash; MESA_htable_handle srv_st_hash; MESA_htable_handle app_st_hash; struct ssl_service_cache_statistics stat; unsigned int fail_as_cli_pinning_count; unsigned int fail_as_proto_err_count; unsigned int fail_time_window; unsigned int succ_as_app_not_pinning_count; }; struct ssl_service_cache* ssl_service_cache_create(unsigned int slot_size, unsigned int expire_seconds, int fail_as_pinning_cnt, int fail_as_proto_err_cnt, int succ_as_app_not_pinning_cnt, int fail_time_win); void ssl_service_cache_destroy(struct ssl_service_cache* cache); int ssl_service_cache_read(struct ssl_service_cache* svc_cache, const struct ssl_chello* chello, const struct tfe_stream_addr * addr, struct ssl_service_status* result); void ssl_service_cache_write(struct ssl_service_cache* svc_cache, const struct ssl_chello* chello, const struct tfe_stream_addr * addr, const struct ssl_service_status* status); void ssl_service_cache_stat(struct ssl_service_cache* svc_cache, struct ssl_service_cache_statistics* result);