Use case-insensitive comparison for header names in *_header_access and *_header_replace directives. === modified file 'src/HttpHeaderTools.h' --- src/HttpHeaderTools.h 2012-07-13 11:53:18 +0000 +++ src/HttpHeaderTools.h 2013-05-15 17:01:55 +0000 @@ -1,12 +1,18 @@ #ifndef SQUID_HTTPHEADERTOOLS_H #define SQUID_HTTPHEADERTOOLS_H +#if HAVE_FUNCTIONAL +#include +#endif #if HAVE_MAP #include #endif #if HAVE_STRING #include #endif +#if HAVE_STRINGS_H +#include +#endif class acl_access; struct _header_mangler { @@ -39,8 +45,17 @@ void dumpReplacement(StoreEntry *entry, const char *optionName) const; private: + /// Case-insensitive std::string comparison functor. + /// Fast version recommended by Meyers' "Effective STL" for ASCII c-strings. + class NoCaseLess: public std::binary_function { + public: + bool operator()(const std::string &lhs, const std::string &rhs) const { + return strcasecmp(lhs.c_str(), rhs.c_str()) < 0; + } + }; + /// a name:mangler map; optimize: use unordered map or some such - typedef std::map ManglersByName; + typedef std::map ManglersByName; /// one mangler for each known header header_mangler known[HDR_ENUM_END];