mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-02 11:04:00 +01:00
read persistent ETags
This commit is contained in:
parent
74efdb95e8
commit
84ccca0e98
|
@ -37,6 +37,8 @@ namespace client
|
||||||
int Save (const std::map<std::string, i2p::data::IdentHash>& addresses);
|
int Save (const std::map<std::string, i2p::data::IdentHash>& addresses);
|
||||||
|
|
||||||
void SaveEtag (const i2p::data::IdentHash& subsciption, const std::string& etag, const std::string& lastModified);
|
void SaveEtag (const i2p::data::IdentHash& subsciption, const std::string& etag, const std::string& lastModified);
|
||||||
|
bool GetEtag (const i2p::data::IdentHash& subscription, std::string& etag, std::string& lastModified);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bool AddressBookFilesystemStorage::Init()
|
bool AddressBookFilesystemStorage::Init()
|
||||||
|
@ -164,6 +166,17 @@ namespace client
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AddressBookFilesystemStorage::GetEtag (const i2p::data::IdentHash& subscription, std::string& etag, std::string& lastModified)
|
||||||
|
{
|
||||||
|
std::string fname = etagsPath + i2p::fs::dirSep + subscription.ToBase32 () + ".txt";
|
||||||
|
std::ifstream f (fname, std::ofstream::in);
|
||||||
|
if (!f || f.eof ()) return false;
|
||||||
|
std::getline (f, etag);
|
||||||
|
if (f.eof ()) return false;
|
||||||
|
std::getline (f, lastModified);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------
|
//---------------------------------------------------------------------
|
||||||
AddressBook::AddressBook (): m_Storage(new AddressBookFilesystemStorage), m_IsLoaded (false), m_IsDownloading (false),
|
AddressBook::AddressBook (): m_Storage(new AddressBookFilesystemStorage), m_IsLoaded (false), m_IsDownloading (false),
|
||||||
m_DefaultSubscription (nullptr), m_SubscriptionsUpdateTimer (nullptr)
|
m_DefaultSubscription (nullptr), m_SubscriptionsUpdateTimer (nullptr)
|
||||||
|
@ -355,6 +368,14 @@ namespace client
|
||||||
LogPrint (eLogError, "Addressbook: subscriptions already loaded");
|
LogPrint (eLogError, "Addressbook: subscriptions already loaded");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AddressBook::GetEtag (const i2p::data::IdentHash& subscription, std::string& etag, std::string& lastModified)
|
||||||
|
{
|
||||||
|
if (m_Storage)
|
||||||
|
return m_Storage->GetEtag (subscription, etag, lastModified);
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void AddressBook::DownloadComplete (bool success, const i2p::data::IdentHash& subscription, const std::string& etag, const std::string& lastModified)
|
void AddressBook::DownloadComplete (bool success, const i2p::data::IdentHash& subscription, const std::string& etag, const std::string& lastModified)
|
||||||
{
|
{
|
||||||
m_IsDownloading = false;
|
m_IsDownloading = false;
|
||||||
|
@ -457,6 +478,12 @@ namespace client
|
||||||
i2p::data::IdentHash ident;
|
i2p::data::IdentHash ident;
|
||||||
if (m_Book.GetIdentHash (u.host_, ident))
|
if (m_Book.GetIdentHash (u.host_, ident))
|
||||||
{
|
{
|
||||||
|
if (!m_Etag.length ())
|
||||||
|
{
|
||||||
|
// load ETag
|
||||||
|
m_Book.GetEtag (ident, m_Etag, m_LastModified);
|
||||||
|
LogPrint (eLogInfo, "Addressbook: set ", m_Link, " ETag: ", m_Etag, " Last-Modified: ", m_LastModified);
|
||||||
|
}
|
||||||
std::condition_variable newDataReceived;
|
std::condition_variable newDataReceived;
|
||||||
std::mutex newDataReceivedMutex;
|
std::mutex newDataReceivedMutex;
|
||||||
auto leaseSet = i2p::client::context.GetSharedLocalDestination ()->FindLeaseSet (ident);
|
auto leaseSet = i2p::client::context.GetSharedLocalDestination ()->FindLeaseSet (ident);
|
||||||
|
@ -548,7 +575,7 @@ namespace client
|
||||||
!header.compare (colon + 1, std::string::npos, "x-i2p-gzip");
|
!header.compare (colon + 1, std::string::npos, "x-i2p-gzip");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LogPrint (eLogInfo, "Addressbook: ", m_Link, " ETag: ", m_Etag, " Last-Modified: ", m_LastModified);
|
LogPrint (eLogInfo, "Addressbook: received ", m_Link, " ETag: ", m_Etag, " Last-Modified: ", m_LastModified);
|
||||||
if (!response.eof ())
|
if (!response.eof ())
|
||||||
{
|
{
|
||||||
success = true;
|
success = true;
|
||||||
|
|
|
@ -40,6 +40,7 @@ namespace client
|
||||||
virtual int Save (const std::map<std::string, i2p::data::IdentHash>& addresses) = 0;
|
virtual int Save (const std::map<std::string, i2p::data::IdentHash>& addresses) = 0;
|
||||||
|
|
||||||
virtual void SaveEtag (const i2p::data::IdentHash& subscription, const std::string& etag, const std::string& lastModified) = 0;
|
virtual void SaveEtag (const i2p::data::IdentHash& subscription, const std::string& etag, const std::string& lastModified) = 0;
|
||||||
|
virtual bool GetEtag (const i2p::data::IdentHash& subscription, std::string& etag, std::string& lastModified) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AddressBookSubscription;
|
class AddressBookSubscription;
|
||||||
|
@ -62,6 +63,9 @@ namespace client
|
||||||
//This method returns the ".b32.i2p" address
|
//This method returns the ".b32.i2p" address
|
||||||
std::string ToAddress(const i2p::data::IdentHash& ident) { return GetB32Address(ident); }
|
std::string ToAddress(const i2p::data::IdentHash& ident) { return GetB32Address(ident); }
|
||||||
std::string ToAddress(std::shared_ptr<const i2p::data::IdentityEx> ident) { return ToAddress(ident->GetIdentHash ()); }
|
std::string ToAddress(std::shared_ptr<const i2p::data::IdentityEx> ident) { return ToAddress(ident->GetIdentHash ()); }
|
||||||
|
|
||||||
|
bool GetEtag (const i2p::data::IdentHash& subscription, std::string& etag, std::string& lastModified);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void StartSubscriptions ();
|
void StartSubscriptions ();
|
||||||
|
|
Loading…
Reference in a new issue