diff --git a/libi2pd/Garlic.h b/libi2pd/Garlic.h index fa37bf66..e3b090cb 100644 --- a/libi2pd/Garlic.h +++ b/libi2pd/Garlic.h @@ -2,7 +2,7 @@ #define GARLIC_H__ #include <inttypes.h> -#include <map> +#include <unordered_map> #include <list> #include <string> #include <thread> @@ -252,14 +252,14 @@ namespace garlic // outgoing sessions int m_NumTags; std::mutex m_SessionsMutex; - std::map<i2p::data::IdentHash, ElGamalAESSessionPtr> m_Sessions; - std::map<i2p::data::Tag<32>, ECIESX25519AEADRatchetSessionPtr> m_ECIESx25519Sessions; // static key -> session + std::unordered_map<i2p::data::IdentHash, ElGamalAESSessionPtr> m_Sessions; + std::unordered_map<i2p::data::Tag<32>, ECIESX25519AEADRatchetSessionPtr> m_ECIESx25519Sessions; // static key -> session // incoming - std::map<SessionTag, std::shared_ptr<AESDecryption> > m_Tags; - std::map<uint64_t, ECIESX25519AEADRatchetSessionPtr> m_ECIESx25519Tags; // session tag -> session + std::unordered_map<SessionTag, std::shared_ptr<AESDecryption> > m_Tags; + std::unordered_map<uint64_t, ECIESX25519AEADRatchetSessionPtr> m_ECIESx25519Tags; // session tag -> session // DeliveryStatus std::mutex m_DeliveryStatusSessionsMutex; - std::map<uint32_t, ElGamalAESSessionPtr> m_DeliveryStatusSessions; // msgID -> session + std::unordered_map<uint32_t, ElGamalAESSessionPtr> m_DeliveryStatusSessions; // msgID -> session public: diff --git a/libi2pd/Tag.h b/libi2pd/Tag.h index 8af82241..010b160f 100644 --- a/libi2pd/Tag.h +++ b/libi2pd/Tag.h @@ -93,4 +93,16 @@ private: } // data } // i2p +namespace std +{ + // hash for std::unordered_map + template<size_t sz> struct hash<i2p::data::Tag<sz> > + { + size_t operator()(const i2p::data::Tag<sz>& s) const + { + return s.GetLL ()[0]; + } + }; +} + #endif /* TAG_H__ */