version 0.2.23
[fms.git] / src / freenet / trustlistinserter.cpp
index 8962d5e..a858de1 100644 (file)
@@ -72,23 +72,30 @@ const bool TrustListInserter::HandleMessage(FCPMessage &message)
 \r
                if(message.GetName()=="PutSuccessful")\r
                {\r
-                       m_db->Execute("UPDATE tblLocalIdentity SET InsertingTrustList='false', LastInsertedTrustList='"+now.Format("%Y-%m-%d %H:%M:%S")+"' WHERE LocalIdentityID="+idparts[1]+";");\r
-                       m_db->Execute("INSERT INTO tblTrustListInserts(LocalIdentityID,Day,InsertIndex) VALUES("+idparts[1]+",'"+idparts[4]+"',"+idparts[2]+");");\r
-                       m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"TrustListInserter::HandleMessage inserted TrustList xml");\r
+                       // non USK\r
+                       if(idparts[0]=="TrustListInserter")\r
+                       {\r
+                               m_db->Execute("UPDATE tblLocalIdentity SET InsertingTrustList='false', LastInsertedTrustList='"+now.Format("%Y-%m-%d %H:%M:%S")+"' WHERE LocalIdentityID="+idparts[1]+";");\r
+                               m_db->Execute("INSERT INTO tblTrustListInserts(LocalIdentityID,Day,InsertIndex) VALUES("+idparts[1]+",'"+idparts[4]+"',"+idparts[2]+");");\r
+                               m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"TrustListInserter::HandleMessage inserted TrustList xml");\r
+                       }\r
                        return true;\r
                }\r
 \r
-               if(message.GetName()=="PutFailed")\r
+               if(message.GetName()=="PutFailed" && idparts[0]=="TrustListInserter")\r
                {\r
-                       m_db->Execute("UPDATE tblLocalIdentity SET InsertingTrustList='false' WHERE LocalIdentityID="+idparts[1]+";");\r
-                       m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"TrustListInserter::HandleMessage failure inserting TrustList xml.  Code="+message["Code"]+" Description="+message["CodeDescription"]);\r
-                       \r
-                       // if code 9 (collision), then insert index into inserted table\r
-                       if(message["Code"]=="9")\r
+                       // non USK\r
+                       if(idparts[0]=="TrustListInserter")\r
                        {\r
-                               m_db->Execute("INSERT INTO tblTrustListInserts(LocalIdentityID,Day,InsertIndex) VALUES("+idparts[1]+",'"+idparts[4]+"',"+idparts[2]+");");\r
-                       }\r
+                               m_db->Execute("UPDATE tblLocalIdentity SET InsertingTrustList='false' WHERE LocalIdentityID="+idparts[1]+";");\r
+                               m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"TrustListInserter::HandleMessage failure inserting TrustList xml.  Code="+message["Code"]+" Description="+message["CodeDescription"]);\r
                        \r
+                               // if code 9 (collision), then insert index into inserted table\r
+                               if(message["Code"]=="9")\r
+                               {\r
+                                       m_db->Execute("INSERT INTO tblTrustListInserts(LocalIdentityID,Day,InsertIndex) VALUES("+idparts[1]+",'"+idparts[4]+"',"+idparts[2]+");");\r
+                               }\r
+                       }\r
                        return true;\r
                }\r
 \r
@@ -132,24 +139,33 @@ void TrustListInserter::StartInsert(const long localidentityid, const std::strin
        std::string publickey;\r
        int messagetrust;\r
        int trustlisttrust;\r
-       DateTime now,date;\r
+       DateTime now,date,dateminus30,tempdate;\r
        int index;\r
        std::string indexstr;\r
        std::string localidentityidstr;\r
        std::string messagetrustcomment="";\r
        std::string trustlisttrustcomment="";\r
+       int identityid=-1;\r
+       int count=0;\r
+       bool add=false;\r
+       std::string dateadded="";\r
 \r
        now.SetToGMTime();\r
        date.SetToGMTime();\r
+       dateminus30.SetToGMTime();\r
+       dateminus30.Add(0,0,0,-30);\r
 \r
        // insert all identities not in trust list already\r
        m_db->Execute("INSERT INTO tblIdentityTrust(LocalIdentityID,IdentityID) SELECT LocalIdentityID,IdentityID FROM tblLocalIdentity,tblIdentity WHERE LocalIdentityID || '_' || IdentityID NOT IN (SELECT LocalIdentityID || '_' || IdentityID FROM tblIdentityTrust);");\r
 \r
+       // select statement for last message date for an identity\r
+       SQLite3DB::Statement countst=m_db->Prepare("SELECT COUNT(*) FROM tblMessage WHERE IdentityID=? AND MessageDate>=?;");\r
+\r
        // build the xml file - we only want to add identities that we recently saw, otherwise we could be inserting a ton of identities\r
-       date.Add(0,0,0,-20);    // identities seen in last 20 days\r
+       date.Add(0,0,0,-15);    // identities seen in last 15 days - the maintenance page lets us delete identities not seen in 20 days, so this gives us a window where the identity won't be deleted and then found in a trust list and readded immediately\r
        //SQLite3DB::Statement st=m_db->Prepare("SELECT PublicKey, LocalMessageTrust, LocalTrustListTrust, MessageTrustComment, TrustListTrustComment FROM tblIdentity WHERE PublicKey IS NOT NULL AND PublicKey<>'' AND LastSeen>=?;");\r
        // we want to order by public key so we can't do identity correllation based on the sequence of identities in the list.\r
-       SQLite3DB::Statement st=m_db->Prepare("SELECT PublicKey, tblIdentityTrust.LocalMessageTrust, tblIdentityTrust.LocalTrustListTrust, tblIdentityTrust.MessageTrustComment, tblIdentityTrust.TrustListTrustComment FROM tblIdentity INNER JOIN tblIdentityTrust ON tblIdentity.IdentityID=tblIdentityTrust.IdentityID WHERE PublicKey IS NOT NULL AND PublicKey<>'' AND LastSeen>=? AND tblIdentityTrust.LocalIdentityID=? ORDER BY PublicKey;");\r
+       SQLite3DB::Statement st=m_db->Prepare("SELECT PublicKey, tblIdentityTrust.LocalMessageTrust, tblIdentityTrust.LocalTrustListTrust, tblIdentityTrust.MessageTrustComment, tblIdentityTrust.TrustListTrustComment, tblIdentity.IdentityID, tblIdentity.DateAdded FROM tblIdentity INNER JOIN tblIdentityTrust ON tblIdentity.IdentityID=tblIdentityTrust.IdentityID WHERE PublicKey IS NOT NULL AND PublicKey<>'' AND LastSeen>=? AND tblIdentityTrust.LocalIdentityID=? ORDER BY PublicKey;");\r
        st.Bind(0,date.Format("%Y-%m-%d"));\r
        st.Bind(1,localidentityid);\r
        st.Step();\r
@@ -174,7 +190,43 @@ void TrustListInserter::StartInsert(const long localidentityid, const std::strin
                }\r
                st.ResultText(3,messagetrustcomment);\r
                st.ResultText(4,trustlisttrustcomment);\r
-               xml.AddTrust(publickey,messagetrust,trustlisttrust,messagetrustcomment,trustlisttrustcomment);\r
+               identityid=-1;\r
+               st.ResultInt(5,identityid);\r
+               dateadded="";\r
+               st.ResultText(6,dateadded);\r
+\r
+               add=false;\r
+\r
+               // add the identity to the trust list if they have posted a message in the last 30 days\r
+               countst.Bind(0,identityid);\r
+               countst.Bind(1,dateminus30.Format("%Y-%m-%d"));\r
+               countst.Step();\r
+               if(countst.RowReturned())\r
+               {\r
+                       count=0;\r
+                       countst.ResultInt(0,count);\r
+                       if(count>0)\r
+                       {\r
+                               add=true;\r
+                       }\r
+               }\r
+               countst.Reset();\r
+\r
+               // no messages in last 30 days - add the identity if we learned about them less than 5 days ago\r
+               if(add==false && dateadded!="")\r
+               {\r
+                       tempdate.Set(dateadded);\r
+                       if(tempdate>=(now-5.0))\r
+                       {\r
+                               add=true;\r
+                       }\r
+               }\r
+\r
+               if(add==true)\r
+               {\r
+                       xml.AddTrust(publickey,messagetrust,trustlisttrust,messagetrustcomment,trustlisttrustcomment);\r
+               }\r
+\r
                st.Step();\r
        }\r
 \r
@@ -205,6 +257,18 @@ void TrustListInserter::StartInsert(const long localidentityid, const std::strin
        m_fcp->SendMessage(message);\r
        m_fcp->SendRaw(data.c_str(),data.size());\r
 \r
+       // insert to USK\r
+       message.Reset();\r
+       message.SetName("ClientPutComplexDir");\r
+       message["URI"]="USK"+privatekey.substr(3)+m_messagebase+"|"+now.Format("%Y.%m.%d")+"|TrustList/0/";\r
+       message["Identifier"]="TrustListInserterUSK|"+message["URI"];\r
+       message["DefaultName"]="TrustList.xml";\r
+       message["Files.0.Name"]="TrustList.xml";\r
+       message["Files.0.UplaodFrom"]="direct";\r
+       message["Files.0.DataLength"]=datasizestr;\r
+       m_fcp->SendMessage(message);\r
+       m_fcp->SendRaw(data.c_str(),data.size());\r
+\r
        m_db->Execute("UPDATE tblLocalIdentity SET InsertingTrustList='true' WHERE LocalIdentityID="+localidentityidstr+";");\r
 \r
 }\r