You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2017/02/25 06:43:23 UTC

[trafficserver] branch i-agree-with-phil-4 created (now e35668e)

This is an automated email from the ASF dual-hosted git repository.

amc pushed a change to branch i-agree-with-phil-4
in repository https://git-dual.apache.org/repos/asf/trafficserver.git.

        at  e35668e   Add static type checking to configuration override API implementation.

This branch includes the following new commits:

       new  e35668e   Add static type checking to configuration override API implementation.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>'].

[trafficserver] 01/01: Add static type checking to configuration override API implementation.

Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

amc pushed a commit to branch i-agree-with-phil-4
in repository https://git-dual.apache.org/repos/asf/trafficserver.git

commit e35668e72fcad8d26bcda87640da08b26e6427ee
Author: Alan M. Carroll <so...@yahoo-inc.com>
AuthorDate: Tue Feb 21 15:04:16 2017 -0600

    Add static type checking to configuration override API implementation.
---
 proxy/InkAPI.cc        | 343 ++++++++++++++++++++-----------------------------
 proxy/InkAPIInternal.h |   9 +-
 2 files changed, 141 insertions(+), 211 deletions(-)

diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc
index e8f63e2..de0c4f4 100644
--- a/proxy/InkAPI.cc
+++ b/proxy/InkAPI.cc
@@ -87,6 +87,10 @@ static RecRawStatBlock *api_rsb;
 // Globals for the Sessions/Transaction index registry
 static volatile int next_argv_index = 0;
 
+static std::type_info const &TYPE_INFO_MGMT_INT   = typeid(MgmtInt);
+static std::type_info const &TYPE_INFO_MGMT_BYTE  = typeid(MgmtByte);
+static std::type_info const &TYPE_INFO_MGMT_FLOAT = typeid(MgmtFloat);
+
 static struct _STATE_ARG_TABLE {
   char *name;
   size_t name_len;
@@ -7773,398 +7777,343 @@ TSSkipRemappingSet(TSHttpTxn txnp, int flag)
   sm->t_state.api_skip_all_remapping = (flag != 0);
 }
 
+template <typename T>
+inline void *
+_memberp_to_generic(T *ptr, std::type_info const *&type)
+{
+  type = &typeid(T);
+  return ptr;
+}
+
 // Little helper function to find the struct member
 static void *
-_conf_to_memberp(TSOverridableConfigKey conf, OverridableHttpConfigParams *overridableHttpConfig, OverridableDataType *typep)
+_conf_to_memberp(TSOverridableConfigKey conf, OverridableHttpConfigParams *overridableHttpConfig, std::type_info const *&typep)
 {
-  // The default is "Byte", make sure to override that for those configs which are "Int".
-  OverridableDataType typ = OVERRIDABLE_TYPE_BYTE;
-  void *ret               = nullptr;
+  void *ret = nullptr;
+  typep     = &typeid(void);
 
   switch (conf) {
   case TS_CONFIG_URL_REMAP_PRISTINE_HOST_HDR:
-    ret = &overridableHttpConfig->maintain_pristine_host_hdr;
+    ret = _memberp_to_generic(&overridableHttpConfig->maintain_pristine_host_hdr, typep);
     break;
   case TS_CONFIG_HTTP_CHUNKING_ENABLED:
-    ret = &overridableHttpConfig->chunking_enabled;
+    ret = _memberp_to_generic(&overridableHttpConfig->chunking_enabled, typep);
     break;
   case TS_CONFIG_HTTP_NEGATIVE_CACHING_ENABLED:
-    ret = &overridableHttpConfig->negative_caching_enabled;
+    ret = _memberp_to_generic(&overridableHttpConfig->negative_caching_enabled, typep);
     break;
   case TS_CONFIG_HTTP_NEGATIVE_CACHING_LIFETIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->negative_caching_lifetime;
+    ret = _memberp_to_generic(&overridableHttpConfig->negative_caching_lifetime, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_WHEN_TO_REVALIDATE:
-    ret = &overridableHttpConfig->cache_when_to_revalidate;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_when_to_revalidate, typep);
     break;
   case TS_CONFIG_HTTP_KEEP_ALIVE_ENABLED_IN:
-    ret = &overridableHttpConfig->keep_alive_enabled_in;
+    ret = _memberp_to_generic(&overridableHttpConfig->keep_alive_enabled_in, typep);
     break;
   case TS_CONFIG_HTTP_KEEP_ALIVE_ENABLED_OUT:
-    ret = &overridableHttpConfig->keep_alive_enabled_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->keep_alive_enabled_out, typep);
     break;
   case TS_CONFIG_HTTP_KEEP_ALIVE_POST_OUT:
-    ret = &overridableHttpConfig->keep_alive_post_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->keep_alive_post_out, typep);
     break;
   case TS_CONFIG_HTTP_SERVER_SESSION_SHARING_MATCH:
