From d01e13c9dee53c3ab4faf70a215f4d1dcfed9e87 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Tue, 28 Mar 2017 22:36:44 +0200 Subject: MITM SSL Interception support using mbedtls --- src/lru.hh | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/lru.hh (limited to 'src/lru.hh') diff --git a/src/lru.hh b/src/lru.hh new file mode 100644 index 0000000..3279b35 --- /dev/null +++ b/src/lru.hh @@ -0,0 +1,70 @@ +// -*- mode: c++; c-basic-offset: 2; -*- + +#ifndef LRU_HH +#define LRU_HH + +#include +#include +#include + +template +class lru { +public: + lru(size_t size) + : size_(size) { + } + + bool empty() const { + return usage_.empty(); + } + + size_t size() const { + return usage_.size(); + } + + V* get(K const& key) { + auto it = data_.find(key); + if (it == data_.end()) return nullptr; + auto it2 = std::find(usage_.begin(), usage_.end(), key); + if (it2 != usage_.begin()) { + usage_.erase(it2); + usage_.push_front(key); + } + return &it->second; + } + + void insert(K const& key, V const& data) { + auto pair = data_.insert(std::make_pair(key, data)); + if (pair.second) { + usage_.push_front(key); + shrink_to_size(); + } else { + pair.first->second = data; + auto it = std::find(usage_.begin(), usage_.end(), key); + if (it != usage_.begin()) { + usage_.erase(it); + usage_.push_front(key); + } + } + } + + void erase(K const& key) { + if (data_.erase(key)) { + usage_.erase(std::find(usage_.begin(), usage_.end(), key)); + } + } + +private: + void shrink_to_size() { + if (usage_.size() > size_) { + data_.erase(usage_.back()); + usage_.pop_back(); + } + } + + size_t const size_; + std::deque usage_; + std::unordered_map data_; +}; + +#endif // LRU_HH -- cgit v1.2.3-70-g09d2