From: SomeDude Date: Sun, 21 Dec 2008 07:41:00 +0000 (+0100) Subject: version 0.3.27 X-Git-Url: https://git.pterodactylus.net/?p=fms.git;a=commitdiff_plain;h=e662ea47fba8715474851ceebacba400984ee433 version 0.3.27 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index e4251a9..3c9997e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,7 @@ src/freenet/identityintroductionrequester.cpp src/freenet/identityintroductionxml.cpp src/freenet/identityrequester.cpp src/freenet/identityxml.cpp +src/freenet/inactivemessagelistrequester.cpp src/freenet/introductionpuzzleinserter.cpp src/freenet/introductionpuzzlerequester.cpp src/freenet/introductionpuzzlexml.cpp @@ -67,6 +68,7 @@ src/freenet/trustlistinserter.cpp src/freenet/trustlistrequester.cpp src/freenet/trustlistxml.cpp src/freenet/unkeyedidcreator.cpp +src/freenet/unknownidentityrequester.cpp src/freenet/captcha/simplecaptcha.cpp src/freenet/captcha/easybmp/EasyBMP.cpp src/freenet/captcha/easybmp/EasyBMP_Font.cpp diff --git a/include/freenet/identityrequester.h b/include/freenet/identityrequester.h index bed219d..b371d11 100644 --- a/include/freenet/identityrequester.h +++ b/include/freenet/identityrequester.h @@ -10,8 +10,8 @@ public: IdentityRequester(FCPv2 *fcp); private: - void Initialize(); - void PopulateIDList(); // clear and re-populate m_ids with identities we want to query + virtual void Initialize(); + virtual void PopulateIDList(); // clear and re-populate m_ids with identities we want to query void StartRequest(const long &identityid); const bool HandleAllData(FCPMessage &message); const bool HandleGetFailed(FCPMessage &message); diff --git a/include/freenet/inactivemessagelistrequester.h b/include/freenet/inactivemessagelistrequester.h new file mode 100644 index 0000000..8891fec --- /dev/null +++ b/include/freenet/inactivemessagelistrequester.h @@ -0,0 +1,24 @@ +#ifndef _inactivemessagelistrequester_ +#define _inactivemessagelistrequester_ + +#include "messagelistrequester.h" + +#include + +class InactiveMessageListRequester:public MessageListRequester +{ +public: + InactiveMessageListRequester(); + InactiveMessageListRequester(FCPv2 *fcp); + +private: + virtual void Initialize(); + virtual void PopulateIDList(); + + bool m_localtrustoverrides; + bool m_savetonewboards; + long m_messagedownloadmaxdaysbackward; + +}; + +#endif // _inactivemessagelistrequester_ diff --git a/include/freenet/messagelistrequester.h b/include/freenet/messagelistrequester.h index f960fb1..ccd463c 100644 --- a/include/freenet/messagelistrequester.h +++ b/include/freenet/messagelistrequester.h @@ -12,8 +12,8 @@ public: MessageListRequester(FCPv2 *fcp); private: - void Initialize(); - void PopulateIDList(); + virtual void Initialize(); + virtual void PopulateIDList(); void StartRequest(const long &id); void StartRedirectRequest(FCPMessage &message); const bool HandleAllData(FCPMessage &message); diff --git a/include/freenet/unknownidentityrequester.h b/include/freenet/unknownidentityrequester.h new file mode 100644 index 0000000..883f183 --- /dev/null +++ b/include/freenet/unknownidentityrequester.h @@ -0,0 +1,18 @@ +#ifndef _unknown_identity_requester_ +#define _unknown_identity_requester_ + +#include "identityrequester.h" + +class UnknownIdentityRequester:public IdentityRequester +{ +public: + UnknownIdentityRequester(); + UnknownIdentityRequester(FCPv2 *fcp); + +private: + void Initialize(); + void PopulateIDList(); + +}; + +#endif // _unknown_identity_requester_ diff --git a/include/global.h b/include/global.h index dbdf3c6..e453851 100644 --- a/include/global.h +++ b/include/global.h @@ -7,10 +7,10 @@ #define VERSION_MAJOR "0" #define VERSION_MINOR "3" -#define VERSION_RELEASE "26" +#define VERSION_RELEASE "27" #define FMS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_RELEASE -#define FMS_FREESITE_USK "USK@0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/87/" -#define FMS_VERSION_EDITION "28" +#define FMS_FREESITE_USK "USK@0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/89/" +#define FMS_VERSION_EDITION "29" typedef Poco::ScopedLock Guard; diff --git a/src/dbmaintenancethread.cpp b/src/dbmaintenancethread.cpp index 0ecfeda..ae4dc88 100644 --- a/src/dbmaintenancethread.cpp +++ b/src/dbmaintenancethread.cpp @@ -104,6 +104,9 @@ void DBMaintenanceThread::Do10MinuteMaintenance() st.Step(); } + // delete threads that have no messages + m_db->Execute("DELETE FROM tblThread WHERE ThreadID IN (SELECT tblThread.ThreadID FROM tblThread LEFT JOIN tblThreadPost ON tblThread.ThreadID=tblThreadPost.ThreadID WHERE tblThreadPost.ThreadID IS NULL);"); + // TODO - remove after corruption issue fixed if(ll=="8") { diff --git a/src/dbsetup.cpp b/src/dbsetup.cpp index e6065f7..1316bb2 100644 --- a/src/dbsetup.cpp +++ b/src/dbsetup.cpp @@ -430,6 +430,7 @@ void SetupDB() // MessageInserter will insert a record into this temp table which the MessageListInserter will query for and insert a MessageList when needed db->Execute("CREATE TEMPORARY TABLE IF NOT EXISTS tmpMessageListInsert(\ + MessageListInsertID INTEGER PRIMARY KEY,\ LocalIdentityID INTEGER,\ Date DATETIME\ );"); diff --git a/src/fmsapp.cpp b/src/fmsapp.cpp index 9737299..261ea46 100644 --- a/src/fmsapp.cpp +++ b/src/fmsapp.cpp @@ -181,6 +181,7 @@ int FMSApp::main(const std::vector &args) else { logger().information("FMS startup v"FMS_VERSION); + logger().information("Using SQLite "SQLITE_VERSION); std::string tempval=""; Option::Instance()->Get("VacuumOnStartup",tempval); diff --git a/src/freenet/freenetmasterthread.cpp b/src/freenet/freenetmasterthread.cpp index 62b84ed..c0feb6a 100644 --- a/src/freenet/freenetmasterthread.cpp +++ b/src/freenet/freenetmasterthread.cpp @@ -4,6 +4,7 @@ #include "../../include/freenet/unkeyedidcreator.h" #include "../../include/freenet/identityinserter.h" #include "../../include/freenet/identityrequester.h" +#include "../../include/freenet/unknownidentityrequester.h" #include "../../include/freenet/introductionpuzzleinserter.h" #include "../../include/freenet/identityintroductionrequester.h" #include "../../include/freenet/introductionpuzzlerequester.h" @@ -11,6 +12,7 @@ #include "../../include/freenet/trustlistinserter.h" #include "../../include/freenet/trustlistrequester.h" #include "../../include/freenet/messagelistrequester.h" +#include "../../include/freenet/inactivemessagelistrequester.h" #include "../../include/freenet/messagelistinserter.h" #include "../../include/freenet/messagerequester.h" #include "../../include/freenet/messageinserter.h" @@ -296,6 +298,7 @@ void FreenetMasterThread::Setup() m_registrables.push_back(new UnkeyedIDCreator(&m_fcp)); m_registrables.push_back(new IdentityInserter(&m_fcp)); m_registrables.push_back(new IdentityRequester(&m_fcp)); + m_registrables.push_back(new UnknownIdentityRequester(&m_fcp)); m_registrables.push_back(new IntroductionPuzzleInserter(&m_fcp)); m_registrables.push_back(new IdentityIntroductionRequester(&m_fcp)); m_registrables.push_back(new IntroductionPuzzleRequester(&m_fcp)); @@ -304,6 +307,7 @@ void FreenetMasterThread::Setup() m_registrables.push_back(new TrustListRequester(&m_fcp)); m_registrables.push_back(new MessageListInserter(&m_fcp)); m_registrables.push_back(new MessageListRequester(&m_fcp)); + m_registrables.push_back(new InactiveMessageListRequester(&m_fcp)); m_registrables.push_back(new MessageInserter(&m_fcp)); m_registrables.push_back(new MessageRequester(&m_fcp)); m_registrables.push_back(new BoardListInserter(&m_fcp)); diff --git a/src/freenet/identityrequester.cpp b/src/freenet/identityrequester.cpp index af52a59..0738698 100644 --- a/src/freenet/identityrequester.cpp +++ b/src/freenet/identityrequester.cpp @@ -114,7 +114,7 @@ const bool IdentityRequester::HandleAllData(FCPMessage &message) st.Step(); st.Finalize(); - m_log->debug("IdentityRequester::HandleAllData parsed Identity XML file : "+message["Identifier"]); + m_log->debug(m_fcpuniquename+"::HandleAllData parsed Identity XML file : "+message["Identifier"]); } else { @@ -126,7 +126,7 @@ const bool IdentityRequester::HandleAllData(FCPMessage &message) st.Step(); st.Finalize(); - m_log->error("IdentityRequester::HandleAllData error parsing Identity XML file : "+message["Identifier"]); + m_log->error(m_fcpuniquename+"::HandleAllData error parsing Identity XML file : "+message["Identifier"]); } // remove this identityid from request list @@ -157,7 +157,7 @@ const bool IdentityRequester::HandleGetFailed(FCPMessage &message) st.Step(); st.Finalize(); - m_log->error("IdentityRequester::HandleGetFailed fatal error requesting "+message["Identifier"]); + m_log->error(m_fcpuniquename+"::HandleGetFailed fatal error requesting "+message["Identifier"]); } // remove this identityid from request list @@ -169,8 +169,12 @@ const bool IdentityRequester::HandleGetFailed(FCPMessage &message) void IdentityRequester::Initialize() { - m_fcpuniquename="IdentityRequester"; + m_fcpuniquename="KnownIdentityRequester"; Option::Instance()->GetInt("MaxIdentityRequests",m_maxrequests); + + // known identities get 4/5 + any remaining if not evenly divisible - unknown identities get 1/5 of the max requests option + m_maxrequests=((m_maxrequests*4)/5)+(m_maxrequests%5); + if(m_maxrequests<1) { m_maxrequests=1; @@ -190,7 +194,7 @@ void IdentityRequester::PopulateIDList() date.assign(date.year(),date.month(),date.day(),0,0,0); // select identities we want to query (haven't seen yet today) - sort by their trust level (descending) with secondary sort on how long ago we saw them (ascending) - SQLite3DB::Statement st=m_db->Prepare("SELECT IdentityID FROM tblIdentity WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND (LastSeen IS NULL OR LastSeen<'"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S")+"') ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;"); + SQLite3DB::Statement st=m_db->Prepare("SELECT IdentityID FROM tblIdentity WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen IS NOT NULL AND LastSeen<'"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d %H:%M:%S")+"' ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;"); st.Step(); m_ids.clear(); diff --git a/src/freenet/inactivemessagelistrequester.cpp b/src/freenet/inactivemessagelistrequester.cpp new file mode 100644 index 0000000..7cbfbe8 --- /dev/null +++ b/src/freenet/inactivemessagelistrequester.cpp @@ -0,0 +1,96 @@ +#include "../../include/freenet/inactivemessagelistrequester.h" + +#include + +#ifdef XMEM + #include +#endif + +InactiveMessageListRequester::InactiveMessageListRequester() +{ + Initialize(); +} + +InactiveMessageListRequester::InactiveMessageListRequester(FCPv2 *fcp):MessageListRequester(fcp) +{ + Initialize(); +} + +void InactiveMessageListRequester::Initialize() +{ + m_fcpuniquename="InactiveMessageListRequester"; + std::string tempval=""; + + m_maxrequests=0; + Option::Instance()->GetInt("MaxMessageListRequests",m_maxrequests); + + // inactive identities get 1/2 of the max requests option - active identities get 1/2 + any remaining if not evenly divisible + m_maxrequests=(m_maxrequests/2)+(m_maxrequests%2); + + if(m_maxrequests<1) + { + m_maxrequests=1; + m_log->error("Option MaxMessageListRequests is currently set at "+tempval+". It must be 1 or greater."); + } + if(m_maxrequests>100) + { + m_log->warning("Option MaxMessageListRequests is currently set at "+tempval+". This value might be incorrectly configured."); + } + + tempval=""; + Option::Instance()->Get("LocalTrustOverridesPeerTrust",tempval); + if(tempval=="true") + { + m_localtrustoverrides=true; + } + else + { + m_localtrustoverrides=false; + } + + tempval=""; + Option::Instance()->Get("SaveMessagesFromNewBoards",tempval); + if(tempval=="true") + { + m_savetonewboards=true; + } + else + { + m_savetonewboards=false; + } + + m_messagedownloadmaxdaysbackward=5; + tempval="5"; + Option::Instance()->Get("MessageDownloadMaxDaysBackward",tempval); + StringFunctions::Convert(tempval,m_messagedownloadmaxdaysbackward); + +} + +void InactiveMessageListRequester::PopulateIDList() +{ + Poco::DateTime date; + Poco::DateTime yesterday=date-Poco::Timespan(1,0,0,0,0); + int id; + + SQLite3DB::Statement st; + + // select identities we want to query (we've seen them today) - sort by their trust level (descending) with secondary sort on how long ago we saw them (ascending) + if(m_localtrustoverrides==false) + { + st=m_db->Prepare("SELECT tblIdentity.IdentityID FROM tblIdentity INNER JOIN vwIdentityStats ON tblIdentity.IdentityID=vwIdentityStats.IdentityID WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND (vwIdentityStats.LastMessageDate IS NULL OR vwIdentityStats.LastMessageDate<'"+Poco::DateTimeFormatter::format(yesterday,"%Y-%m-%d")+"') AND (LocalMessageTrust IS NULL OR LocalMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalMessageTrust')) AND (PeerMessageTrust IS NULL OR PeerMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerMessageTrust')) ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;"); + } + else + { + st=m_db->Prepare("SELECT tblIdentity.IdentityID FROM tblIdentity INNER JOIN vwIdentityStats ON tblIdentity.IdentityID=vwIdentityStats.IdentityID WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND (vwIdentityStats.LastMessageDate IS NULL OR vwIdentityStats.LastMessageDate<'"+Poco::DateTimeFormatter::format(yesterday,"%Y-%m-%d")+"') AND (LocalMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalMessageTrust') OR (LocalMessageTrust IS NULL AND (PeerMessageTrust IS NULL OR PeerMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerMessageTrust')))) ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;"); + } + st.Step(); + + m_ids.clear(); + + while(st.RowReturned()) + { + st.ResultInt(0,id); + m_ids[id]=false; + st.Step(); + } +} diff --git a/src/freenet/messagelistinserter.cpp b/src/freenet/messagelistinserter.cpp index aa1e814..786fffe 100644 --- a/src/freenet/messagelistinserter.cpp +++ b/src/freenet/messagelistinserter.cpp @@ -124,10 +124,19 @@ const bool MessageListInserter::HandlePutSuccessful(FCPMessage &message) st.Bind(1,localidentityid); st.Step(); - // delete any record from tmpMessageListInsert - st=m_db->Prepare("DELETE FROM tmpMessageListInsert WHERE LocalIdentityID=?;"); + // delete only a single record from tmpMessageListInsert + st=m_db->Prepare("SELECT MessageListInsertID FROM tmpMessageListInsert WHERE LocalIdentityID=?;"); st.Bind(0,localidentityid); st.Step(); + if(st.RowReturned()) + { + int id=-1; + st.ResultInt(0,id); + + st=m_db->Prepare("DELETE FROM tmpMessageListInsert WHERE MessageListInsertID=?;"); + st.Bind(0,id); + st.Step(); + } RemoveFromInsertList(localidentityid); diff --git a/src/freenet/messagelistrequester.cpp b/src/freenet/messagelistrequester.cpp index 07d052f..d8ed8aa 100644 --- a/src/freenet/messagelistrequester.cpp +++ b/src/freenet/messagelistrequester.cpp @@ -177,7 +177,7 @@ const bool MessageListRequester::HandleAllData(FCPMessage &message) if(CheckDateNotFuture(xml.GetDate(i))==false) { addmessage=false; - m_log->error("MessageListRequester::HandleAllData date for message is in future! "+xml.GetDate(i)); + m_log->error(m_fcpuniquename+"::HandleAllData date for message is in future! "+xml.GetDate(i)); } if(addmessage==true && CheckDateWithinMaxDays(xml.GetDate(i))==false) @@ -240,7 +240,7 @@ const bool MessageListRequester::HandleAllData(FCPMessage &message) if(CheckDateNotFuture(xml.GetExternalDate(i))==false) { addmessage=false; - m_log->error("MessageListRequester::HandleAllData date for external message is in future! "+xml.GetExternalDate(i)); + m_log->error(m_fcpuniquename+"::HandleAllData date for external message is in future! "+xml.GetExternalDate(i)); } if(addmessage==true && CheckDateWithinMaxDays(xml.GetExternalDate(i))==false) @@ -278,7 +278,7 @@ const bool MessageListRequester::HandleAllData(FCPMessage &message) st.Step(); st.Finalize(); - m_log->debug("MessageListRequester::HandleAllData parsed MessageList XML file : "+message["Identifier"]); + m_log->debug(m_fcpuniquename+"::HandleAllData parsed MessageList XML file : "+message["Identifier"]); } else { @@ -290,7 +290,7 @@ const bool MessageListRequester::HandleAllData(FCPMessage &message) st.Step(); st.Finalize(); - m_log->error("MessageListRequester::HandleAllData error parsing MessageList XML file : "+message["Identifier"]); + m_log->error(m_fcpuniquename+"::HandleAllData error parsing MessageList XML file : "+message["Identifier"]); } // remove this identityid from request list @@ -328,7 +328,7 @@ const bool MessageListRequester::HandleGetFailed(FCPMessage &message) st.Step(); st.Finalize(); - m_log->error("MessageListRequester::HandleGetFailed fatal error code="+message["Code"]+" requesting "+message["Identifier"]); + m_log->error(m_fcpuniquename+"::HandleGetFailed fatal error code="+message["Code"]+" requesting "+message["Identifier"]); } // remove this identityid from request list @@ -339,11 +339,15 @@ const bool MessageListRequester::HandleGetFailed(FCPMessage &message) void MessageListRequester::Initialize() { - m_fcpuniquename="MessageListRequester"; + m_fcpuniquename="ActiveMessageListRequester"; std::string tempval=""; m_maxrequests=0; Option::Instance()->GetInt("MaxMessageListRequests",m_maxrequests); + + // active identities get 1/2 of the max requests option + any remaining if not evenly divisible - inactive identities get 1/2 + m_maxrequests=(m_maxrequests/2)+(m_maxrequests%2); + if(m_maxrequests<1) { m_maxrequests=1; @@ -386,6 +390,7 @@ void MessageListRequester::Initialize() void MessageListRequester::PopulateIDList() { Poco::DateTime date; + Poco::DateTime yesterday=date-Poco::Timespan(1,0,0,0,0); int id; SQLite3DB::Statement st; @@ -393,11 +398,11 @@ void MessageListRequester::PopulateIDList() // select identities we want to query (we've seen them today) - sort by their trust level (descending) with secondary sort on how long ago we saw them (ascending) if(m_localtrustoverrides==false) { - st=m_db->Prepare("SELECT IdentityID FROM tblIdentity WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND (LocalMessageTrust IS NULL OR LocalMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalMessageTrust')) AND (PeerMessageTrust IS NULL OR PeerMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerMessageTrust')) ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;"); + st=m_db->Prepare("SELECT tblIdentity.IdentityID FROM tblIdentity INNER JOIN vwIdentityStats ON tblIdentity.IdentityID=vwIdentityStats.IdentityID WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND (vwIdentityStats.LastMessageDate>='"+Poco::DateTimeFormatter::format(yesterday,"%Y-%m-%d")+"') AND (LocalMessageTrust IS NULL OR LocalMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalMessageTrust')) AND (PeerMessageTrust IS NULL OR PeerMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerMessageTrust')) ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;"); } else { - st=m_db->Prepare("SELECT IdentityID FROM tblIdentity WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND (LocalMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalMessageTrust') OR (LocalMessageTrust IS NULL AND (PeerMessageTrust IS NULL OR PeerMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerMessageTrust')))) ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;"); + st=m_db->Prepare("SELECT tblIdentity.IdentityID FROM tblIdentity INNER JOIN vwIdentityStats ON tblIdentity.IdentityID=vwIdentityStats.IdentityID WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND (vwIdentityStats.LastMessageDate>='"+Poco::DateTimeFormatter::format(yesterday,"%Y-%m-%d")+"') AND (LocalMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalMessageTrust') OR (LocalMessageTrust IS NULL AND (PeerMessageTrust IS NULL OR PeerMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerMessageTrust')))) ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;"); } st.Step(); diff --git a/src/freenet/unknownidentityrequester.cpp b/src/freenet/unknownidentityrequester.cpp new file mode 100644 index 0000000..765eb3f --- /dev/null +++ b/src/freenet/unknownidentityrequester.cpp @@ -0,0 +1,53 @@ +#include "../../include/freenet/unknownidentityrequester.h" +#include "../../include/option.h" + +#ifdef XMEM + #include +#endif + +UnknownIdentityRequester::UnknownIdentityRequester() +{ + Initialize(); +} + +UnknownIdentityRequester::UnknownIdentityRequester(FCPv2 *fcp):IdentityRequester(fcp) +{ + Initialize(); +} + +void UnknownIdentityRequester::Initialize() +{ + m_fcpuniquename="UnknownIdentityRequester"; + Option::Instance()->GetInt("MaxIdentityRequests",m_maxrequests); + + // unknown identities get 1/5 of the max requests option - known identities get 4/5 + any remaining if not evenly divisible + m_maxrequests=(m_maxrequests/5); + + if(m_maxrequests<1) + { + m_maxrequests=1; + m_log->error("Option MaxIdentityRequests is currently set at less than 1. It must be 1 or greater."); + } + if(m_maxrequests>100) + { + m_log->warning("Option MaxIdentityRequests is currently set at more than 100. This value might be incorrectly configured."); + } +} + +void UnknownIdentityRequester::PopulateIDList() +{ + int id; + + // select identities we want to query (haven't seen at all) - sort by their trust level (descending) + SQLite3DB::Statement st=m_db->Prepare("SELECT IdentityID FROM tblIdentity WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen IS NULL ORDER BY LocalMessageTrust+LocalTrustListTrust DESC;"); + st.Step(); + + m_ids.clear(); + + while(st.RowReturned()) + { + st.ResultInt(0,id); + m_ids[id]=false; + st.Step(); + } +} diff --git a/src/http/pages/forumcreatepostpage.cpp b/src/http/pages/forumcreatepostpage.cpp index 4fd81c9..c89e1ac 100644 --- a/src/http/pages/forumcreatepostpage.cpp +++ b/src/http/pages/forumcreatepostpage.cpp @@ -38,7 +38,7 @@ const std::string ForumCreatePostPage::GeneratePage(const std::string &method, c replytomessageidstr=(*queryvars.find("replytomessageid")).second; } - if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="send") + if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="send" && ValidateFormPassword(queryvars)) { if(queryvars.find("localidentityid")!=queryvars.end() && (*queryvars.find("localidentityid")).second!="") { @@ -112,13 +112,15 @@ const std::string ForumCreatePostPage::GeneratePage(const std::string &method, c { if(replytomessageidstr!="") { - SQLite3DB::Statement replyst=m_db->Prepare("SELECT Subject, Body FROM tblMessage WHERE MessageID=?;"); + std::string fromname=""; + SQLite3DB::Statement replyst=m_db->Prepare("SELECT Subject, Body, FromName FROM tblMessage WHERE MessageID=?;"); replyst.Bind(0,replytomessageidstr); replyst.Step(); if(replyst.RowReturned()) { replyst.ResultText(0,subject); replyst.ResultText(1,body); + replyst.ResultText(2,fromname); if(subject.size()<3 || (subject.substr(0,3)!="re:" && subject.substr(0,3)!="Re:")) { @@ -150,6 +152,7 @@ const std::string ForumCreatePostPage::GeneratePage(const std::string &method, c } body+="\n"; } + body=fromname+" wrote:\n"+body; } } @@ -184,6 +187,7 @@ const std::string ForumCreatePostPage::GeneratePage(const std::string &method, c content+=""; content+=""; content+=""; + content+=CreateFormPassword(); content+=""; content+=""; content+=""; diff --git a/src/threadbuilder.cpp b/src/threadbuilder.cpp index 1a6a764..cf21aab 100644 --- a/src/threadbuilder.cpp +++ b/src/threadbuilder.cpp @@ -29,7 +29,7 @@ const bool ThreadBuilder::Build(const long messageid, const long boardid, const mt.Load(messageid,boardid,bydate); m_threadmessages=mt.GetNodes(); - // find threadid of this thread if it already exists in a thread + // find threadid of this mesage if it already exists in a thread SQLite3DB::Statement st=m_db->Prepare("SELECT tblThread.ThreadID FROM tblThread INNER JOIN tblThreadPost ON tblThread.ThreadID=tblThreadPost.ThreadID WHERE tblThread.BoardID=? AND tblThreadPost.MessageID=?;"); st.Bind(0,boardid); st.Bind(1,messageid); @@ -121,31 +121,11 @@ const bool ThreadBuilder::Build(const long messageid, const long boardid, const deleteotherst.Step(); deleteotherst.Reset(); - // TODO - remove after corruption issue fixed - if(ll=="8") - { - std::string dbres=TestDBIntegrity(); - if(dbres!="ok") - { - m_log->trace("ThreadBuilder::Build after delete other TestDBIntegrity returned "+dbres); - } - } - st4.Bind(0,threadid); st4.Bind(1,(*i).m_messageid); st4.Bind(2,count); st4.Step(); st4.Reset(); - - // TODO - remove after corruption issue fixed - if(ll=="8") - { - std::string dbres=TestDBIntegrity(); - if(dbres!="ok") - { - m_log->trace("ThreadBuilder::Build after insert TestDBIntegrity returned "+dbres); - } - } } } else
From"+LocalIdentityDropDown("localidentityid",localidentityidstr)+"
Subject