-    ret = &overridableHttpConfig->server_session_sharing_match;
+    ret = _memberp_to_generic(&overridableHttpConfig->server_session_sharing_match, typep);
     break;
   case TS_CONFIG_NET_SOCK_RECV_BUFFER_SIZE_OUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->sock_recv_buffer_size_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->sock_recv_buffer_size_out, typep);
     break;
   case TS_CONFIG_NET_SOCK_SEND_BUFFER_SIZE_OUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->sock_send_buffer_size_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->sock_send_buffer_size_out, typep);
     break;
   case TS_CONFIG_NET_SOCK_OPTION_FLAG_OUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->sock_option_flag_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->sock_option_flag_out, typep);
     break;
   case TS_CONFIG_HTTP_FORWARD_PROXY_AUTH_TO_PARENT:
-    ret = &overridableHttpConfig->fwd_proxy_auth_to_parent;
+    ret = _memberp_to_generic(&overridableHttpConfig->fwd_proxy_auth_to_parent, typep);
     break;
   case TS_CONFIG_HTTP_ANONYMIZE_REMOVE_FROM:
-    ret = &overridableHttpConfig->anonymize_remove_from;
+    ret = _memberp_to_generic(&overridableHttpConfig->anonymize_remove_from, typep);
     break;
   case TS_CONFIG_HTTP_ANONYMIZE_REMOVE_REFERER:
-    ret = &overridableHttpConfig->anonymize_remove_referer;
+    ret = _memberp_to_generic(&overridableHttpConfig->anonymize_remove_referer, typep);
     break;
   case TS_CONFIG_HTTP_ANONYMIZE_REMOVE_USER_AGENT:
-    ret = &overridableHttpConfig->anonymize_remove_user_agent;
+    ret = _memberp_to_generic(&overridableHttpConfig->anonymize_remove_user_agent, typep);
     break;
   case TS_CONFIG_HTTP_ANONYMIZE_REMOVE_COOKIE:
-    ret = &overridableHttpConfig->anonymize_remove_cookie;
+    ret = _memberp_to_generic(&overridableHttpConfig->anonymize_remove_cookie, typep);
     break;
   case TS_CONFIG_HTTP_ANONYMIZE_REMOVE_CLIENT_IP:
-    ret = &overridableHttpConfig->anonymize_remove_client_ip;
+    ret = _memberp_to_generic(&overridableHttpConfig->anonymize_remove_client_ip, typep);
     break;
   case TS_CONFIG_HTTP_ANONYMIZE_INSERT_CLIENT_IP:
-    ret = &overridableHttpConfig->anonymize_insert_client_ip;
+    ret = _memberp_to_generic(&overridableHttpConfig->anonymize_insert_client_ip, typep);
     break;
   case TS_CONFIG_HTTP_RESPONSE_SERVER_ENABLED:
-    ret = &overridableHttpConfig->proxy_response_server_enabled;
+    ret = _memberp_to_generic(&overridableHttpConfig->proxy_response_server_enabled, typep);
     break;
   case TS_CONFIG_HTTP_INSERT_SQUID_X_FORWARDED_FOR:
-    ret = &overridableHttpConfig->insert_squid_x_forwarded_for;
+    ret = _memberp_to_generic(&overridableHttpConfig->insert_squid_x_forwarded_for, typep);
     break;
   case TS_CONFIG_HTTP_SERVER_TCP_INIT_CWND:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->server_tcp_init_cwnd;
