Page Speed Optimization Libraries  1.3.25.1
net/instaweb/apache/apache_config.h
Go to the documentation of this file.
00001 // Copyright 2010 Google Inc.
00016 
00017 #ifndef NET_INSTAWEB_APACHE_APACHE_CONFIG_H_
00018 #define NET_INSTAWEB_APACHE_APACHE_CONFIG_H_
00019 
00020 #include "net/instaweb/rewriter/public/rewrite_options.h"
00021 #include "net/instaweb/system/public/system_rewrite_options.h"
00022 #include "net/instaweb/util/public/basictypes.h"
00023 #include "net/instaweb/util/public/string.h"
00024 #include "net/instaweb/util/public/string_util.h"
00025 
00026 namespace net_instaweb {
00027 
00028 class Hasher;
00029 
00032 class ApacheConfig : public SystemRewriteOptions {
00033  public:
00034   enum RefererStatisticsOutputLevel {
00035     kFast,
00036     kSimple,
00037     kOrganized,
00038   };
00039 
00040   static bool ParseRefererStatisticsOutputLevel(
00041       const StringPiece& in, RefererStatisticsOutputLevel* out);
00042 
00043   static void Initialize();
00044   static void Terminate();
00045 
00046   explicit ApacheConfig(const StringPiece& dir);
00047   ApacheConfig();
00048   ~ApacheConfig() {}
00049 
00053   StringPiece description() const { return description_; }
00054   void set_description(const StringPiece& x) { x.CopyToString(&description_); }
00055 
00056   int64 slurp_flush_limit() const {
00057     return slurp_flush_limit_.value();
00058   }
00059   void set_slurp_flush_limit(int64 x) {
00060     set_option(x, &slurp_flush_limit_);
00061   }
00062   bool collect_referer_statistics() const {
00063     return collect_referer_statistics_.value();
00064   }
00065   void set_collect_referer_statistics(bool x) {
00066     set_option(x, &collect_referer_statistics_);
00067   }
00068   bool hash_referer_statistics() const {
00069     return hash_referer_statistics_.value();
00070   }
00071   void set_hash_referer_statistics(bool x) {
00072     set_option(x, &hash_referer_statistics_);
00073   }
00074   bool slurp_read_only() const {
00075     return slurp_read_only_.value();
00076   }
00077   void set_slurp_read_only(bool x) {
00078     set_option(x, &slurp_read_only_);
00079   }
00080   bool rate_limit_background_fetches() const {
00081     return rate_limit_background_fetches_.value();
00082   }
00083   RefererStatisticsOutputLevel referer_statistics_output_level() const {
00084     return referer_statistics_output_level_.value();
00085   }
00086   void set_referer_statistics_output_level(RefererStatisticsOutputLevel x) {
00087     set_option(x, &referer_statistics_output_level_);
00088   }
00089   const GoogleString& slurp_directory() const {
00090     return slurp_directory_.value();
00091   }
00092   void set_slurp_directory(GoogleString x) {
00093     set_option(x, &slurp_directory_);
00094   }
00095 
00099   bool test_proxy() const {
00100     return test_proxy_.value();
00101   }
00102   void set_test_proxy(bool x) {
00103     set_option(x, &test_proxy_);
00104   }
00105 
00113   GoogleString test_proxy_slurp() const {
00114     return test_proxy_slurp_.value();
00115   }
00116 
00118   bool slurping_enabled() const {
00119     return !slurp_directory().empty();
00120   }
00121 
00122   bool slurping_enabled_read_only() const {
00123     return slurping_enabled() && slurp_read_only();
00124   }
00125 
00126   bool experimental_fetch_from_mod_spdy() const {
00127     return experimental_fetch_from_mod_spdy_.value();
00128   }
00129 
00131   virtual ApacheConfig* Clone() const;
00132 
00135   static const ApacheConfig* DynamicCast(const RewriteOptions* instance);
00136   static ApacheConfig* DynamicCast(RewriteOptions* instance);
00137 
00138  protected:
00139   template<class T> class ApacheOption : public OptionTemplateBase<T> {
00140    public:
00141     ApacheOption() {}
00142 
00144     virtual bool SetFromString(const GoogleString& value_string) {
00145       T value;
00146       bool success = ApacheConfig::ParseFromString(value_string, &value);
00147       if (success) {
00148         this->set(value);
00149       }
00150       return success;
00151     }
00152 
00153     virtual GoogleString Signature(const Hasher* hasher) const {
00154       return ApacheConfig::OptionSignature(this->value(), hasher);
00155     }
00156 
00157     virtual GoogleString ToString() const {
00158       return ApacheConfig::ToString(this->value());
00159     }
00160 
00161    private:
00162     DISALLOW_COPY_AND_ASSIGN(ApacheOption);
00163   };
00164 
00165  private:
00168   static Properties* apache_properties_;
00169 
00176   template<class RewriteOptionsSubclass, class OptionClass>
00177   static void add_option(typename OptionClass::ValueType default_value,
00178                          OptionClass RewriteOptionsSubclass::*offset,
00179                          const char* id,
00180                          OptionEnum option_enum) {
00181     AddProperty(default_value, offset, id, option_enum, apache_properties_);
00182   }
00183 
00184   void InitializeSignaturesAndDefaults();
00185   static void AddProperties();
00186   void Init();
00187 
00188   static bool ParseFromString(const GoogleString& value_string,
00189                               RefererStatisticsOutputLevel* value) {
00190     return ParseRefererStatisticsOutputLevel(value_string, value);
00191   }
00192 
00193   static GoogleString OptionSignature(RefererStatisticsOutputLevel x,
00194                                       const Hasher* hasher) {
00197     return IntegerToString(x);
00198   }
00199 
00200   static GoogleString ToString(RefererStatisticsOutputLevel x) {
00203     return IntegerToString(x);
00204   }
00205 
00206   GoogleString description_;
00207 
00208   Option<GoogleString> slurp_directory_;
00209   Option<GoogleString> test_proxy_slurp_;
00210 
00211   ApacheOption<RefererStatisticsOutputLevel> referer_statistics_output_level_;
00212 
00213   Option<bool> collect_referer_statistics_;
00214   Option<bool> hash_referer_statistics_;
00215   Option<bool> slurp_read_only_;
00216   Option<bool> test_proxy_;
00217   Option<bool> rate_limit_background_fetches_;
00218   Option<bool> experimental_fetch_from_mod_spdy_;
00219 
00220   Option<int64> slurp_flush_limit_;
00221 
00222   DISALLOW_COPY_AND_ASSIGN(ApacheConfig);
00223 };
00224 
00225 }  
00226 
00227 #endif  ///< NET_INSTAWEB_APACHE_APACHE_CONFIG_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines