| /** @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" |
| |
| #undef MgmtInt |
| #undef MgmtFloat |
| #define MgmtInt RecInt |
| #define MgmtFloat RecFloat |
| |
| |
| #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_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, (int) 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), negative_caching_lifetime(0), cache_when_to_revalidate(0), |
| keep_alive_enabled_in(0), keep_alive_enabled_out(0), keep_alive_post_out(0), |
| sock_recv_buffer_size_out(0), sock_send_buffer_size_out(0), sock_option_flag_out(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), |
| append_xforwards_header(0), 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), |
| 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), |
| 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), |
| doc_in_cache_skip_dns(1), |
| |
| // 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), |
| outgoing_ip_to_bind_saddr(0) |
| { } |
| |
| // IMPORTANT: All MgmtInt configs should come before any other 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; |
| MgmtInt negative_caching_lifetime; |
| |
| 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 |
| |
| /////////////////////////////////////// |
| // origin server connection settings // |
| /////////////////////////////////////// |
| MgmtInt sock_recv_buffer_size_out; |
| MgmtInt sock_send_buffer_size_out; |
| MgmtInt sock_option_flag_out; |
| |
| 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 append_xforwards_header; |
| |
| 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; |
| |
| ///////////////////// |
| // 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 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 |
| |
| ////////////////////// |
| // DOC IN CACHE NO DNS// |
| ////////////////////// |
| MgmtByte doc_in_cache_skip_dns; |
| |
| // 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; |
| |
| //////////////////////// |
| // Source IP // |
| //////////////////////// |
| unsigned int outgoing_ip_to_bind_saddr; // This is kinda ugly for now, whatever ... |
| }; |
| |
| |
| ///////////////////////////////////////////////////////////// |
| // |
| // 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; |
| |
| char *incoming_ip_to_bind; |
| unsigned int incoming_ip_to_bind_saddr; |
| |
| char *outgoing_ip_to_bind; |
| |
| 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 verbose_via_string; |
| |
| 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 share_server_sessions; |
| MgmtInt keep_alive_no_activity_timeout_out; |
| 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; |
| |
| ////////////////////////// |
| // HTTP Quick filtering // |
| ////////////////////////// |
| MgmtInt quick_filter_mask; |
| |
| ////////////////// |
| // 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), |
| incoming_ip_to_bind(0), |
| incoming_ip_to_bind_saddr(0), |
| outgoing_ip_to_bind(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), |
| verbose_via_string(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), |
| share_server_sessions(0), |
| keep_alive_no_activity_timeout_out(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), |
| quick_filter_mask(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() |
| { |
| xfree(proxy_hostname); |
| xfree(proxy_request_via_string); |
| xfree(proxy_response_via_string); |
| xfree(url_expansions_string); |
| xfree(proxy_server_other_ports); |
| xfree(anonymize_other_header_list); |
| xfree(global_user_agent_header); |
| xfree(oride.proxy_response_server_string); |
| xfree(cache_vary_default_text); |
| xfree(cache_vary_default_images); |
| xfree(cache_vary_default_other); |
| xfree(connect_ports_string); |
| xfree(reverse_proxy_no_host_redirect); |
| |
| if (connect_ports) { |
| delete connect_ports; |
| } |
| |
| if (url_expansions) { |
| xfree(url_expansions); |
| } |
| } |
| #endif /* #ifndef _HttpConfig_h_ */ |