/trafficserver-3.2.0/proxy/http/HttpConfig.h
C Header | 994 lines | 618 code | 138 blank | 238 comment | 3 complexity | 60227dd016839b9a55848b8d81a7dc9f MD5 | raw file
Possible License(s): Apache-2.0
- /** @file
- A brief file description
- @section license License
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- /*************************** -*- Mod: C++ -*- ******************************
- HttpConfig.h
- Created On : Tue Oct 22 20:19:04 1996
- Description:
- Http Configurations
- ****************************************************************************/
- #ifndef _HttpConfig_h_
- #define _HttpConfig_h_
- #include <stdlib.h>
- #include <stdio.h>
- #ifdef HAVE_PCRE_PCRE_H
- #include <pcre/pcre.h>
- #else
- #include <pcre.h>
- #endif
- #ifdef HAVE_CTYPE_H
- #include <ctype.h>
- #endif
- #include "libts.h"
- #include "ProxyConfig.h"
- #include "P_RecProcess.h"
- /* 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 */
- /* Instead of enumerating the stats in DynamicStats.h, each module needs
- to enumerate its stats separately and register them with librecords
- */
- enum
- {
- http_background_fill_current_count_stat,
- http_current_client_connections_stat,
- http_current_active_client_connections_stat,
- http_current_client_transactions_stat,
- http_total_incoming_connections_stat,
- http_current_parent_proxy_transactions_stat,
- http_current_icp_transactions_stat,
- http_current_server_transactions_stat,
- http_current_parent_proxy_raw_transactions_stat,
- http_current_icp_raw_transactions_stat,
- http_current_server_raw_transactions_stat,
- // Http Abort information (from HttpNetConnection)
- http_ua_msecs_counts_errors_pre_accept_hangups_stat,
- http_ua_msecs_counts_errors_empty_hangups_stat,
- http_ua_msecs_counts_errors_early_hangups_stat,
- // Http Total Connections Stats
- //
- // it is assumed that this inequality will always be satisifed:
- // http_total_client_connections_stat >=
- // http_total_client_connections_ipv4_stat +
- // http_total_client_connections_ipv6_stat
- http_total_client_connections_stat,
- http_total_client_connections_ipv4_stat,
- http_total_client_connections_ipv6_stat,
- http_total_server_connections_stat,
- http_total_parent_proxy_connections_stat,
- http_current_parent_proxy_connections_stat,
- http_current_server_connections_stat,
- http_current_cache_connections_stat,
- // Http K-A Stats
- http_transactions_per_client_con,
- http_transactions_per_server_con,
- http_transactions_per_parent_con,
- // Http Time Stuff
- http_client_connection_time_stat,
- http_parent_proxy_connection_time_stat,
- http_server_connection_time_stat,
- http_cache_connection_time_stat,
- // Transactional stats (originaly in proxy/HttpTransStats.h)
- http_incoming_requests_stat,
- http_outgoing_requests_stat,
- http_incoming_responses_stat,
- http_invalid_client_requests_stat,
- http_missing_host_hdr_stat,
- http_get_requests_stat,
- http_head_requests_stat,
- http_trace_requests_stat,
- http_options_requests_stat,
- http_post_requests_stat,
- http_put_requests_stat,
- http_push_requests_stat,
- http_delete_requests_stat,
- http_purge_requests_stat,
- http_connect_requests_stat,
- http_extension_method_requests_stat,
- http_completed_requests_stat,
- http_client_no_cache_requests_stat,
- // http_icp_requests_stat,
- // http_icp_invalid_responses_stat,
- // http_parent_proxy_requests_stat,
- // http_parent_invalid_responses_stat,
- // http_invalid_responses_stat,
- // http_retried_requests_stat,
- http_broken_server_connections_stat,
- http_cache_lookups_stat,
- http_cache_misses_stat,
- http_cache_writes_stat,
- http_cache_updates_stat,
- http_cache_deletes_stat,
- http_tunnels_stat,
- http_throttled_proxy_only_stat,
- // HTTP requests classified by IMS/no-cache/MSIE
- http_request_taxonomy_i0_n0_m0_stat,
- http_request_taxonomy_i1_n0_m0_stat,
- http_request_taxonomy_i0_n1_m0_stat,
- http_request_taxonomy_i1_n1_m0_stat,
- http_request_taxonomy_i0_n0_m1_stat,
- http_request_taxonomy_i1_n0_m1_stat,
- http_request_taxonomy_i0_n1_m1_stat,
- http_request_taxonomy_i1_n1_m1_stat,
- http_icp_suggested_lookups_stat,
- // document size stats
- http_user_agent_request_header_total_size_stat,
- http_user_agent_response_header_total_size_stat,
- http_user_agent_request_document_total_size_stat,
- http_user_agent_response_document_total_size_stat,
- http_origin_server_request_header_total_size_stat,
- http_origin_server_response_header_total_size_stat,
- http_origin_server_request_document_total_size_stat,
- http_origin_server_response_document_total_size_stat,
- http_parent_proxy_request_total_bytes_stat,
- http_parent_proxy_response_total_bytes_stat,
- http_pushed_response_header_total_size_stat,
- http_pushed_document_total_size_stat,
- http_background_fill_bytes_aborted_stat,
- http_background_fill_bytes_completed_stat,
- http_response_document_size_100_stat,
- http_response_document_size_1K_stat,
- http_response_document_size_3K_stat,
- http_response_document_size_5K_stat,
- http_response_document_size_10K_stat,
- http_response_document_size_1M_stat,
- http_response_document_size_inf_stat,
- http_request_document_size_100_stat,
- http_request_document_size_1K_stat,
- http_request_document_size_3K_stat,
- http_request_document_size_5K_stat,
- http_request_document_size_10K_stat,
- http_request_document_size_1M_stat,
- http_request_document_size_inf_stat,
- // connection speed stats
- http_user_agent_speed_bytes_per_sec_100_stat,
- http_user_agent_speed_bytes_per_sec_1K_stat,
- http_user_agent_speed_bytes_per_sec_10K_stat,
- http_user_agent_speed_bytes_per_sec_100K_stat,
- http_user_agent_speed_bytes_per_sec_1M_stat,
- http_user_agent_speed_bytes_per_sec_10M_stat,
- http_user_agent_speed_bytes_per_sec_100M_stat,
- http_origin_server_speed_bytes_per_sec_100_stat,
- http_origin_server_speed_bytes_per_sec_1K_stat,
- http_origin_server_speed_bytes_per_sec_10K_stat,
- http_origin_server_speed_bytes_per_sec_100K_stat,
- http_origin_server_speed_bytes_per_sec_1M_stat,
- http_origin_server_speed_bytes_per_sec_10M_stat,
- http_origin_server_speed_bytes_per_sec_100M_stat,
- // cache result stats
- http_cache_hit_fresh_stat,
- http_cache_hit_mem_fresh_stat,
- http_cache_hit_reval_stat,
- http_cache_hit_ims_stat,
- http_cache_hit_stale_served_stat,
- http_cache_miss_cold_stat,
- http_cache_miss_changed_stat,
- http_cache_miss_client_no_cache_stat,
- http_cache_miss_uncacheable_stat,
- http_cache_miss_ims_stat,
- http_cache_read_error_stat,
- // bandwidth savings stats
- http_tcp_hit_count_stat,
- http_tcp_hit_user_agent_bytes_stat,
- http_tcp_hit_origin_server_bytes_stat,
- http_tcp_miss_count_stat,
- http_tcp_miss_user_agent_bytes_stat,
- http_tcp_miss_origin_server_bytes_stat,
- http_tcp_expired_miss_count_stat,
- http_tcp_expired_miss_user_agent_bytes_stat,
- http_tcp_expired_miss_origin_server_bytes_stat,
- http_tcp_refresh_hit_count_stat,
- http_tcp_refresh_hit_user_agent_bytes_stat,
- http_tcp_refresh_hit_origin_server_bytes_stat,
- http_tcp_refresh_miss_count_stat,
- http_tcp_refresh_miss_user_agent_bytes_stat,
- http_tcp_refresh_miss_origin_server_bytes_stat,
- http_tcp_client_refresh_count_stat,
- http_tcp_client_refresh_user_agent_bytes_stat,
- http_tcp_client_refresh_origin_server_bytes_stat,
- http_tcp_ims_hit_count_stat,
- http_tcp_ims_hit_user_agent_bytes_stat,
- http_tcp_ims_hit_origin_server_bytes_stat,
- http_tcp_ims_miss_count_stat,
- http_tcp_ims_miss_user_agent_bytes_stat,
- http_tcp_ims_miss_origin_server_bytes_stat,
- http_err_client_abort_count_stat,
- http_err_client_abort_user_agent_bytes_stat,
- http_err_client_abort_origin_server_bytes_stat,
- http_err_connect_fail_count_stat,
- http_err_connect_fail_user_agent_bytes_stat,
- http_err_connect_fail_origin_server_bytes_stat,
- http_misc_count_stat,
- http_misc_user_agent_bytes_stat,
- http_misc_origin_server_bytes_stat,
- // http - time and count of transactions classified by client's point of view
- http_ua_msecs_counts_hit_fresh_stat,
- http_ua_msecs_counts_hit_fresh_process_stat,
- http_ua_msecs_counts_hit_reval_stat,
- http_ua_msecs_counts_hit_ims_stat,
- http_ua_msecs_counts_hit_stale_served_stat,
- http_ua_msecs_counts_miss_cold_stat,
- http_ua_msecs_counts_miss_changed_stat,
- http_ua_msecs_counts_miss_client_no_cache_stat,
- http_ua_msecs_counts_miss_uncacheable_stat,
- http_ua_msecs_counts_miss_ims_stat,
- http_ua_msecs_counts_errors_aborts_stat,
- http_ua_msecs_counts_errors_possible_aborts_stat,
- http_ua_msecs_counts_errors_connect_failed_stat,
- http_ua_msecs_counts_errors_other_stat,
- http_ua_msecs_counts_other_unclassified_stat,
- http_total_x_redirect_stat,
- // Times
- http_total_transactions_time_stat,
- http_total_transactions_think_time_stat,
- http_client_transaction_time_stat,
- http_client_write_time_stat,
- http_server_read_time_stat,
- http_icp_transaction_time_stat,
- http_icp_raw_transaction_time_stat,
- http_parent_proxy_transaction_time_stat,
- http_parent_proxy_raw_transaction_time_stat,
- http_server_transaction_time_stat,
- http_server_raw_transaction_time_stat,
- // Http cache errors
- http_cache_write_errors,
- http_cache_read_errors,
- // status code stats
- http_response_status_100_count_stat,
- http_response_status_101_count_stat,
- http_response_status_1xx_count_stat,
- http_response_status_200_count_stat,
- http_response_status_201_count_stat,
- http_response_status_202_count_stat,
- http_response_status_203_count_stat,
- http_response_status_204_count_stat,
- http_response_status_205_count_stat,
- http_response_status_206_count_stat,
- http_response_status_2xx_count_stat,
- http_response_status_300_count_stat,
- http_response_status_301_count_stat,
- http_response_status_302_count_stat,
- http_response_status_303_count_stat,
- http_response_status_304_count_stat,
- http_response_status_305_count_stat,
- http_response_status_307_count_stat,
- http_response_status_3xx_count_stat,
- http_response_status_400_count_stat,
- http_response_status_401_count_stat,
- http_response_status_402_count_stat,
- http_response_status_403_count_stat,
- http_response_status_404_count_stat,
- http_response_status_405_count_stat,
- http_response_status_406_count_stat,
- http_response_status_407_count_stat,
- http_response_status_408_count_stat,
- http_response_status_409_count_stat,
- http_response_status_410_count_stat,
- http_response_status_411_count_stat,
- http_response_status_412_count_stat,
- http_response_status_413_count_stat,
- http_response_status_414_count_stat,
- http_response_status_415_count_stat,
- http_response_status_416_count_stat,
- http_response_status_4xx_count_stat,
- http_response_status_500_count_stat,
- http_response_status_501_count_stat,
- http_response_status_502_count_stat,
- http_response_status_503_count_stat,
- http_response_status_504_count_stat,
- http_response_status_505_count_stat,
- http_response_status_5xx_count_stat,
- http_stat_count
- };
- extern RecRawStatBlock *http_rsb;
- /* Stats should only be accessed using these macros */
- #define HTTP_INCREMENT_DYN_STAT(x) RecIncrRawStat(http_rsb, mutex->thread_holding, (int) x, 1)
- #define HTTP_DECREMENT_DYN_STAT(x) RecIncrRawStat(http_rsb, mutex->thread_holding, (int) x, -1)
- #define HTTP_SUM_DYN_STAT(x, y) RecIncrRawStat(http_rsb, mutex->thread_holding, (int) x, (int64_t) y)
- #define HTTP_SUM_GLOBAL_DYN_STAT(x, y) RecIncrGlobalRawStatSum(http_rsb, x, y)
- #define HTTP_CLEAR_DYN_STAT(x) \
- do { \
- RecSetRawStatSum(http_rsb, x, 0); \
- RecSetRawStatCount(http_rsb, x, 0); \
- } while (0);
- #define HTTP_READ_DYN_SUM(x, S) RecGetRawStatSum(http_rsb, (int)x, &S) // This aggregates threads too
- #define HTTP_READ_GLOBAL_DYN_SUM(x, S) RecGetGlobalRawStatSum(http_rsb, (int)x, &S)
- #define HTTP_ConfigReadInteger REC_ConfigReadInteger
- #define HTTP_ConfigReadString REC_ConfigReadString
- #define HTTP_RegisterConfigUpdateFunc REC_RegisterConfigUpdateFunc
- /////////////////////////////////////////////////////////////
- //
- // struct HttpConfigPortRange
- //
- // configuration parameters for a range of valid SSL ports
- // if "low" == "high" a single port is part of this range
- // if "low" == "high" == -1 any port number is allowed
- // (corresponds to a "*" in the config file)
- /////////////////////////////////////////////////////////////
- struct HttpConfigPortRange
- {
- int low;
- int high;
- HttpConfigPortRange *next;
- HttpConfigPortRange()
- : low(0), high(0), next(0)
- { }
- ~HttpConfigPortRange()
- {
- if (next)
- delete next;
- }
- };
- /////////////////////////////////////////////////////////////
- // This is a little helper class, used by the HttpConfigParams
- // and State (txn) structure. It allows for certain configs
- // to be overridable per transaction more easily.
- struct OverridableHttpConfigParams {
- OverridableHttpConfigParams()
- : maintain_pristine_host_hdr(0), chunking_enabled(0),
- negative_caching_enabled(0), cache_when_to_revalidate(0),
- keep_alive_enabled_in(0), keep_alive_enabled_out(0), keep_alive_post_out(0),
- share_server_sessions(0), fwd_proxy_auth_to_parent(0),
- anonymize_remove_from(0), anonymize_remove_referer(0), anonymize_remove_user_agent(0),
- anonymize_remove_cookie(0), anonymize_remove_client_ip(0), anonymize_insert_client_ip(1),
- proxy_response_server_enabled(0), insert_squid_x_forwarded_for(0),
- send_http11_requests(3), // SEND_HTTP11_IF_REQUEST_11_AND_HOSTDB
- cache_http(0), cache_ignore_client_no_cache(0), cache_ignore_client_cc_max_age(1),
- cache_ims_on_client_no_cache(0), cache_ignore_server_no_cache(0), cache_responses_to_cookies(0),
- cache_ignore_auth(0), cache_urls_that_look_dynamic(0), cache_required_headers(0), // CACHE_REQUIRED_HEADERS_NONE
- insert_request_via_string(0), insert_response_via_string(0), doc_in_cache_skip_dns(1),
- negative_caching_lifetime(0),
- sock_recv_buffer_size_out(0), sock_send_buffer_size_out(0), sock_option_flag_out(0),
- sock_packet_mark_out(0), sock_packet_tos_out(0),
- server_tcp_init_cwnd(0),
- cache_heuristic_min_lifetime(0), cache_heuristic_max_lifetime(0),
- cache_guaranteed_min_lifetime(0), cache_guaranteed_max_lifetime(0), cache_max_stale_age(0),
- keep_alive_no_activity_timeout_in(0),
- keep_alive_no_activity_timeout_out(0),
- transaction_no_activity_timeout_in(0), transaction_no_activity_timeout_out(0),
- transaction_active_timeout_out(0),
- origin_max_connections(0),
- connect_attempts_max_retries(0), connect_attempts_max_retries_dead_server(0),
- connect_attempts_rr_retries(0), connect_attempts_timeout(0),
- post_connect_attempts_timeout(0),
- down_server_timeout(0), client_abort_threshold(0),
- freshness_fuzz_time(0), freshness_fuzz_min_time(0),
- max_cache_open_read_retries(0), cache_open_read_retry_time(0),
- // Strings / floats must come last
- proxy_response_server_string(NULL), proxy_response_server_string_len(0),
- cache_heuristic_lm_factor(0.0), freshness_fuzz_prob(0.0)
- { }
- // A few rules here:
- // 1. Place all MgmtByte configs before all other configs
- // 1. all MgmtInt/Byte configs should come before string / float configs.
- // The first three configs used to be @-parameters in remap.config
- MgmtByte maintain_pristine_host_hdr;
- MgmtByte chunking_enabled;
- ////////////////////////////////
- // Negative Response Caching //
- ////////////////////////////////
- MgmtByte negative_caching_enabled;
- MgmtByte cache_when_to_revalidate;
- MgmtByte keep_alive_enabled_in;
- MgmtByte keep_alive_enabled_out;
- MgmtByte keep_alive_post_out; // share server sessions for post
- MgmtByte share_server_sessions;
- MgmtByte fwd_proxy_auth_to_parent;
- ///////////////////////////////////////////////////////////////////
- // Privacy: fields which are removed from the user agent request //
- ///////////////////////////////////////////////////////////////////
- MgmtByte anonymize_remove_from;
- MgmtByte anonymize_remove_referer;
- MgmtByte anonymize_remove_user_agent;
- MgmtByte anonymize_remove_cookie;
- MgmtByte anonymize_remove_client_ip;
- MgmtByte anonymize_insert_client_ip;
- MgmtByte proxy_response_server_enabled;
- /////////////////////
- // X-Forwarded-For //
- /////////////////////
- MgmtByte insert_squid_x_forwarded_for;
- //////////////////////
- // Version Hell //
- //////////////////////
- MgmtByte send_http11_requests;
- ///////////////////
- // cache control //
- ///////////////////
- MgmtByte cache_http;
- MgmtByte cache_ignore_client_no_cache;
- MgmtByte cache_ignore_client_cc_max_age;
- MgmtByte cache_ims_on_client_no_cache;
- MgmtByte cache_ignore_server_no_cache;
- MgmtByte cache_responses_to_cookies;
- MgmtByte cache_ignore_auth;
- MgmtByte cache_urls_that_look_dynamic;
- MgmtByte cache_required_headers;
- MgmtByte insert_request_via_string;
- MgmtByte insert_response_via_string;
- //////////////////////
- // DOC IN CACHE NO DNS//
- //////////////////////
- MgmtByte doc_in_cache_skip_dns;
- MgmtInt negative_caching_lifetime;
- ///////////////////////////////////////
- // origin server connection settings //
- ///////////////////////////////////////
- MgmtInt sock_recv_buffer_size_out;
- MgmtInt sock_send_buffer_size_out;
- MgmtInt sock_option_flag_out;
- MgmtInt sock_packet_mark_out;
- MgmtInt sock_packet_tos_out;
- ///////////////////////////////
- // Initial congestion window //
- ///////////////////////////////
- MgmtInt server_tcp_init_cwnd;
- /////////////////////
- // cache variables //
- /////////////////////
- MgmtInt cache_heuristic_min_lifetime;
- MgmtInt cache_heuristic_max_lifetime;
- MgmtInt cache_guaranteed_min_lifetime;
- MgmtInt cache_guaranteed_max_lifetime;
- MgmtInt cache_max_stale_age;
- ///////////////////////////////////////////////////
- // connection variables. timeouts are in seconds //
- ///////////////////////////////////////////////////
- MgmtInt keep_alive_no_activity_timeout_in;
- MgmtInt keep_alive_no_activity_timeout_out;
- MgmtInt transaction_no_activity_timeout_in;
- MgmtInt transaction_no_activity_timeout_out;
- MgmtInt transaction_active_timeout_out;
- MgmtInt origin_max_connections;
- ////////////////////////////////////
- // origin server connect attempts //
- ////////////////////////////////////
- MgmtInt connect_attempts_max_retries;
- MgmtInt connect_attempts_max_retries_dead_server;
- MgmtInt connect_attempts_rr_retries;
- MgmtInt connect_attempts_timeout;
- MgmtInt post_connect_attempts_timeout;
- ////////////////////////
- // Negative Caching //
- ////////////////////////
- MgmtInt down_server_timeout;
- MgmtInt client_abort_threshold;
- MgmtInt freshness_fuzz_time;
- MgmtInt freshness_fuzz_min_time;
- // open read failure retries.
- MgmtInt max_cache_open_read_retries;
- MgmtInt cache_open_read_retry_time; // time is in mseconds
- // IMPORTANT: Here comes all strings / floats configs.
- ///////////////////////////////////////////////////////////////////
- // Server header //
- ///////////////////////////////////////////////////////////////////
- char *proxy_response_server_string; // This does not get free'd by us!
- size_t proxy_response_server_string_len; // Updated when server_string is set.
- float cache_heuristic_lm_factor;
- float freshness_fuzz_prob;
- };
- /////////////////////////////////////////////////////////////
- //
- // struct HttpConfigParams
- //
- // configuration parameters as they apear in the global
- // configuration file.
- /////////////////////////////////////////////////////////////
- struct HttpConfigParams:public ConfigInfo
- {
- public:
- HttpConfigParams();
- ~HttpConfigParams();
- enum
- {
- CACHE_REQUIRED_HEADERS_NONE = 0,
- CACHE_REQUIRED_HEADERS_AT_LEAST_LAST_MODIFIED = 1,
- CACHE_REQUIRED_HEADERS_CACHE_CONTROL = 2
- };
- enum
- {
- SEND_HTTP11_NEVER = 0,
- SEND_HTTP11_ALWAYS = 1,
- SEND_HTTP11_UPGRADE_HOSTDB = 2,
- SEND_HTTP11_IF_REQUEST_11_AND_HOSTDB = 3
- };
- public:
- char *proxy_hostname;
- int proxy_hostname_len;
- IpAddr inbound_ip4, inbound_ip6;
- IpAddr outbound_ip4, outbound_ip6;
- MgmtInt server_max_connections;
- MgmtInt origin_min_keep_alive_connections; // TODO: This one really ought to be overridable, but difficult right now.
- MgmtByte parent_proxy_routing_enable;
- MgmtByte disable_ssl_parenting;
- MgmtByte enable_url_expandomatic;
- MgmtByte no_dns_forward_to_parent;
- MgmtByte uncacheable_requests_bypass_parent;
- MgmtByte no_origin_server_dns;
- MgmtByte use_client_target_addr;
- MgmtByte use_client_source_port;
- char *proxy_request_via_string;
- int proxy_request_via_string_len;
- char *proxy_response_via_string;
- int proxy_response_via_string_len;
- //////////////////
- // WUTS headers //
- //////////////////
- MgmtByte wuts_enabled;
- MgmtByte log_spider_codes;
- ///////////////////////////////////
- // URL expansions for DNS lookup //
- ///////////////////////////////////
- char *url_expansions_string;
- char **url_expansions;
- int num_url_expansions;
- ///////////////////////////////////////////////////
- // connection variables. timeouts are in seconds //
- ///////////////////////////////////////////////////
- MgmtInt proxy_server_port;
- char *proxy_server_other_ports;
- MgmtByte session_auth_cache_keep_alive_enabled;
- MgmtInt origin_server_pipeline;
- MgmtInt user_agent_pipeline;
- MgmtInt transaction_active_timeout_in;
- MgmtInt accept_no_activity_timeout;
- MgmtInt background_fill_active_timeout;
- MgmtFloat background_fill_threshold;
- ////////////////////////////////////
- // origin server connect attempts //
- ////////////////////////////////////
- MgmtInt parent_connect_attempts;
- MgmtInt per_parent_connect_attempts;
- MgmtInt parent_connect_timeout;
- ///////////////////////////////////////////////////////////////////
- // Privacy: fields which are removed from the user agent request //
- ///////////////////////////////////////////////////////////////////
- char *anonymize_other_header_list;
- ///////////////////////////////////////////////////////////////////
- // Global User Agent //
- ///////////////////////////////////////////////////////////////////
- char *global_user_agent_header;
- size_t global_user_agent_header_size;
- /////////////////////
- // Benchmark hacks //
- /////////////////////
- MgmtByte insert_age_in_response;
- MgmtByte avoid_content_spoofing;
- MgmtByte enable_http_stats;
- ///////////////////
- // ICP variables //
- ///////////////////
- MgmtByte icp_enabled;
- MgmtByte stale_icp_enabled;
- char *cache_vary_default_text;
- char *cache_vary_default_images;
- char *cache_vary_default_other;
- // open write failure retries.
- MgmtInt max_cache_open_write_retries;
- ///////////////////
- // cache control //
- ///////////////////
- MgmtByte cache_enable_default_vary_headers;
- MgmtByte cache_when_to_add_no_cache_to_msie_requests;
- MgmtByte cache_range_lookup;
- ////////////////////////////////////////////
- // CONNECT ports (used to be == ssl_ports //
- ////////////////////////////////////////////
- char *connect_ports_string;
- HttpConfigPortRange *connect_ports;
- ///////////////
- // Hdr Limit //
- ///////////////
- MgmtInt request_hdr_max_size;
- MgmtInt response_hdr_max_size;
- //////////
- // Push //
- //////////
- MgmtByte push_method_enabled;
- ////////////////////////////
- // HTTP Referer filtering //
- ////////////////////////////
- MgmtByte referer_filter_enabled;
- MgmtByte referer_format_redirect;
- ////////////////////////////////////////////////////////
- // HTTP Accept-Encoding filtering based on User-Agent //
- ////////////////////////////////////////////////////////
- MgmtByte accept_encoding_filter_enabled;
- //////////////////
- // Transparency //
- //////////////////
- /// Accept connections on foreign addresses.
- bool client_transparency_enabled;
- /// Use client address to connect to origin server.
- bool server_transparency_enabled;
- ///////////////////
- // reverse proxy //
- ///////////////////
- MgmtByte reverse_proxy_enabled;
- MgmtByte url_remap_required;
- char *reverse_proxy_no_host_redirect;
- int reverse_proxy_no_host_redirect_len;
- ////////////////////////////
- // Negative Revalidating //
- ////////////////////////////
- MgmtByte negative_revalidating_enabled;
- MgmtInt negative_revalidating_lifetime;
- ///////////////////
- // cop access //
- ///////////////////
- MgmtByte record_cop_page;
- ////////////////////////
- // record tcp_mem_hit //
- ////////////////////////
- MgmtByte record_tcp_mem_hit;
- /////////////////////
- // Error Reporting //
- /////////////////////
- MgmtByte errors_log_error_pages;
- MgmtInt slow_log_threshold;
- MgmtInt default_buffer_size_index;
- MgmtInt default_buffer_water_mark;
- MgmtByte enable_http_info;
- // Cluster time delta is not a config variable,
- // rather it is the time skew which the manager observes
- int32_t cluster_time_delta;
- MgmtInt srv_enabled; /* added by: ebalsa */
- //##############################################################################
- //#
- //# Redirection
- //#
- //# 1. redirection_enabled: if set to 1, redirection is enabled.
- //# 2. number_of_redirectionse: The maximum number of redirections YTS permits
- //# 3. post_copy_size: The maximum POST data size YTS permits to copy
- //#
- //##############################################################################
- MgmtByte redirection_enabled;
- MgmtInt number_of_redirections;
- MgmtInt post_copy_size;
- //////////////////////////////////////////////////////////////////
- // Allow special handling of Accept* headers to be disabled to //
- // avoid unnecessary creation of alternates //
- //////////////////////////////////////////////////////////////////
- MgmtByte ignore_accept_mismatch;
- MgmtByte ignore_accept_language_mismatch;
- MgmtByte ignore_accept_encoding_mismatch;
- MgmtByte ignore_accept_charset_mismatch;
- ////////////////////////////////
- // Optimize gzip alternates //
- ////////////////////////////////
- MgmtByte normalize_ae_gzip;
- OverridableHttpConfigParams oride;
- private:
- /////////////////////////////////////
- // operator = and copy constructor //
- /////////////////////////////////////
- HttpConfigParams(const HttpConfigParams &);
- HttpConfigParams & operator =(const HttpConfigParams &);
- };
- /////////////////////////////////////////////////////////////
- //
- // class HttpUserAgent_RegxEntry
- //
- // configuration entry for specific User-Agent
- // Created at startup time only and never changed
- // The main purpose of the User-Agent filtering is to find "bad" user agents
- // and modify Accept-Encoding to prevent compression for such "bad" guys
- /////////////////////////////////////////////////////////////
- class HttpUserAgent_RegxEntry
- {
- public:
- typedef enum
- { // for more details, please see comments in "ae_ua.config" file
- STRTYPE_UNKNOWN = 0,
- STRTYPE_SUBSTR_CASE, /* .substring, .string */
- STRTYPE_SUBSTR_NCASE, /* .substring_ncase, .string_ncase */
- STRTYPE_REGEXP /* .regexp POSIX regular expression */
- } StrType;
- HttpUserAgent_RegxEntry *next;
- int user_agent_str_size;
- char *user_agent_str;
- bool regx_valid;
- StrType stype;
- pcre* regx;
- HttpUserAgent_RegxEntry();
- ~HttpUserAgent_RegxEntry();
- bool create(char *refexp_str = NULL, char *errmsgbuf = NULL, int errmsgbuf_size = 0);
- };
- /////////////////////////////////////////////////////////////
- //
- // class HttpConfig
- //
- /////////////////////////////////////////////////////////////
- class HttpConfig
- {
- public:
- static int init_aeua_filter(char *config_fname);
- static void startup();
- static void reconfigure();
- inkcoreapi static HttpConfigParams *acquire();
- inkcoreapi static void release(HttpConfigParams * params);
- // dump
- static void dump_config();
- // parse ssl ports configuration string
- static HttpConfigPortRange *parse_ports_list(char *ports_str);
- // parse DNS URL expansions string
- static char **parse_url_expansions(char *url_expansions_str, int *num_expansions);
- static void *cluster_delta_cb(void *opaque_token, char *data_raw, int data_len);
- public:
- static int m_id;
- static HttpConfigParams m_master;
- static HttpUserAgent_RegxEntry *user_agent_list;
- };
- // DI's request to disable ICP on the fly
- extern volatile int32_t icp_dynamic_enabled;
- /////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////
- //
- // inline functions
- //
- /////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////
- inline
- HttpConfigParams::HttpConfigParams()
- : proxy_hostname(0),
- proxy_hostname_len(0),
- server_max_connections(0),
- origin_min_keep_alive_connections(0),
- parent_proxy_routing_enable(0),
- disable_ssl_parenting(0),
- enable_url_expandomatic(0),
- no_dns_forward_to_parent(0),
- uncacheable_requests_bypass_parent(1),
- no_origin_server_dns(0),
- use_client_target_addr(0),
- use_client_source_port(0),
- proxy_request_via_string(0),
- proxy_request_via_string_len(0),
- proxy_response_via_string(0),
- proxy_response_via_string_len(0),
- wuts_enabled(0),
- log_spider_codes(0),
- url_expansions_string(0),
- url_expansions(0),
- num_url_expansions(0),
- proxy_server_port(0),
- proxy_server_other_ports(0),
- session_auth_cache_keep_alive_enabled(0),
- origin_server_pipeline(0),
- user_agent_pipeline(0),
- transaction_active_timeout_in(0),
- accept_no_activity_timeout(0),
- background_fill_active_timeout(0),
- background_fill_threshold(0.0),
- parent_connect_attempts(0),
- per_parent_connect_attempts(0),
- parent_connect_timeout(0),
- anonymize_other_header_list(NULL),
- global_user_agent_header(NULL),
- global_user_agent_header_size(0),
- insert_age_in_response(1),
- avoid_content_spoofing(1),
- enable_http_stats(1),
- icp_enabled(0),
- stale_icp_enabled(0),
- cache_vary_default_text(0),
- cache_vary_default_images(0),
- cache_vary_default_other(0),
- max_cache_open_write_retries(0),
- cache_enable_default_vary_headers(0),
- cache_when_to_add_no_cache_to_msie_requests(0),
- connect_ports_string(0),
- connect_ports(0),
- request_hdr_max_size(0),
- response_hdr_max_size(0),
- push_method_enabled(0),
- referer_filter_enabled(0),
- referer_format_redirect(0),
- accept_encoding_filter_enabled(0),
- client_transparency_enabled(0),
- server_transparency_enabled(0),
- reverse_proxy_enabled(0),
- url_remap_required(0),
- negative_revalidating_enabled(0),
- negative_revalidating_lifetime(0),
- record_cop_page(0),
- record_tcp_mem_hit(0),
- errors_log_error_pages(0),
- default_buffer_size_index(0),
- default_buffer_water_mark(0),
- enable_http_info(0),
- cluster_time_delta(0),
- srv_enabled(0),
- redirection_enabled(1),
- number_of_redirections(0),
- post_copy_size(2048),
- ignore_accept_mismatch(0),
- ignore_accept_language_mismatch(0),
- ignore_accept_encoding_mismatch(0),
- ignore_accept_charset_mismatch(0),
- normalize_ae_gzip(1)
- {
- }
- inline
- HttpConfigParams::~HttpConfigParams()
- {
- ats_free(proxy_hostname);
- ats_free(proxy_request_via_string);
- ats_free(proxy_response_via_string);
- ats_free(url_expansions_string);
- ats_free(proxy_server_other_ports);
- ats_free(anonymize_other_header_list);
- ats_free(global_user_agent_header);
- ats_free(oride.proxy_response_server_string);
- ats_free(cache_vary_default_text);
- ats_free(cache_vary_default_images);
- ats_free(cache_vary_default_other);
- ats_free(connect_ports_string);
- ats_free(reverse_proxy_no_host_redirect);
- ats_free(url_expansions);
- if (connect_ports) {
- delete connect_ports;
- }
- }
- #endif /* #ifndef _HttpConfig_h_ */