version 0.3.27
authorSomeDude <SomeDude@NuBL7aaJ6Cn4fB7GXFb9Zfi8w1FhPyW3oKgU9TweZMw>
Sun, 21 Dec 2008 07:41:00 +0000 (08:41 +0100)
committerDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Sun, 21 Dec 2008 07:41:00 +0000 (08:41 +0100)
17 files changed:
CMakeLists.txt
include/freenet/identityrequester.h
include/freenet/inactivemessagelistrequester.h [new file with mode: 0644]
include/freenet/messagelistrequester.h
include/freenet/unknownidentityrequester.h [new file with mode: 0644]
include/global.h
src/dbmaintenancethread.cpp
src/dbsetup.cpp
src/fmsapp.cpp
src/freenet/freenetmasterthread.cpp
src/freenet/identityrequester.cpp
src/freenet/inactivemessagelistrequester.cpp [new file with mode: 0644]
src/freenet/messagelistinserter.cpp
src/freenet/messagelistrequester.cpp
src/freenet/unknownidentityrequester.cpp [new file with mode: 0644]
src/http/pages/forumcreatepostpage.cpp
src/threadbuilder.cpp

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