00001
00014
00016
00017 #ifndef NET_INSTAWEB_HTTP_PUBLIC_HEADERS_H_
00018 #define NET_INSTAWEB_HTTP_PUBLIC_HEADERS_H_
00019
00020 #include "base/scoped_ptr.h"
00021 #include "net/instaweb/util/public/basictypes.h"
00022 #include "net/instaweb/util/public/string.h"
00023 #include "net/instaweb/util/public/string_util.h"
00024
00025 namespace net_instaweb {
00026
00027 class MessageHandler;
00028 class StringMultiMapInsensitive;
00029 class Writer;
00030
00032 template<class Proto> class Headers {
00033 public:
00034 Headers();
00035 virtual ~Headers();
00036
00037 virtual void Clear();
00038
00039 int major_version() const;
00040 bool has_major_version() const;
00041 int minor_version() const;
00042 void set_major_version(int major_version);
00043 void set_minor_version(int major_version);
00044
00046 int NumAttributes() const;
00047 const GoogleString& Name(int i) const;
00048 const GoogleString& Value(int i) const;
00049
00060 bool Lookup(const StringPiece& name, ConstStringStarVector* values) const;
00061
00064 const char* Lookup1(const StringPiece& name) const;
00065
00067 bool Has(const StringPiece& name) const;
00068
00070 bool HasValue(const StringPiece& name, const StringPiece& value) const;
00071
00073 int NumAttributeNames() const;
00074
00082 void RemoveCookie(const StringPiece& cookie_name);
00083
00085 virtual void Add(const StringPiece& name, const StringPiece& value);
00086
00097 virtual bool Remove(const StringPiece& name, const StringPiece& value);
00098
00100 virtual bool RemoveAll(const StringPiece& name);
00101
00104 virtual bool RemoveAllFromSet(const StringSetInsensitive& names);
00105
00107 virtual void RemoveAllWithPrefix(const StringPiece& prefix);
00108
00111 virtual void Replace(const StringPiece& name, const StringPiece& value);
00112
00117 virtual void UpdateFrom(const Headers<Proto>& other);
00118
00120 virtual bool WriteAsBinary(Writer* writer, MessageHandler* message_handler);
00121
00123 virtual bool ReadFromBinary(const StringPiece& buf, MessageHandler* handler);
00124
00126 virtual bool WriteAsHttp(Writer* writer, MessageHandler* handler) const;
00127
00128 protected:
00129 void PopulateMap() const;
00130
00136 mutable scoped_ptr<StringMultiMapInsensitive> map_;
00137 scoped_ptr<Proto> proto_;
00138
00139 private:
00140 bool IsCommaSeparatedField(const StringPiece& name) const;
00141
00149 void AddToMap(const StringPiece& name, const StringPiece& value) const;
00150
00151
00152 DISALLOW_COPY_AND_ASSIGN(Headers);
00153 };
00154
00155 }
00156
00157 #endif ///< NET_INSTAWEB_HTTP_PUBLIC_HEADERS_H_