Page Speed Optimization Libraries  1.4.26.1
net/instaweb/http/public/headers.h
Go to the documentation of this file.
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_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines