Page Speed Optimization Libraries
1.4.26.1
|
00001 // Copyright 2011 Google Inc. 00014 00016 00017 #ifndef NET_INSTAWEB_HTTP_PUBLIC_HEADERS_H_ 00018 #define NET_INSTAWEB_HTTP_PUBLIC_HEADERS_H_ 00019 00020 #include "net/instaweb/util/public/basictypes.h" 00021 #include "net/instaweb/util/public/proto_util.h" 00022 #include "net/instaweb/util/public/scoped_ptr.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 MessageHandler; 00029 class NameValue; 00030 class StringMultiMapInsensitive; 00031 class Writer; 00032 00034 template<class Proto> class Headers { 00035 public: 00036 Headers(); 00037 virtual ~Headers(); 00038 00039 virtual void Clear(); 00040 00041 int major_version() const; 00042 bool has_major_version() const; 00043 int minor_version() const; 00044 void set_major_version(int major_version); 00045 void set_minor_version(int major_version); 00046 00048 int NumAttributes() const; 00049 const GoogleString& Name(int i) const; 00050 const GoogleString& Value(int i) const; 00051 00062 bool Lookup(const StringPiece& name, ConstStringStarVector* values) const; 00063 00066 const char* Lookup1(const StringPiece& name) const; 00067 00069 bool Has(const StringPiece& name) const; 00070 00072 bool HasValue(const StringPiece& name, const StringPiece& value) const; 00073 00075 int NumAttributeNames() const; 00076 00084 void RemoveCookie(const StringPiece& cookie_name); 00085 00087 virtual void Add(const StringPiece& name, const StringPiece& value); 00088 00099 virtual bool Remove(const StringPiece& name, const StringPiece& value); 00100 00102 virtual bool RemoveAll(const StringPiece& name); 00103 00106 virtual bool RemoveAllFromSet(const StringSetInsensitive& names); 00107 00109 static void RemoveFromHeaders(const StringSetInsensitive& names, 00110 protobuf::RepeatedPtrField<NameValue>* headers); 00111 00113 virtual void RemoveAllWithPrefix(const StringPiece& prefix); 00114 00117 virtual void Replace(const StringPiece& name, const StringPiece& value); 00118 00123 virtual void UpdateFrom(const Headers<Proto>& other); 00124 00126 virtual bool WriteAsBinary(Writer* writer, MessageHandler* message_handler); 00127 00129 virtual bool ReadFromBinary(const StringPiece& buf, MessageHandler* handler); 00130 00132 virtual bool WriteAsHttp(Writer* writer, MessageHandler* handler) const; 00133 00134 protected: 00135 void PopulateMap() const; 00136 00142 mutable scoped_ptr<StringMultiMapInsensitive> map_; 00143 scoped_ptr<Proto> proto_; 00144 00145 private: 00146 bool IsCommaSeparatedField(const StringPiece& name) const; 00147 00155 void AddToMap(const StringPiece& name, const StringPiece& value) const; 00156 00157 00158 DISALLOW_COPY_AND_ASSIGN(Headers); 00159 }; 00160 00161 } 00162 00163 #endif ///< NET_INSTAWEB_HTTP_PUBLIC_HEADERS_H_