mirror of
				https://github.com/PurpleI2P/i2pd.git
				synced 2025-11-04 08:30:46 +00:00 
			
		
		
		
	read persistent ETags
This commit is contained in:
		
							parent
							
								
									74efdb95e8
								
							
						
					
					
						commit
						84ccca0e98
					
				
					 2 changed files with 32 additions and 1 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue