From b88f50bfec6dbcd169bb8285e7c42b93baf52b6b Mon Sep 17 00:00:00 2001 From: SomeDude Date: Sat, 19 Jul 2008 10:13:00 +0200 Subject: [PATCH] version 0.3.10 --- include/dbconversions.h | 1 + include/freenet/introductionpuzzleinserter.h | 3 ++ include/freenet/messagelistrequester.h | 1 + include/global.h | 2 +- src/dbconversions.cpp | 11 +++++++ src/dbmaintenancethread.cpp | 7 +++++ src/dbsetup.cpp | 20 +++++++++++-- src/freenet/introductionpuzzleinserter.cpp | 22 +++++++++++--- src/freenet/messagelistrequester.cpp | 44 ++++++++++++++++++++++++++++ src/freenet/messagerequester.cpp | 11 ++++++- src/http/pages/homepage.cpp | 34 ++++++++++++++------- src/message.cpp | 41 ++++++++++++++------------ src/optionssetup.cpp | 2 +- 13 files changed, 159 insertions(+), 40 deletions(-) diff --git a/include/dbconversions.h b/include/dbconversions.h index e850f58..8d090f4 100644 --- a/include/dbconversions.h +++ b/include/dbconversions.h @@ -12,6 +12,7 @@ void ConvertDB0108To0109(); void ConvertDB0109To0110(); void ConvertDB0110To0111(); void ConvertDB0111To0112(); +void ConvertDB0112To0113(); // TODO remove sometime after 0.1.17 void FixCapitalBoardNames(); diff --git a/include/freenet/introductionpuzzleinserter.h b/include/freenet/introductionpuzzleinserter.h index 3ac8d83..9cd88e3 100644 --- a/include/freenet/introductionpuzzleinserter.h +++ b/include/freenet/introductionpuzzleinserter.h @@ -3,6 +3,7 @@ #include "iindexinserter.h" +#include #include class IntroductionPuzzleInserter:public IIndexInserter @@ -20,6 +21,8 @@ private: const bool HandlePutFailed(FCPMessage &message); Poco::DateTime m_lastchecked; + int m_maxpuzzleinserts; + std::map m_lastinserted; }; diff --git a/include/freenet/messagelistrequester.h b/include/freenet/messagelistrequester.h index 106c2fe..e8b33c5 100644 --- a/include/freenet/messagelistrequester.h +++ b/include/freenet/messagelistrequester.h @@ -19,6 +19,7 @@ private: const bool HandleAllData(FCPMessage &message); const bool HandleGetFailed(FCPMessage &message); void GetBoardList(std::map &boards); + const bool CheckDateNotFuture(const std::string &datestr) const; bool m_localtrustoverrides; bool m_savetonewboards; diff --git a/include/global.h b/include/global.h index de4e04b..094d3f2 100644 --- a/include/global.h +++ b/include/global.h @@ -7,7 +7,7 @@ #define VERSION_MAJOR "0" #define VERSION_MINOR "3" -#define VERSION_RELEASE "9" +#define VERSION_RELEASE "10" #define FMS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_RELEASE typedef Poco::ScopedLock Guard; diff --git a/src/dbconversions.cpp b/src/dbconversions.cpp index 206ab64..1fa11cd 100644 --- a/src/dbconversions.cpp +++ b/src/dbconversions.cpp @@ -222,6 +222,17 @@ void ConvertDB0111To0112() db->Execute("UPDATE tblDBVersion SET Major=1, Minor=12;"); } +void ConvertDB0112To0113() +{ + // Add Tries and Key (for anonymous messages) to tblMessageRequests + SQLite3DB::DB *db=SQLite3DB::DB::Instance(); + + db->Execute("ALTER TABLE tblMessageRequests ADD COLUMN Tries INTEGER DEFAULT 0;"); + db->Execute("ALTER TABLE tblMessageRequests ADD COLUMN Key TEXT;"); + + db->Execute("UPDATE tblDBVersion SET Major=1, Minor=13;"); +} + void FixCapitalBoardNames() { SQLite3DB::DB *db=SQLite3DB::DB::Instance(); diff --git a/src/dbmaintenancethread.cpp b/src/dbmaintenancethread.cpp index bfee4fb..59bc010 100644 --- a/src/dbmaintenancethread.cpp +++ b/src/dbmaintenancethread.cpp @@ -258,6 +258,13 @@ void DBMaintenanceThread::Do1DayMaintenance() st.Bind(0,Poco::DateTimeFormatter::format(date,"%Y-%m-%d")); st.Step(); + // delete old message requests + date=Poco::Timestamp(); + date-=Poco::Timespan(90,0,0,0,0); + st=m_db->Prepare("DELETE FROM tblMessageRequests WHERE DayExecute("DELETE FROM tblIdentityTrust WHERE LocalIdentityID NOT IN (SELECT LocalIdentityID FROM tblLocalIdentity);"); m_db->Execute("DELETE FROM tblIdentityTrust WHERE IdentityID NOT IN (SELECT IdentityID FROM tblIdentity);"); diff --git a/src/dbsetup.cpp b/src/dbsetup.cpp index e6bdcf6..9b2ab00 100644 --- a/src/dbsetup.cpp +++ b/src/dbsetup.cpp @@ -97,13 +97,19 @@ void SetupDB() major=1; minor=12; } + if(major==1 && minor==12) + { + ConvertDB0112To0113(); + major=1; + minor=13; + } } else { - db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,12);"); + db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,13);"); } - db->Execute("UPDATE tblDBVersion SET Major=1, Minor=12;"); + db->Execute("UPDATE tblDBVersion SET Major=1, Minor=13;"); db->Execute("CREATE TABLE IF NOT EXISTS tblFMSVersion(\ Major INTEGER,\ @@ -181,6 +187,9 @@ void SetupDB() FoundSolution BOOL CHECK(FoundSolution IN('true','false')) DEFAULT 'false'\ );"); + /* + PurgeDate is not used yet + */ db->Execute("CREATE TABLE IF NOT EXISTS tblIdentity(\ IdentityID INTEGER PRIMARY KEY,\ PublicKey TEXT UNIQUE,\ @@ -319,12 +328,17 @@ void SetupDB() Found BOOL CHECK(Found IN('true','false')) DEFAULT 'false'\ );"); + /* + Key is for anonymous messages (future) + */ db->Execute("CREATE TABLE IF NOT EXISTS tblMessageRequests(\ IdentityID INTEGER,\ Day DATE,\ RequestIndex INTEGER,\ FromMessageList BOOL CHECK(FromMessageList IN('true','false')) DEFAULT 'false',\ - Found BOOL CHECK(Found IN('true','false')) DEFAULT 'false'\ + Found BOOL CHECK(Found IN('true','false')) DEFAULT 'false',\ + Tries INTEGER DEFAULT 0,\ + Key TEXT\ );"); db->Execute("CREATE UNIQUE INDEX IF NOT EXISTS idxMessageRequest ON tblMessageRequests(IdentityID,Day,RequestIndex);"); diff --git a/src/freenet/introductionpuzzleinserter.cpp b/src/freenet/introductionpuzzleinserter.cpp index 1fa13c0..b185b9d 100644 --- a/src/freenet/introductionpuzzleinserter.cpp +++ b/src/freenet/introductionpuzzleinserter.cpp @@ -33,8 +33,13 @@ void IntroductionPuzzleInserter::CheckForNeededInsert() while(!rs.AtEnd()) { - std::string localidentityidstr; + int localidentityid=0; + std::string localidentityidstr=""; Poco::DateTime now; + float minutesbetweeninserts=0; + minutesbetweeninserts=1440.0/(float)m_maxpuzzleinserts; + Poco::DateTime lastinsert=now; + lastinsert-=Poco::Timespan(0,0,minutesbetweeninserts,0,0); if(rs.GetField(0)) { @@ -47,7 +52,15 @@ void IntroductionPuzzleInserter::CheckForNeededInsert() // identity doesn't have any non-solved puzzles for today - start a new insert if(rs2.Empty()==true) { - StartInsert(rs.GetInt(0)); + if(m_lastinserted.find(rs.GetInt(0))==m_lastinserted.end() || m_lastinserted[rs.GetInt(0)]<=lastinsert) + { + StartInsert(rs.GetInt(0)); + m_lastinserted[rs.GetInt(0)]=now; + } + else + { + m_log->trace("IntroductionPuzzleInserter::CheckForNeededInsert waiting to insert puzzle for "+localidentityidstr); + } } rs.Next(); @@ -139,6 +152,7 @@ const bool IntroductionPuzzleInserter::HandlePutSuccessful(FCPMessage &message) void IntroductionPuzzleInserter::Initialize() { m_fcpuniquename="IntroductionPuzzleInserter"; + m_maxpuzzleinserts=50; } const bool IntroductionPuzzleInserter::StartInsert(const long &localidentityid) @@ -173,7 +187,7 @@ const bool IntroductionPuzzleInserter::StartInsert(const long &localidentityid) } StringFunctions::Convert(index,indexstr); - if(index<50) + if(indexQuery("SELECT PrivateKey,PublicKey FROM tblLocalIdentity WHERE LocalIdentityID="+idstring+";"); if(rs2.Empty()==false && rs2.GetField(0)!=NULL) @@ -241,7 +255,7 @@ const bool IntroductionPuzzleInserter::StartInsert(const long &localidentityid) } else { - m_log->warning("IntroductionPuzzleInserter::StartInsert already inserted 50 puzzles for "+idstring); + m_log->warning("IntroductionPuzzleInserter::StartInsert already inserted max puzzles for "+idstring); } return true; diff --git a/src/freenet/messagelistrequester.cpp b/src/freenet/messagelistrequester.cpp index 62d5bb2..24f70d1 100644 --- a/src/freenet/messagelistrequester.cpp +++ b/src/freenet/messagelistrequester.cpp @@ -19,6 +19,36 @@ MessageListRequester::MessageListRequester(FCPv2 *fcp):IIndexRequester(fcp Initialize(); } +const bool MessageListRequester::CheckDateNotFuture(const std::string &datestr) const +{ + std::vector dateparts; + int year=0; + int month=0; + int day=0; + Poco::DateTime today; + + StringFunctions::Split(datestr,"-",dateparts); + if(dateparts.size()==3) + { + StringFunctions::Convert(dateparts[0],year); + StringFunctions::Convert(dateparts[1],month); + StringFunctions::Convert(dateparts[2],day); + if(today.year()>year || (today.year()==year && today.month()>month) || (today.year()==year && today.month()==month && today.day()>=day)) + { + return true; + } + else + { + return false; + } + } + else + { + return false; + } + +} + void MessageListRequester::GetBoardList(std::map &boards) { SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, SaveReceivedMessages FROM tblBoard;"); @@ -56,6 +86,8 @@ const bool MessageListRequester::HandleAllData(FCPMessage &message) std::map boards; // list of boards and if we will save messages for that board or not bool addmessage=false; std::string boardsstr=""; + std::string datestr=""; + std::vector dateparts; GetBoardList(boards); @@ -115,6 +147,12 @@ const bool MessageListRequester::HandleAllData(FCPMessage &message) boardsstr+=(*j); } + if(CheckDateNotFuture(xml.GetDate(i))==false) + { + addmessage=false; + m_log->error("MessageListRequester::HandleAllData date for message is in future! "+xml.GetDate(i)); + } + if(addmessage==true) { st.Bind(0,identityid); @@ -167,6 +205,12 @@ const bool MessageListRequester::HandleAllData(FCPMessage &message) boardsstr+=(*j); } + if(CheckDateNotFuture(xml.GetExternalDate(i))==false) + { + addmessage=false; + m_log->error("MessageListRequester::HandleAllData date for external message is in future! "+xml.GetExternalDate(i)); + } + if(addmessage==true) { spk.Bind(0,xml.GetExternalIdentity(i)); diff --git a/src/freenet/messagerequester.cpp b/src/freenet/messagerequester.cpp index ea3ec85..c641c95 100644 --- a/src/freenet/messagerequester.cpp +++ b/src/freenet/messagerequester.cpp @@ -416,7 +416,9 @@ void MessageRequester::PopulateIDList() } sql+="AND tblIdentity.Name <> '' "; // sort by day descending - in case there is a bunch of messages on a day that keep timing out, we will eventually get to the next day and hopefully find messages there - sql+="ORDER BY tblMessageRequests.Day DESC "; + // secondary ascending sort on tries + // tertiary sort on request index (so we get low indexes first) + sql+="ORDER BY tblMessageRequests.Day DESC, tblMessageRequests.Tries ASC, tblMessageRequests.RequestIndex ASC "; sql+=";"; SQLite3DB::Statement st=m_db->Prepare(sql); @@ -502,6 +504,13 @@ void MessageRequester::StartRequest(const std::string &requestid) m_requesting.push_back(requestid); + // update tries + st=m_db->Prepare("UPDATE tblMessageRequests SET Tries=Tries+1 WHERE IdentityID=? AND Day=? AND RequestIndex=?;"); + st.Bind(0,identityid); + st.Bind(1,date); + st.Bind(2,indexstr); + st.Step(); + m_log->debug("MessageRequester::StartRequest requesting "+message["Identifier"]); } diff --git a/src/http/pages/homepage.cpp b/src/http/pages/homepage.cpp index fc60f78..a37d50f 100644 --- a/src/http/pages/homepage.cpp +++ b/src/http/pages/homepage.cpp @@ -36,22 +36,34 @@ const std::string HomePage::GeneratePage(const std::string &method, const std::m st.Step(); if(st.RowReturned()) { - std::string currentmajor=VERSION_MAJOR; - std::string currentminor=VERSION_MINOR; - std::string currentrelease=VERSION_RELEASE; - std::string major=""; - std::string minor=""; - std::string release=""; + int major=0; + int minor=0; + int release=0; + int currentmajor=0; + int currentminor=0; + int currentrelease=0; std::string freesite=""; - st.ResultText(0,major); - st.ResultText(1,minor); - st.ResultText(2,release); + std::string majorstr=""; + std::string minorstr=""; + std::string releasestr=""; + + StringFunctions::Convert(VERSION_MAJOR,currentmajor); + StringFunctions::Convert(VERSION_MINOR,currentminor); + StringFunctions::Convert(VERSION_RELEASE,currentrelease); + + st.ResultInt(0,major); + st.ResultInt(1,minor); + st.ResultInt(2,release); st.ResultText(3,freesite); + StringFunctions::Convert(major,majorstr); + StringFunctions::Convert(minor,minorstr); + StringFunctions::Convert(release,releasestr); + if(currentmajorFMS "+major+"."+minor+"."+release+"
"; - content+="You can see the release info here
"; + content+="You are running an old version of FMS. Please update here: FMS "+majorstr+"."+minorstr+"."+releasestr+"
"; + content+="You can see the release info here
"; showgenericupdate=false; } diff --git a/src/message.cpp b/src/message.cpp index 897ceed..e078c95 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -678,31 +678,34 @@ const bool Message::ParseNNTPMessage(const std::string &nntpmessage) std::string temp=mime.GetFieldValue("References"); // remove any path folding temp=StringFunctions::Replace(temp,"\r\n",""); - temp=StringFunctions::Replace(temp,"\t",""); + temp=StringFunctions::Replace(temp,"\t"," "); std::vector parts; int count=0; StringFunctions::SplitMultiple(temp,", \t",parts); for(std::vector::reverse_iterator i=parts.rbegin(); i!=parts.rend(); i++) { - // get rid of < and > and any whitespace - (*i)=StringFunctions::Replace((*i),"<",""); - (*i)=StringFunctions::Replace((*i),">",""); - (*i)=StringFunctions::TrimWhitespace((*i)); - /* - // erase @ and everything after - if((*i).find("@")!=std::string::npos) + if((*i).size()>2) { - (*i).erase((*i).find("@")); - } - */ - // only erase after @ if message is old type with @freenetproject.org - if((*i).find("@freenetproject.org")!=std::string::npos) - { - (*i).erase((*i).find("@")); - } - if((*i)!="") - { - m_inreplyto[count++]=(*i); + // get rid of < and > and any whitespace + (*i)=StringFunctions::Replace((*i),"<",""); + (*i)=StringFunctions::Replace((*i),">",""); + (*i)=StringFunctions::TrimWhitespace((*i)); + /* + // erase @ and everything after + if((*i).find("@")!=std::string::npos) + { + (*i).erase((*i).find("@")); + } + */ + // only erase after @ if message is old type with @freenetproject.org + if((*i).find("@freenetproject.org")!=std::string::npos) + { + (*i).erase((*i).find("@")); + } + if((*i)!="") + { + m_inreplyto[count++]=(*i); + } } } } diff --git a/src/optionssetup.cpp b/src/optionssetup.cpp index eebd521..bfa73df 100644 --- a/src/optionssetup.cpp +++ b/src/optionssetup.cpp @@ -68,7 +68,7 @@ void SetupDefaultOptions() upd.Reset(); st.Bind(0,"FMSVersionEdition"); - st.Bind(1,"9"); + st.Bind(1,"11"); st.Step(); st.Reset(); upd.Bind(0,"Program"); -- 2.7.4