+    ret = _memberp_to_generic(&overridableHttpConfig->server_tcp_init_cwnd, typep);
     break;
   case TS_CONFIG_HTTP_SEND_HTTP11_REQUESTS:
-    ret = &overridableHttpConfig->send_http11_requests;
+    ret = _memberp_to_generic(&overridableHttpConfig->send_http11_requests, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_HTTP:
-    ret = &overridableHttpConfig->cache_http;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_http, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_CLUSTER_CACHE_LOCAL:
-    ret = &overridableHttpConfig->cache_cluster_cache_local;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_cluster_cache_local, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_IGNORE_CLIENT_NO_CACHE:
-    ret = &overridableHttpConfig->cache_ignore_client_no_cache;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_ignore_client_no_cache, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_IGNORE_CLIENT_CC_MAX_AGE:
-    ret = &overridableHttpConfig->cache_ignore_client_cc_max_age;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_ignore_client_cc_max_age, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_IMS_ON_CLIENT_NO_CACHE:
-    ret = &overridableHttpConfig->cache_ims_on_client_no_cache;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_ims_on_client_no_cache, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_IGNORE_SERVER_NO_CACHE:
-    ret = &overridableHttpConfig->cache_ignore_server_no_cache;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_ignore_server_no_cache, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_CACHE_RESPONSES_TO_COOKIES:
-    ret = &overridableHttpConfig->cache_responses_to_cookies;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_responses_to_cookies, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_IGNORE_AUTHENTICATION:
-    ret = &overridableHttpConfig->cache_ignore_auth;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_ignore_auth, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_CACHE_URLS_THAT_LOOK_DYNAMIC:
-    ret = &overridableHttpConfig->cache_urls_that_look_dynamic;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_urls_that_look_dynamic, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_REQUIRED_HEADERS:
-    ret = &overridableHttpConfig->cache_required_headers;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_required_headers, typep);
     break;
   case TS_CONFIG_HTTP_INSERT_REQUEST_VIA_STR:
-    ret = &overridableHttpConfig->insert_request_via_string;
+    ret = _memberp_to_generic(&overridableHttpConfig->insert_request_via_string, typep);
     break;
   case TS_CONFIG_HTTP_INSERT_RESPONSE_VIA_STR:
-    ret = &overridableHttpConfig->insert_response_via_string;
+    ret = _memberp_to_generic(&overridableHttpConfig->insert_response_via_string, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_HEURISTIC_MIN_LIFETIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->cache_heuristic_min_lifetime;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_heuristic_min_lifetime, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_HEURISTIC_MAX_LIFETIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->cache_heuristic_max_lifetime;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_heuristic_max_lifetime, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_GUARANTEED_MIN_LIFETIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->cache_guaranteed_min_lifetime;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_guaranteed_min_lifetime, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_GUARANTEED_MAX_LIFETIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->cache_guaranteed_max_lifetime;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_guaranteed_max_lifetime, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_MAX_STALE_AGE:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->cache_max_stale_age;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_max_stale_age, typep);
     break;
   case TS_CONFIG_HTTP_KEEP_ALIVE_NO_ACTIVITY_TIMEOUT_IN:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->keep_alive_no_activity_timeout_in;
+    ret = _memberp_to_generic(&overridableHttpConfig->keep_alive_no_activity_timeout_in, typep);
     break;
   case TS_CONFIG_HTTP_KEEP_ALIVE_NO_ACTIVITY_TIMEOUT_OUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->keep_alive_no_activity_timeout_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->keep_alive_no_activity_timeout_out, typep);
     break;
   case TS_CONFIG_HTTP_TRANSACTION_NO_ACTIVITY_TIMEOUT_IN:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->transaction_no_activity_timeout_in;
+    ret = _memberp_to_generic(&overridableHttpConfig->transaction_no_activity_timeout_in, typep);
     break;
   case TS_CONFIG_HTTP_TRANSACTION_NO_ACTIVITY_TIMEOUT_OUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->transaction_no_activity_timeout_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->transaction_no_activity_timeout_out, typep);
     break;
   case TS_CONFIG_HTTP_TRANSACTION_ACTIVE_TIMEOUT_OUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->transaction_active_timeout_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->transaction_active_timeout_out, typep);
     break;
   case TS_CONFIG_HTTP_ORIGIN_MAX_CONNECTIONS:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->origin_max_connections;
