Commit 54a37315 authored by Daniel Moraes's avatar Daniel Moraes Committed by octal

Add support for case insensitive headers.

parent 11c248e8
......@@ -6,6 +6,8 @@
#pragma once
#include <functional>
#include <algorithm>
#include <unordered_map>
#include <vector>
#include <memory>
......@@ -16,6 +18,21 @@ namespace Pistache {
namespace Http {
namespace Header {
std::string
toLowercase(std::string str);
struct LowercaseHash {
size_t operator()(const std::string& key) const {
return std::hash<std::string>{}(toLowercase(key));
}
};
struct LowercaseEqual {
bool operator()(const std::string& left, const std::string& right) const {
return toLowercase(left) == toLowercase(right);
}
};
class Collection {
public:
......@@ -94,7 +111,12 @@ public:
private:
std::pair<bool, std::shared_ptr<Header>> getImpl(const std::string& name) const;
std::unordered_map<std::string, std::shared_ptr<Header>> headers;
std::unordered_map<
std::string,
std::shared_ptr<Header>,
LowercaseHash,
LowercaseEqual
> headers;
std::unordered_map<std::string, Raw> rawHeaders;
};
......
......@@ -16,7 +16,12 @@ namespace Http {
namespace Header {
namespace {
std::unordered_map<std::string, Registry::RegistryFunc> registry;
std::unordered_map<
std::string,
Registry::RegistryFunc,
LowercaseHash,
LowercaseEqual
> registry;
}
RegisterHeader(Accept);
......@@ -35,6 +40,12 @@ RegisterHeader(Location);
RegisterHeader(Server);
RegisterHeader(UserAgent);
std::string
toLowercase(std::string str) {
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
return str;
}
void
Registry::registerHeader(std::string name, Registry::RegistryFunc func)
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment