#include "../../include/stringfunctions.h"\r
#include "../../include/freenet/trustlistxml.h"\r
\r
+#include <Poco/DateTimeFormatter.h>\r
+\r
#ifdef XMEM\r
#include <xmem.h>\r
#endif\r
\r
const bool TrustListRequester::HandleAllData(FCPMessage &message)\r
{\r
- DateTime now;\r
+ Poco::DateTime now;\r
SQLite3DB::Statement st;\r
SQLite3DB::Statement trustst;\r
std::vector<std::string> idparts;\r
long identityid;\r
long index;\r
\r
- now.SetToGMTime();\r
StringFunctions::Split(message["Identifier"],"|",idparts);\r
StringFunctions::Convert(message["DataLength"],datalength);\r
StringFunctions::Convert(idparts[1],identityid);\r
// parse file into xml and update the database\r
if(xml.ParseXML(std::string(data.begin(),data.end()))==true)\r
{\r
+ // find the identity name and public key of the identity publishing the trust list\r
+ std::string publisherid="";\r
+ st=m_db->Prepare("SELECT Name,PublicKey FROM tblIdentity WHERE IdentityID=?;");\r
+ st.Bind(0,identityid);\r
+ st.Step();\r
+ if(st.RowReturned())\r
+ {\r
+ std::string publishername="";\r
+ std::string publisherpublickey="";\r
+ st.ResultText(0,publishername);\r
+ st.ResultText(1,publisherpublickey);\r
+ publisherid=publishername;\r
+ if(publisherpublickey.size()>4)\r
+ {\r
+ publisherid+=publisherpublickey.substr(3,44);\r
+ }\r
+ }\r
+ st.Finalize();\r
\r
// drop all existing peer trust from this identity - we will rebuild it when we go through each trust in the xml file\r
st=m_db->Prepare("DELETE FROM tblPeerTrust WHERE IdentityID=?;");\r
st.Finalize();\r
\r
st=m_db->Prepare("SELECT IdentityID FROM tblIdentity WHERE PublicKey=?;");\r
- trustst=m_db->Prepare("INSERT INTO tblPeerTrust(IdentityID,TargetIdentityID,MessageTrust,TrustListTrust) VALUES(?,?,?,?);");\r
+ trustst=m_db->Prepare("INSERT INTO tblPeerTrust(IdentityID,TargetIdentityID,MessageTrust,TrustListTrust,MessageTrustComment,TrustListTrustComment) VALUES(?,?,?,?,?,?);");\r
+ \r
+ SQLite3DB::Statement idinsert=m_db->Prepare("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES(?,?,?);");\r
+ \r
// loop through all trust entries in xml and add to database if we don't already know them\r
for(long i=0; i<xml.TrustCount(); i++)\r
{\r
int id;\r
std::string identity;\r
+ std::string messagetrustcomment="";\r
+ std::string trustlisttrustcomment="";\r
identity=xml.GetIdentity(i);\r
\r
st.Bind(0,identity);\r
st.Step();\r
if(st.RowReturned()==false)\r
{\r
- m_db->ExecuteInsert("INSERT INTO tblIdentity(PublicKey,DateAdded) VALUES('"+identity+"','"+now.Format("%Y-%m-%d %H:%M:%S")+"');",(long &)id);\r
+ idinsert.Bind(0,identity);\r
+ idinsert.Bind(1,Poco::DateTimeFormatter::format(now,"%Y-%m-%d %H:%M:%S"));\r
+ idinsert.Bind(2,"trust list of "+publisherid);\r
+ idinsert.Step(true);\r
+ id=idinsert.GetLastInsertRowID();\r
+ idinsert.Reset();\r
+ // m_db->ExecuteInsert("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('"+identity+"','"+now.Format("%Y-%m-%d %H:%M:%S")+"');",(long &)id);\r
}\r
else\r
{\r
{\r
trustst.Bind(3,xml.GetTrustListTrust(i));\r
}\r
+ messagetrustcomment=xml.GetMessageTrustComment(i);\r
+ trustlisttrustcomment=xml.GetTrustListTrustComment(i);\r
+ // limit comments to 50 characters each\r
+ if(messagetrustcomment.size()>50)\r
+ {\r
+ messagetrustcomment.erase(50);\r
+ }\r
+ if(trustlisttrustcomment.size()>50)\r
+ {\r
+ trustlisttrustcomment.erase(50);\r
+ }\r
+ trustst.Bind(4,messagetrustcomment);\r
+ trustst.Bind(5,trustlisttrustcomment);\r
trustst.Step();\r
trustst.Reset();\r
\r
st.Step();\r
st.Finalize();\r
\r
- m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"TrustListRequester::HandleAllData parsed TrustList XML file : "+message["Identifier"]);\r
+ m_log->debug("TrustListRequester::HandleAllData parsed TrustList XML file : "+message["Identifier"]);\r
}\r
else\r
{\r
st.Step();\r
st.Finalize();\r
\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"TrustListRequester::HandleAllData error parsing TrustList XML file : "+message["Identifier"]);\r
+ m_log->error("TrustListRequester::HandleAllData error parsing TrustList XML file : "+message["Identifier"]);\r
}\r
\r
// remove this identityid from request list\r
\r
const bool TrustListRequester::HandleGetFailed(FCPMessage &message)\r
{\r
- DateTime now;\r
SQLite3DB::Statement st;\r
std::vector<std::string> idparts;\r
long identityid;\r
long index;\r
\r
- now.SetToGMTime();\r
StringFunctions::Split(message["Identifier"],"|",idparts);\r
StringFunctions::Convert(idparts[1],identityid);\r
StringFunctions::Convert(idparts[2],index); \r
st.Step();\r
st.Finalize();\r
\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"TrustListRequester::HandleGetFailed fatal error requesting "+message["Identifier"]);\r
+ m_log->error("TrustListRequester::HandleGetFailed fatal error requesting "+message["Identifier"]);\r
}\r
\r
// remove this identityid from request list\r
if(m_maxrequests<1)\r
{\r
m_maxrequests=1;\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"Option MaxTrustListRequests is currently set at "+tempval+". It must be 1 or greater.");\r
+ m_log->error("Option MaxTrustListRequests is currently set at "+tempval+". It must be 1 or greater.");\r
}\r
if(m_maxrequests>100)\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_WARNING,"Option MaxTrustListRequests is currently set at "+tempval+". This value might be incorrectly configured.");\r
+ m_log->warning("Option MaxTrustListRequests is currently set at "+tempval+". This value might be incorrectly configured.");\r
}\r
- m_tempdate.SetToGMTime();\r
+ m_tempdate=Poco::Timestamp();\r
}\r
\r
void TrustListRequester::PopulateIDList()\r
{\r
- DateTime date;\r
+ Poco::DateTime date;\r
int id;\r
std::string sql;\r
\r
- date.SetToGMTime();\r
-\r
// select identities we want to query (we've seen them today and they are publishing trust list) - sort by their trust level (descending) with secondary sort on how long ago we saw them (ascending)\r
sql="SELECT IdentityID FROM tblIdentity ";\r
- sql+="WHERE Name IS NOT NULL AND Name <> '' AND PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+date.Format("%Y-%m-%d")+"' AND PublishTrustList='true' AND LocalTrustListTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalTrustListTrust') AND ( PeerTrustListTrust IS NULL OR PeerTrustListTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerTrustListTrust') )";\r
+ sql+="WHERE Name IS NOT NULL AND Name <> '' AND PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND PublishTrustList='true' AND LocalTrustListTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalTrustListTrust') AND ( PeerTrustListTrust IS NULL OR PeerTrustListTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinPeerTrustListTrust') )";\r
sql+="ORDER BY LocalTrustListTrust DESC, LastSeen;";\r
\r
SQLite3DB::Statement st=m_db->Prepare(sql);\r
\r
void TrustListRequester::StartRequest(const long &identityid)\r
{\r
- DateTime now;\r
+ Poco::DateTime now;\r
FCPMessage message;\r
std::string publickey;\r
int index;\r
{\r
st.ResultText(0,publickey);\r
\r
- now.SetToGMTime();\r
-\r
SQLite3DB::Statement st2=m_db->Prepare("SELECT MAX(RequestIndex) FROM tblTrustListRequests WHERE Day=? AND IdentityID=?;");\r
- st2.Bind(0,now.Format("%Y-%m-%d"));\r
+ st2.Bind(0,Poco::DateTimeFormatter::format(now,"%Y-%m-%d"));\r
st2.Bind(1,identityid);\r
st2.Step();\r
\r
StringFunctions::Convert(identityid,identityidstr);\r
\r
message.SetName("ClientGet");\r
- message["URI"]=publickey+m_messagebase+"|"+now.Format("%Y-%m-%d")+"|TrustList|"+indexstr+".xml";\r
+ message["URI"]=publickey+m_messagebase+"|"+Poco::DateTimeFormatter::format(now,"%Y-%m-%d")+"|TrustList|"+indexstr+".xml";\r
message["Identifier"]=m_fcpuniquename+"|"+identityidstr+"|"+indexstr+"|"+message["URI"];\r
message["ReturnType"]="direct";\r
message["MaxSize"]="1000000"; // 1 MB\r