+    ret = _memberp_to_generic(&overridableHttpConfig->origin_max_connections, typep);
     break;
   case TS_CONFIG_HTTP_CONNECT_ATTEMPTS_MAX_RETRIES:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->connect_attempts_max_retries;
+    ret = _memberp_to_generic(&overridableHttpConfig->connect_attempts_max_retries, typep);
     break;
   case TS_CONFIG_HTTP_CONNECT_ATTEMPTS_MAX_RETRIES_DEAD_SERVER:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->connect_attempts_max_retries_dead_server;
+    ret = _memberp_to_generic(&overridableHttpConfig->connect_attempts_max_retries_dead_server, typep);
     break;
   case TS_CONFIG_HTTP_CONNECT_ATTEMPTS_RR_RETRIES:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->connect_attempts_rr_retries;
+    ret = _memberp_to_generic(&overridableHttpConfig->connect_attempts_rr_retries, typep);
     break;
   case TS_CONFIG_HTTP_CONNECT_ATTEMPTS_TIMEOUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->connect_attempts_timeout;
+    ret = _memberp_to_generic(&overridableHttpConfig->connect_attempts_timeout, typep);
     break;
   case TS_CONFIG_HTTP_POST_CONNECT_ATTEMPTS_TIMEOUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->post_connect_attempts_timeout;
+    ret = _memberp_to_generic(&overridableHttpConfig->post_connect_attempts_timeout, typep);
     break;
   case TS_CONFIG_HTTP_DOWN_SERVER_CACHE_TIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->down_server_timeout;
+    ret = _memberp_to_generic(&overridableHttpConfig->down_server_timeout, typep);
     break;
   case TS_CONFIG_HTTP_DOWN_SERVER_ABORT_THRESHOLD:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->client_abort_threshold;
