diff options
Diffstat (limited to 'Swiften/VCards')
-rw-r--r-- | Swiften/VCards/UnitTest/VCardManagerTest.cpp | 8 | ||||
-rw-r--r-- | Swiften/VCards/VCardManager.cpp | 9 | ||||
-rw-r--r-- | Swiften/VCards/VCardManager.h | 9 | ||||
-rw-r--r-- | Swiften/VCards/VCardMemoryStorage.h | 17 | ||||
-rw-r--r-- | Swiften/VCards/VCardStorage.cpp | 9 | ||||
-rw-r--r-- | Swiften/VCards/VCardStorage.h | 13 |
6 files changed, 50 insertions, 15 deletions
diff --git a/Swiften/VCards/UnitTest/VCardManagerTest.cpp b/Swiften/VCards/UnitTest/VCardManagerTest.cpp index eecec7b..9f1c8bb 100644 --- a/Swiften/VCards/UnitTest/VCardManagerTest.cpp +++ b/Swiften/VCards/UnitTest/VCardManagerTest.cpp @@ -1,4 +1,4 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2013 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. @@ -17,4 +17,6 @@ #include <Swiften/Queries/IQRouter.h> #include <Swiften/Client/DummyStanzaChannel.h> +#include <Swiften/Crypto/CryptoProvider.h> +#include <Swiften/Crypto/PlatformCryptoProvider.h> using namespace Swift; @@ -37,7 +39,8 @@ class VCardManagerTest : public CppUnit::TestFixture { void setUp() { ownJID = JID("baz@fum.com/dum"); + crypto = boost::shared_ptr<CryptoProvider>(PlatformCryptoProvider::create()); stanzaChannel = new DummyStanzaChannel(); iqRouter = new IQRouter(stanzaChannel); - vcardStorage = new VCardMemoryStorage(); + vcardStorage = new VCardMemoryStorage(crypto.get()); } @@ -202,4 +205,5 @@ class VCardManagerTest : public CppUnit::TestFixture { std::vector< std::pair<JID, VCard::ref> > changes; std::vector<VCard::ref> ownChanges; + boost::shared_ptr<CryptoProvider> crypto; }; diff --git a/Swiften/VCards/VCardManager.cpp b/Swiften/VCards/VCardManager.cpp index 52447a1..5a65dcd 100644 --- a/Swiften/VCards/VCardManager.cpp +++ b/Swiften/VCards/VCardManager.cpp @@ -1,4 +1,4 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. @@ -9,4 +9,5 @@ #include <boost/bind.hpp> +#include <Swiften/Base/Log.h> #include <Swiften/JID/JID.h> #include <Swiften/VCards/VCardStorage.h> @@ -26,7 +27,9 @@ VCard::ref VCardManager::getVCard(const JID& jid) const { } -VCard::ref VCardManager::getVCardAndRequestWhenNeeded(const JID& jid) { +VCard::ref VCardManager::getVCardAndRequestWhenNeeded(const JID& jid, const boost::posix_time::time_duration& allowedAge) { VCard::ref vcard = storage->getVCard(jid); - if (!vcard) { + boost::posix_time::ptime vcardFetchedTime = storage->getVCardWriteTime(jid); + bool vcardTooOld = vcard && (vcardFetchedTime.is_special() || ((boost::posix_time::second_clock::universal_time() - vcardFetchedTime) > allowedAge)); + if (!vcard || vcardTooOld) { requestVCard(jid); } diff --git a/Swiften/VCards/VCardManager.h b/Swiften/VCards/VCardManager.h index 29fe32c..78e0f3e 100644 --- a/Swiften/VCards/VCardManager.h +++ b/Swiften/VCards/VCardManager.h @@ -1,4 +1,4 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. @@ -9,4 +9,7 @@ #include <set> +#include <boost/date_time/posix_time/posix_time.hpp> + +#include <Swiften/Base/API.h> #include <Swiften/JID/JID.h> #include <Swiften/Elements/VCard.h> @@ -20,5 +23,5 @@ namespace Swift { class IQRouter; - class VCardManager : public boost::bsignals::trackable { + class SWIFTEN_API VCardManager : public boost::bsignals::trackable { public: VCardManager(const JID& ownJID, IQRouter* iqRouter, VCardStorage* vcardStorage); @@ -26,5 +29,5 @@ namespace Swift { VCard::ref getVCard(const JID& jid) const; - VCard::ref getVCardAndRequestWhenNeeded(const JID& jid); + VCard::ref getVCardAndRequestWhenNeeded(const JID& jid, const boost::posix_time::time_duration& allowedAge = boost::posix_time::time_duration(boost::date_time::pos_infin)); void requestVCard(const JID& jid); void requestOwnVCard(); diff --git a/Swiften/VCards/VCardMemoryStorage.h b/Swiften/VCards/VCardMemoryStorage.h index ade9c89..f538fc1 100644 --- a/Swiften/VCards/VCardMemoryStorage.h +++ b/Swiften/VCards/VCardMemoryStorage.h @@ -1,4 +1,4 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. @@ -8,4 +8,5 @@ #include <boost/shared_ptr.hpp> + #include <map> @@ -16,5 +17,5 @@ namespace Swift { class VCardMemoryStorage : public VCardStorage { public: - VCardMemoryStorage() {} + VCardMemoryStorage(CryptoProvider* crypto) : VCardStorage(crypto) {} virtual VCard::ref getVCard(const JID& jid) const { @@ -28,11 +29,23 @@ namespace Swift { } + virtual boost::posix_time::ptime getVCardWriteTime(const JID& jid) const { + if (vcardWriteTimes.find(jid) == vcardWriteTimes.end()) { + return boost::posix_time::ptime(); + } + else { + return vcardWriteTimes.at(jid); + } + } + virtual void setVCard(const JID& jid, VCard::ref v) { vcards[jid] = v; + vcardWriteTimes[jid] = boost::posix_time::second_clock::universal_time(); } private: typedef std::map<JID, VCard::ref> VCardMap; + typedef std::map<JID, boost::posix_time::ptime> VCardWriteTimeMap; VCardMap vcards; + VCardWriteTimeMap vcardWriteTimes; }; } diff --git a/Swiften/VCards/VCardStorage.cpp b/Swiften/VCards/VCardStorage.cpp index 900f1e5..fefea83 100644 --- a/Swiften/VCards/VCardStorage.cpp +++ b/Swiften/VCards/VCardStorage.cpp @@ -1,4 +1,4 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2013 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. @@ -8,8 +8,11 @@ #include <Swiften/StringCodecs/Hexify.h> -#include <Swiften/StringCodecs/SHA1.h> +#include <Swiften/Crypto/CryptoProvider.h> namespace Swift { +VCardStorage::VCardStorage(CryptoProvider* crypto) : crypto(crypto) { +} + VCardStorage::~VCardStorage() { } @@ -18,5 +21,5 @@ std::string VCardStorage::getPhotoHash(const JID& jid) const { VCard::ref vCard = getVCard(jid); if (vCard && !vCard->getPhoto().empty()) { - return Hexify::hexify(SHA1::getHash(vCard->getPhoto())); + return Hexify::hexify(crypto->getSHA1Hash(vCard->getPhoto())); } else { diff --git a/Swiften/VCards/VCardStorage.h b/Swiften/VCards/VCardStorage.h index 977a40c..e6c84f4 100644 --- a/Swiften/VCards/VCardStorage.h +++ b/Swiften/VCards/VCardStorage.h @@ -1,4 +1,4 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. @@ -8,19 +8,28 @@ #include <string> + #include <boost/shared_ptr.hpp> +#include <boost/date_time/posix_time/posix_time.hpp> +#include <Swiften/Base/API.h> #include <Swiften/Elements/VCard.h> namespace Swift { class JID; + class CryptoProvider; - class VCardStorage { + class SWIFTEN_API VCardStorage { public: + VCardStorage(CryptoProvider*); virtual ~VCardStorage(); virtual VCard::ref getVCard(const JID& jid) const = 0; + virtual boost::posix_time::ptime getVCardWriteTime(const JID& jid) const = 0; virtual void setVCard(const JID&, VCard::ref) = 0; virtual std::string getPhotoHash(const JID&) const; + + private: + CryptoProvider* crypto; }; } |