#ifndef _H_HEADERMAP
#define _H_HEADERMAP
#include <string>
#include <map>
namespace Security {
class HeaderMap {
static const int maxKeyLength = 80;
typedef std::map<std::string, std::string> Map;
public:
HeaderMap() { }
virtual ~HeaderMap() { }
virtual void merge(std::string key, std::string &old, std::string newValue);
void add(const char *key, const char *value);
void add(const char *line); void remove(const char *key);
const char *find(const char *key, const char *def = NULL) const;
std::string &operator [] (const char *key);
typedef Map::const_iterator ConstIterator;
ConstIterator begin() const { return mMap.begin(); }
ConstIterator end() const { return mMap.end(); }
typedef Map::const_iterator Iterator;
Iterator begin() { return mMap.begin(); }
Iterator end() { return mMap.end(); }
std::string collect(const char *lineEnding = "\r\n") const;
size_t collectLength(const char *lineEnding = "\r\n") const;
private:
struct CanonicalKey {
CanonicalKey(const char *key, char end = '\0');
operator const char *() const { return mValue; }
operator std::string () const { return mValue; }
private:
char mValue[maxKeyLength];
};
void add(const CanonicalKey &key, const char *value);
private:
Map mMap; };
}
#endif _H_HEADERMAP