+    ret = _memberp_to_generic(&overridableHttpConfig->client_abort_threshold, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_FUZZ_TIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->freshness_fuzz_time;
+    ret = _memberp_to_generic(&overridableHttpConfig->freshness_fuzz_time, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_FUZZ_MIN_TIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->freshness_fuzz_min_time;
+    ret = _memberp_to_generic(&overridableHttpConfig->freshness_fuzz_min_time, typep);
     break;
   case TS_CONFIG_HTTP_DOC_IN_CACHE_SKIP_DNS:
-    ret = &overridableHttpConfig->doc_in_cache_skip_dns;
+    ret = _memberp_to_generic(&overridableHttpConfig->doc_in_cache_skip_dns, typep);
     break;
   case TS_CONFIG_HTTP_BACKGROUND_FILL_ACTIVE_TIMEOUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->background_fill_active_timeout;
+    ret = _memberp_to_generic(&overridableHttpConfig->background_fill_active_timeout, typep);
     break;
   case TS_CONFIG_HTTP_RESPONSE_SERVER_STR:
-    typ = OVERRIDABLE_TYPE_STRING;
-    ret = &overridableHttpConfig->proxy_response_server_string;
+    ret = _memberp_to_generic(&overridableHttpConfig->proxy_response_server_string, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_HEURISTIC_LM_FACTOR:
-    typ = OVERRIDABLE_TYPE_FLOAT;
-    ret = &overridableHttpConfig->cache_heuristic_lm_factor;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_heuristic_lm_factor, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_FUZZ_PROBABILITY:
-    typ = OVERRIDABLE_TYPE_FLOAT;
-    ret = &overridableHttpConfig->freshness_fuzz_prob;
+    ret = _memberp_to_generic(&overridableHttpConfig->freshness_fuzz_prob, typep);
     break;
   case TS_CONFIG_HTTP_BACKGROUND_FILL_COMPLETED_THRESHOLD:
-    typ = OVERRIDABLE_TYPE_FLOAT;
-    ret = &overridableHttpConfig->background_fill_threshold;
+    ret = _memberp_to_generic(&overridableHttpConfig->background_fill_threshold, typep);
     break;
   case TS_CONFIG_NET_SOCK_PACKET_MARK_OUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->sock_packet_mark_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->sock_packet_mark_out, typep);
     break;
   case TS_CONFIG_NET_SOCK_PACKET_TOS_OUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->sock_packet_tos_out;
+    ret = _memberp_to_generic(&overridableHttpConfig->sock_packet_tos_out, typep);
     break;
   case TS_CONFIG_HTTP_INSERT_AGE_IN_RESPONSE:
-    ret = &overridableHttpConfig->insert_age_in_response;
+    ret = _memberp_to_generic(&overridableHttpConfig->insert_age_in_response, typep);
     break;
   case TS_CONFIG_HTTP_CHUNKING_SIZE:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->http_chunking_size;
+    ret = _memberp_to_generic(&overridableHttpConfig->http_chunking_size, typep);
     break;
   case TS_CONFIG_HTTP_FLOW_CONTROL_ENABLED:
-    ret = &overridableHttpConfig->flow_control_enabled;
+    ret = _memberp_to_generic(&overridableHttpConfig->flow_control_enabled, typep);
     break;
   case TS_CONFIG_HTTP_FLOW_CONTROL_LOW_WATER_MARK:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->flow_low_water_mark;
+    ret = _memberp_to_generic(&overridableHttpConfig->flow_low_water_mark, typep);
     break;
   case TS_CONFIG_HTTP_FLOW_CONTROL_HIGH_WATER_MARK:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->flow_high_water_mark;
+    ret = _memberp_to_generic(&overridableHttpConfig->flow_high_water_mark, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_RANGE_LOOKUP:
-    ret = &overridableHttpConfig->cache_range_lookup;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_range_lookup, typep);
     break;
   case TS_CONFIG_HTTP_NORMALIZE_AE_GZIP:
-    ret = &overridableHttpConfig->normalize_ae_gzip;
+    ret = _memberp_to_generic(&overridableHttpConfig->normalize_ae_gzip, typep);
     break;
   case TS_CONFIG_HTTP_DEFAULT_BUFFER_SIZE:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->default_buffer_size_index;
+    ret = _memberp_to_generic(&overridableHttpConfig->default_buffer_size_index, typep);
     break;
   case TS_CONFIG_HTTP_DEFAULT_BUFFER_WATER_MARK:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->default_buffer_water_mark;
+    ret = _memberp_to_generic(&overridableHttpConfig->default_buffer_water_mark, typep);
     break;
   case TS_CONFIG_HTTP_REQUEST_HEADER_MAX_SIZE:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->request_hdr_max_size;
+    ret = _memberp_to_generic(&overridableHttpConfig->request_hdr_max_size, typep);
     break;
   case TS_CONFIG_HTTP_RESPONSE_HEADER_MAX_SIZE:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->response_hdr_max_size;
+    ret = _memberp_to_generic(&overridableHttpConfig->response_hdr_max_size, typep);
     break;
   case TS_CONFIG_HTTP_NEGATIVE_REVALIDATING_ENABLED:
-    ret = &overridableHttpConfig->negative_revalidating_enabled;
+    ret = _memberp_to_generic(&overridableHttpConfig->negative_revalidating_enabled, typep);
     break;
   case TS_CONFIG_HTTP_NEGATIVE_REVALIDATING_LIFETIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->negative_revalidating_lifetime;
+    ret = _memberp_to_generic(&overridableHttpConfig->negative_revalidating_lifetime, typep);
     break;
   case TS_CONFIG_SSL_HSTS_MAX_AGE:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->proxy_response_hsts_max_age;
+    ret = _memberp_to_generic(&overridableHttpConfig->proxy_response_hsts_max_age, typep);
     break;
   case TS_CONFIG_SSL_HSTS_INCLUDE_SUBDOMAINS:
-    ret = &overridableHttpConfig->proxy_response_hsts_include_subdomains;
+    ret = _memberp_to_generic(&overridableHttpConfig->proxy_response_hsts_include_subdomains, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_OPEN_READ_RETRY_TIME:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->cache_open_read_retry_time;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_open_read_retry_time, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_MAX_OPEN_READ_RETRIES:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->max_cache_open_read_retries;
+    ret = _memberp_to_generic(&overridableHttpConfig->max_cache_open_read_retries, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_RANGE_WRITE:
-    ret = &overridableHttpConfig->cache_range_write;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_range_write, typep);
     break;
   case TS_CONFIG_HTTP_POST_CHECK_CONTENT_LENGTH_ENABLED:
-    ret = &overridableHttpConfig->post_check_content_length_enabled;
+    ret = _memberp_to_generic(&overridableHttpConfig->post_check_content_length_enabled, typep);
     break;
   case TS_CONFIG_HTTP_GLOBAL_USER_AGENT_HEADER:
-    typ = OVERRIDABLE_TYPE_STRING;
-    ret = &overridableHttpConfig->global_user_agent_header;
+    ret = _memberp_to_generic(&overridableHttpConfig->global_user_agent_header, typep);
     break;
   case TS_CONFIG_HTTP_AUTH_SERVER_SESSION_PRIVATE:
-    ret = &overridableHttpConfig->auth_server_session_private;
+    ret = _memberp_to_generic(&overridableHttpConfig->auth_server_session_private, typep);
     break;
   case TS_CONFIG_HTTP_SLOW_LOG_THRESHOLD:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->slow_log_threshold;
+    ret = _memberp_to_generic(&overridableHttpConfig->slow_log_threshold, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_GENERATION:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->cache_generation_number;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_generation_number, typep);
     break;
   case TS_CONFIG_BODY_FACTORY_TEMPLATE_BASE:
-    typ = OVERRIDABLE_TYPE_STRING;
-    ret = &overridableHttpConfig->body_factory_template_base;
+    ret = _memberp_to_generic(&overridableHttpConfig->body_factory_template_base, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_OPEN_WRITE_FAIL_ACTION:
-    ret = &overridableHttpConfig->cache_open_write_fail_action;
+    ret = _memberp_to_generic(&overridableHttpConfig->cache_open_write_fail_action, typep);
     break;
   case TS_CONFIG_HTTP_ENABLE_REDIRECTION:
-    ret = &overridableHttpConfig->redirection_enabled;
+    ret = _memberp_to_generic(&overridableHttpConfig->redirection_enabled, typep);
     break;
   case TS_CONFIG_HTTP_NUMBER_OF_REDIRECTIONS:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->number_of_redirections;
+    ret = _memberp_to_generic(&overridableHttpConfig->number_of_redirections, typep);
     break;
   case TS_CONFIG_HTTP_CACHE_MAX_OPEN_WRITE_RETRIES:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->max_cache_open_write_retries;
+    ret = _memberp_to_generic(&overridableHttpConfig->max_cache_open_write_retries, typep);
     break;
   case TS_CONFIG_HTTP_REDIRECT_USE_ORIG_CACHE_KEY:
-    ret = &overridableHttpConfig->redirect_use_orig_cache_key;
+    ret = _memberp_to_generic(&overridableHttpConfig->redirect_use_orig_cache_key, typep);
     break;
   case TS_CONFIG_HTTP_ATTACH_SERVER_SESSION_TO_CLIENT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->attach_server_session_to_client;
+    ret = _memberp_to_generic(&overridableHttpConfig->attach_server_session_to_client, typep);
     break;
   case TS_CONFIG_HTTP_SAFE_REQUESTS_RETRYABLE:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->safe_requests_retryable;
+    ret = _memberp_to_generic(&overridableHttpConfig->safe_requests_retryable, typep);
     break;
   case TS_CONFIG_HTTP_ORIGIN_MAX_CONNECTIONS_QUEUE:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->origin_max_connections_queue;
+    ret = _memberp_to_generic(&overridableHttpConfig->origin_max_connections_queue, typep);
     break;
   case TS_CONFIG_WEBSOCKET_NO_ACTIVITY_TIMEOUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->websocket_inactive_timeout;
+    ret = _memberp_to_generic(&overridableHttpConfig->websocket_inactive_timeout, typep);
     break;
   case TS_CONFIG_WEBSOCKET_ACTIVE_TIMEOUT:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->websocket_active_timeout;
+    ret = _memberp_to_generic(&overridableHttpConfig->websocket_active_timeout, typep);
     break;
   case TS_CONFIG_HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT:
-    ret = &overridableHttpConfig->uncacheable_requests_bypass_parent;
+    ret = _memberp_to_generic(&overridableHttpConfig->uncacheable_requests_bypass_parent, typep);
     break;
   case TS_CONFIG_HTTP_PARENT_PROXY_TOTAL_CONNECT_ATTEMPTS:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->parent_connect_attempts;
+    ret = _memberp_to_generic(&overridableHttpConfig->parent_connect_attempts, typep);
     break;
   case TS_CONFIG_HTTP_TRANSACTION_ACTIVE_TIMEOUT_IN:
-    typ = OVERRIDABLE_TYPE_INT;
-    ret = &overridableHttpConfig->transaction_active_timeout_in;
+    ret = _memberp_to_generic(&overridableHttpConfig->transaction_active_timeout_in, typep);
     break;
   case TS_CONFIG_SRV_ENABLED:
-    ret = &overridableHttpConfig->srv_enabled;
+    ret = _memberp_to_generic(&overridableHttpConfig->srv_enabled, typep);
     break;
   case TS_CONFIG_HTTP_FORWARD_CONNECT_METHOD:
-    ret = &overridableHttpConfig->forward_connect_method;
+    ret = _memberp_to_generic(&overridableHttpConfig->forward_connect_method, typep);
     break;
   case TS_CONFIG_SSL_CERT_FILENAME:
-    typ = OVERRIDABLE_TYPE_STRING;
-    ret = &overridableHttpConfig->client_cert_filename;
+    ret = _memberp_to_generic(&overridableHttpConfig->client_cert_filename, typep);
     break;
   case TS_CONFIG_SSL_CERT_FILEPATH:
-    typ = OVERRIDABLE_TYPE_STRING;
-    ret = &overridableHttpConfig->client_cert_filepath;
+    ret = _memberp_to_generic(&overridableHttpConfig->client_cert_filepath, typep);
     break;
   case TS_CONFIG_PARENT_FAILURES_UPDATE_HOSTDB:
-    ret = &overridableHttpConfig->parent_failures_update_hostdb;
+    ret = _memberp_to_generic(&overridableHttpConfig->parent_failures_update_hostdb, typep);
     break;
   // This helps avoiding compiler warnings, yet detect unhandled enum members.
   case TS_CONFIG_NULL:
   case TS_CONFIG_LAST_ENTRY:
-    typ = OVERRIDABLE_TYPE_NULL;
-    ret = nullptr;
     break;
   }
 
-  *typep = typ;
-
   return ret;
 }
 
@@ -8176,24 +8125,21 @@ TSHttpTxnConfigIntSet(TSHttpTxn txnp, TSOverridableConfigKey conf, TSMgmtInt val
   sdk_assert(sdk_sanity_check_txn(txnp) == TS_SUCCESS);
 
   HttpSM *s = reinterpret_cast<HttpSM *>(txnp);
-  OverridableDataType type;
+  std::type_info const *type;
 
   s->t_state.setup_per_txn_configs();
 
-  void *dest = _conf_to_memberp(conf, s->t_state.txn_conf, &type);
+  void *dest = _conf_to_memberp(conf, s->t_state.txn_conf, type);
 
   if (!dest) {
     return TS_ERROR;
   }
 
-  switch (type) {
-  case OVERRIDABLE_TYPE_INT:
+  if (*type == TYPE_INFO_MGMT_INT) {
     *(static_cast<TSMgmtInt *>(dest)) = value;
-    break;
-  case OVERRIDABLE_TYPE_BYTE:
+  } else if (*type == TYPE_INFO_MGMT_BYTE) {
     *(static_cast<TSMgmtByte *>(dest)) = static_cast<TSMgmtByte>(value);
-    break;
-  default:
+  } else {
     return TS_ERROR;
   }
 
@@ -8207,21 +8153,16 @@ TSHttpTxnConfigIntGet(TSHttpTxn txnp, TSOverridableConfigKey conf, TSMgmtInt *va
   sdk_assert(sdk_sanity_check_null_ptr((void *)value) == TS_SUCCESS);
 
   HttpSM *s = reinterpret_cast<HttpSM *>(txnp);
-  OverridableDataType type;
-  void *src = _conf_to_memberp(conf, s->t_state.txn_conf, &type);
+  std::type_info const *type;
+  void *src = _conf_to_memberp(conf, s->t_state.txn_conf, type);
 
   if (!src) {
     return TS_ERROR;
-  }
-
-  switch (type) {
-  case OVERRIDABLE_TYPE_INT:
+  } else if (*type == TYPE_INFO_MGMT_INT) {
     *value = *(static_cast<TSMgmtInt *>(src));
-    break;
-  case OVERRIDABLE_TYPE_BYTE:
+  } else if (*type == TYPE_INFO_MGMT_BYTE) {
     *value = *(static_cast<TSMgmtByte *>(src));
-    break;
-  default:
+  } else {
     return TS_ERROR;
   }
 
@@ -8234,19 +8175,16 @@ TSHttpTxnConfigFloatSet(TSHttpTxn txnp, TSOverridableConfigKey conf, TSMgmtFloat
   sdk_assert(sdk_sanity_check_txn(txnp) == TS_SUCCESS);
 
   HttpSM *s = reinterpret_cast<HttpSM *>(txnp);
-  OverridableDataType type;
+  std::type_info const *type;
 
   s->t_state.setup_per_txn_configs();
 
-  TSMgmtFloat *dest = static_cast<TSMgmtFloat *>(_conf_to_memberp(conf, s->t_state.txn_conf, &type));
+  TSMgmtFloat *dest = static_cast<TSMgmtFloat *>(_conf_to_memberp(conf, s->t_state.txn_conf, type));
 
-  if (type != OVERRIDABLE_TYPE_FLOAT) {
+  if (!dest || *type != TYPE_INFO_MGMT_FLOAT) {
     return TS_ERROR;
-  }
-
-  if (dest) {
+  } else {
     *dest = value;
-    return TS_SUCCESS;
   }
 
   return TS_SUCCESS;
@@ -8258,16 +8196,13 @@ TSHttpTxnConfigFloatGet(TSHttpTxn txnp, TSOverridableConfigKey conf, TSMgmtFloat
   sdk_assert(sdk_sanity_check_txn(txnp) == TS_SUCCESS);
   sdk_assert(sdk_sanity_check_null_ptr((void *)value) == TS_SUCCESS);
 
-  OverridableDataType type;
-  TSMgmtFloat *dest = static_cast<TSMgmtFloat *>(_conf_to_memberp(conf, ((HttpSM *)txnp)->t_state.txn_conf, &type));
+  std::type_info const *type;
+  TSMgmtFloat *dest = static_cast<TSMgmtFloat *>(_conf_to_memberp(conf, ((HttpSM *)txnp)->t_state.txn_conf, type));
 
-  if (type != OVERRIDABLE_TYPE_FLOAT) {
-    return TS_ERROR;
-  }
-
-  if (dest) {
+  if (dest && *type == TYPE_INFO_MGMT_FLOAT) {
     *value = *dest;
-    return TS_SUCCESS;
+  } else {
+    return TS_ERROR;
   }
 
   return TS_SUCCESS;
diff --git a/proxy/InkAPIInternal.h b/proxy/InkAPIInternal.h
index f4f21ab..b1b044f 100644
--- a/proxy/InkAPIInternal.h
+++ b/proxy/InkAPIInternal.h
@@ -36,17 +36,12 @@
 #include "api/ts/InkAPIPrivateIOCore.h"
 #include "api/ts/experimental.h"
 
+#include <typeinfo>
+
 /* Some defines that might be candidates for configurable settings later.
  */
 #define HTTP_SSN_TXN_MAX_USER_ARG 16 /* max number of user arguments for Transactions and Sessions */
 
-typedef enum {
-  OVERRIDABLE_TYPE_NULL = 0,
-  OVERRIDABLE_TYPE_INT,
-  OVERRIDABLE_TYPE_FLOAT,
-  OVERRIDABLE_TYPE_STRING,
-  OVERRIDABLE_TYPE_BYTE
-} OverridableDataType;
 typedef int8_t TSMgmtByte; // Not for external use
 
 /* ****** Cache Structure ********* */

-- 
To stop receiving notification emails like this one, please contact
"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>.