#include "../../include/freenet/boardlistrequester.h"\r
#include "../../include/freenet/boardlistxml.h"\r
\r
+#include <Poco/DateTime.h>\r
+#include <Poco/DateTimeFormatter.h>\r
+\r
#ifdef XMEM\r
#include <xmem.h>\r
#endif\r
Initialize();\r
}\r
\r
+std::string BoardListRequester::GetIdentityName(const long identityid)\r
+{\r
+ SQLite3DB::Statement 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::vector<std::string> keyparts;\r
+ std::string key;\r
+ std::string name;\r
+ st.ResultText(0,name);\r
+ st.ResultText(1,key);\r
+ \r
+ StringFunctions::SplitMultiple(key,"@,",keyparts);\r
+ \r
+ if(keyparts.size()>1)\r
+ {\r
+ return name+"@"+keyparts[1];\r
+ }\r
+ else\r
+ {\r
+ return name+"@invalidpublickey";\r
+ }\r
+ }\r
+ else\r
+ {\r
+ return "";\r
+ }\r
+}\r
+\r
const bool BoardListRequester::HandleAllData(FCPMessage &message)\r
{ \r
- DateTime now;\r
+ Poco::DateTime now;\r
SQLite3DB::Statement st;\r
std::vector<std::string> idparts;\r
long datalength;\r
BoardListXML xml;\r
long identityid;\r
long index;\r
+ std::string identityname="";\r
\r
- now.SetToGMTime();\r
StringFunctions::Split(message["Identifier"],"|",idparts);\r
StringFunctions::Convert(message["DataLength"],datalength);\r
StringFunctions::Convert(idparts[1],identityid);\r
StringFunctions::Convert(idparts[2],index);\r
\r
+ identityname=GetIdentityName(identityid);\r
+\r
// wait for all data to be received from connection\r
while(m_fcp->Connected() && m_fcp->ReceiveBufferSize()<datalength)\r
{\r
{\r
\r
SQLite3DB::Statement brd=m_db->Prepare("SELECT BoardID,BoardName,BoardDescription FROM tblBoard WHERE BoardName=?;");\r
- SQLite3DB::Statement ins=m_db->Prepare("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded) VALUES(?,?,?);");\r
+ SQLite3DB::Statement ins=m_db->Prepare("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded,SaveReceivedMessages,AddedMethod) VALUES(?,?,?,?,?);");\r
SQLite3DB::Statement upd=m_db->Prepare("UPDATE tblBoard SET BoardDescription=? WHERE BoardID=?;");\r
for(long i=0; i<xml.GetCount(); i++)\r
{\r
{\r
ins.Bind(0,xml.GetName(i));\r
ins.Bind(1,xml.GetDescription(i));\r
- ins.Bind(2,now.Format("%Y-%m-%d %H:%M:%S"));\r
+ ins.Bind(2,Poco::DateTimeFormatter::format(now,"%Y-%m-%d %H:%M:%S"));\r
+ if(m_savemessagesfromnewboards)\r
+ {\r
+ ins.Bind(3,"true");\r
+ }\r
+ else\r
+ {\r
+ ins.Bind(3,"false");\r
+ }\r
+ ins.Bind(4,"Board List of "+identityname);\r
ins.Step();\r
ins.Reset();\r
}\r
st.Step();\r
st.Finalize();\r
\r
- m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"BoardListRequester::HandleAllData parsed BoardList XML file : "+message["Identifier"]);\r
+ m_log->debug("BoardListRequester::HandleAllData parsed BoardList XML file : "+message["Identifier"]);\r
}\r
else\r
{\r
st.Step();\r
st.Finalize();\r
\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"BoardListRequester::HandleAllData error parsing BoardList XML file : "+message["Identifier"]);\r
+ m_log->error("BoardListRequester::HandleAllData error parsing BoardList XML file : "+message["Identifier"]);\r
}\r
\r
// remove this identityid from request list\r
\r
const bool BoardListRequester::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,"BoardListRequester::HandleGetFailed fatal error requesting "+message["Identifier"]);\r
+ m_log->error("BoardListRequester::HandleGetFailed fatal error requesting "+message["Identifier"]);\r
}\r
\r
// remove this identityid from request list\r
if(m_maxrequests<0)\r
{\r
m_maxrequests=0;\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"Option MaxBoardListRequests is currently set at "+tempval+". It must be 0 or greater.");\r
+ m_log->error("Option MaxBoardListRequests is currently set at "+tempval+". It must be 0 or greater.");\r
}\r
if(m_maxrequests>100)\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_WARNING,"Option MaxBoardListRequests is currently set at "+tempval+". This value might be incorrectly configured.");\r
+ m_log->warning("Option MaxBoardListRequests is currently set at "+tempval+". This value might be incorrectly configured.");\r
}\r
+\r
+ Option::Instance()->Get("SaveMessagesFromNewBoards",tempval);\r
+ if(tempval=="true")\r
+ {\r
+ m_savemessagesfromnewboards=true;\r
+ }\r
+ else\r
+ {\r
+ m_savemessagesfromnewboards=false;\r
+ }\r
+\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
}\r
\r
void BoardListRequester::PopulateIDList()\r
{\r
int id;\r
- DateTime today;\r
- today.SetToGMTime();\r
+ Poco::DateTime today;\r
\r
- SQLite3DB::Statement st=m_db->Prepare("SELECT IdentityID FROM tblIdentity WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND LastSeen>='"+today.Format("%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')) AND PublishBoardList='true' ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;");\r
+ SQLite3DB::Statement st;\r
+\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(today,"%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')) AND PublishBoardList='true' 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(today,"%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')))) AND PublishBoardList='true' ORDER BY LocalMessageTrust+LocalTrustListTrust DESC, LastSeen;");\r
+ }\r
st.Step();\r
\r
m_ids.clear();\r
\r
void BoardListRequester::StartRequest(const long &identityid)\r
{\r
- DateTime now;\r
+ Poco::DateTime now;\r
FCPMessage message;\r
std::string publickey;\r
std::string indexstr;\r
{\r
st.ResultText(0,publickey);\r
\r
- now.SetToGMTime();\r
-\r
SQLite3DB::Statement st2=m_db->Prepare("SELECT MAX(RequestIndex) FROM tblBoardListRequests 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")+"|BoardList|"+indexstr+".xml";\r
+ message["URI"]=publickey+m_messagebase+"|"+Poco::DateTimeFormatter::format(now,"%Y-%m-%d")+"|BoardList|"+indexstr+".xml";\r
message["Identifier"]=m_fcpuniquename+"|"+identityidstr+"|"+indexstr+"|"+message["URI"];\r
message["ReturnType"]="direct";\r
message["MaxSize"]="100000"; // 100 KB\r