\r
#include <algorithm>\r
\r
+#include <Poco/DateTime.h>\r
+#include <Poco/DateTimeFormatter.h>\r
+#include <Poco/Timespan.h>\r
+\r
#ifdef XMEM\r
#include <xmem.h>\r
#endif\r
}\r
else\r
{\r
- DateTime now;\r
- now.SetToGMTime();\r
+ Poco::DateTime now;\r
st=m_db->Prepare("INSERT INTO tblBoard(BoardName,DateAdded,SaveReceivedMessages,AddedMethod) VALUES(?,?,?,?);");\r
st.Bind(0,boardname);\r
- st.Bind(1,now.Format("%Y-%m-%d %H:%M:%S"));\r
+ st.Bind(1,Poco::DateTimeFormatter::format(now,"%Y-%m-%d %H:%M:%S"));\r
if(m_savemessagesfromnewboards)\r
{\r
st.Bind(2,"true");\r
\r
// receive the file\r
data.resize(datalength);\r
- m_fcp->ReceiveRaw(&data[0],datalength);\r
+ if(data.size()>0)\r
+ {\r
+ m_fcp->ReceiveRaw(&data[0],datalength);\r
+ }\r
\r
// mark this index as received\r
st=m_db->Prepare("UPDATE tblMessageRequests SET Found='true' WHERE IdentityID=? AND Day=? AND RequestIndex=?;");\r
st.Finalize();\r
\r
// parse file into xml and update the database\r
- if(xml.ParseXML(std::string(data.begin(),data.end()))==true)\r
+ if(data.size()>0 && xml.ParseXML(std::string(data.begin(),data.end()))==true)\r
{\r
std::vector<std::string> boards=xml.GetBoards();\r
std::map<long,std::string> replyto=xml.GetInReplyTo();\r
\r
if(boards.size()<=0)\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"MessageRequester::HandleAllData Message XML did not contain any boards! "+message["Identifier"]);\r
+ m_log->error("MessageRequester::HandleAllData Message XML did not contain any boards! "+message["Identifier"]);\r
// remove this identityid from request list\r
RemoveFromRequestList(idparts[1]); \r
return true;\r
}\r
if(xml.GetReplyBoard()=="")\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"MessageRequester::HandleAllData Message XML did not contain a reply board! "+message["Identifier"]);\r
+ m_log->error("MessageRequester::HandleAllData Message XML did not contain a reply board! "+message["Identifier"]);\r
// remove this identityid from request list\r
RemoveFromRequestList(idparts[1]); \r
return true;\r
keypart=StringFunctions::Replace(StringFunctions::Replace(keyparts[1],"-",""),"~","");\r
if(keypart!=uuidparts[1])\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"MessageRequester::HandleAllData MessageID in Message doesn't match public key of identity : "+message["Identifier"]);\r
+ m_log->error("MessageRequester::HandleAllData MessageID in Message doesn't match public key of identity : "+message["Identifier"]);\r
validmessage=false;\r
}\r
}\r
else\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"MessageRequester::HandleAllData Error with identity's public key or Message ID : "+message["Identifier"]);\r
+ m_log->error("MessageRequester::HandleAllData Error with identity's public key or Message ID : "+message["Identifier"]);\r
validmessage=false;\r
}\r
}\r
else\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"MessageRequester::HandleAllData Error couldn't find identity : "+message["Identifier"]);\r
+ m_log->error("MessageRequester::HandleAllData Error couldn't find identity : "+message["Identifier"]);\r
validmessage=false;\r
}\r
\r
}\r
st.Finalize();\r
\r
- m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"MessageRequester::HandleAllData parsed Message XML file : "+message["Identifier"]);\r
+ m_log->debug("MessageRequester::HandleAllData parsed Message XML file : "+message["Identifier"]);\r
\r
}\r
else // couldn't insert - was already in database\r
}\r
else\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"MessageRequester::HandleAllData error parsing Message XML file : "+message["Identifier"]);\r
+ m_log->error("MessageRequester::HandleAllData error parsing Message XML file : "+message["Identifier"]);\r
}\r
\r
RemoveFromRequestList(idparts[1]);\r
\r
const bool MessageRequester::HandleGetFailed(FCPMessage &message)\r
{\r
- DateTime now;\r
SQLite3DB::Statement st;\r
std::vector<std::string> idparts;\r
std::string requestid;\r
long index;\r
long identityid;\r
\r
- now.SetToGMTime();\r
StringFunctions::Split(message["Identifier"],"|",idparts);\r
requestid=idparts[1];\r
StringFunctions::Convert(idparts[2],identityid);\r
st.Step();\r
st.Finalize();\r
\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"MessageRequester::HandleGetFailed fatal error requesting "+message["Identifier"]);\r
+ m_log->error("MessageRequester::HandleGetFailed fatal error requesting "+message["Identifier"]);\r
}\r
\r
// remove this identityid from request list\r
{\r
m_fcpuniquename="MessageRequester";\r
std::string tempval;\r
- Option::Instance()->Get("MaxMessageRequests",tempval);\r
- StringFunctions::Convert(tempval,m_maxrequests);\r
+\r
+ m_maxrequests=0;\r
+ Option::Instance()->GetInt("MaxMessageRequests",m_maxrequests);\r
if(m_maxrequests<1)\r
{\r
m_maxrequests=1;\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"Option MaxMessageRequests is currently set at "+tempval+". It must be 1 or greater.");\r
+ m_log->error("Option MaxMessageRequests 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 MaxMessageRequests is currently set at "+tempval+". This value might be incorrectly configured.");\r
+ m_log->warning("Option MaxMessageRequests is currently set at "+tempval+". This value might be incorrectly configured.");\r
}\r
- Option::Instance()->Get("MessageDownloadMaxDaysBackward",tempval);\r
- StringFunctions::Convert(tempval,m_maxdaysbackward);\r
+\r
+ m_maxdaysbackward=0;\r
+ Option::Instance()->GetInt("MessageDownloadMaxDaysBackward",m_maxdaysbackward);\r
if(m_maxdaysbackward<0)\r
{\r
m_maxdaysbackward=0;\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"Option MessageDownloadMaxDaysBackward is currently set at "+tempval+". It must be 0 or greater.");\r
+ m_log->error("Option MessageDownloadMaxDaysBackward is currently set at "+tempval+". It must be 0 or greater.");\r
}\r
if(m_maxdaysbackward>30)\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_WARNING,"Option MessageDownloadMaxDaysBackward is currently set at "+tempval+". This value might be incorrectly configured.");\r
+ m_log->warning("Option MessageDownloadMaxDaysBackward is currently set at "+tempval+". This value might be incorrectly configured.");\r
}\r
- Option::Instance()->Get("MaxPeerMessagesPerDay",tempval);\r
- StringFunctions::Convert(tempval,m_maxpeermessages);\r
+\r
+ m_maxpeermessages=0;\r
+ Option::Instance()->GetInt("MaxPeerMessagesPerDay",m_maxpeermessages);\r
if(m_maxpeermessages<1)\r
{\r
m_maxpeermessages=1;\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"Option MaxPeerMessagesPerDay is currently set at "+tempval+". It must be 1 or greater.");\r
+ m_log->error("Option MaxPeerMessagesPerDay is currently set at "+tempval+". It must be 1 or greater.");\r
}\r
if(m_maxpeermessages<20 || m_maxpeermessages>1000)\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_WARNING,"Option MaxPeerMessagesPerDay is currently set at "+tempval+". This value might be incorrectly configured. The suggested value is 200.");\r
+ m_log->warning("Option MaxPeerMessagesPerDay is currently set at "+tempval+". This value might be incorrectly configured. The suggested value is 200.");\r
}\r
- Option::Instance()->Get("MaxBoardsPerMessage",tempval);\r
- StringFunctions::Convert(tempval,m_maxboardspermessage);\r
+\r
+ m_maxboardspermessage=0;\r
+ Option::Instance()->GetInt("MaxBoardsPerMessage",m_maxboardspermessage);\r
if(m_maxboardspermessage<1)\r
{\r
m_maxboardspermessage=1;\r
- m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"Option MaxBoardsPerMessage is currently set at "+tempval+". It must be 1 or greater.");\r
+ m_log->error("Option MaxBoardsPerMessage is currently set at "+tempval+". It must be 1 or greater.");\r
}\r
if(m_maxboardspermessage>20)\r
{\r
- m_log->WriteLog(LogFile::LOGLEVEL_WARNING,"Option MaxBoardsPerMessage is currently set at "+tempval+". This value might be incorrectly configured.");\r
+ m_log->warning("Option MaxBoardsPerMessage is currently set at "+tempval+". This value might be incorrectly configured.");\r
}\r
\r
Option::Instance()->Get("SaveMessagesFromNewBoards",tempval);\r
\r
void MessageRequester::PopulateIDList()\r
{\r
- DateTime date;\r
+ Poco::DateTime date;\r
std::string val1;\r
std::string val2;\r
std::string val3;\r
std::string sql;\r
long requestindex;\r
\r
- date.SetToGMTime();\r
- date.Add(0,0,0,-m_maxdaysbackward);\r
+ date-=Poco::Timespan(m_maxdaysbackward,0,0,0,0);\r
\r
sql="SELECT tblIdentity.IdentityID,Day,RequestIndex ";\r
sql+="FROM tblMessageRequests INNER JOIN tblIdentity ON tblMessageRequests.IdentityID=tblIdentity.IdentityID ";\r
- sql+="WHERE FromMessageList='true' AND Found='false' AND Day>='"+date.Format("%Y-%m-%d")+"' ";\r
+ sql+="WHERE FromMessageList='true' AND Found='false' AND Day>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' ";\r
if(m_localtrustoverrides==false)\r
{\r
sql+="AND (tblIdentity.LocalMessageTrust IS NULL OR tblIdentity.LocalMessageTrust>=(SELECT OptionValue FROM tblOption WHERE Option='MinLocalMessageTrust')) ";\r
}\r
sql+="AND tblIdentity.Name <> '' ";\r
// sort by day descending - in case there is a bunch of messages on a day that keep timing out, we will eventually get to the next day and hopefully find messages there\r
- sql+="ORDER BY tblMessageRequests.Day DESC ";\r
+ // secondary ascending sort on tries\r
+ // tertiary sort on request index (so we get low indexes first)\r
+ sql+="ORDER BY tblMessageRequests.Day DESC, tblMessageRequests.Tries ASC, tblMessageRequests.RequestIndex ASC ";\r
sql+=";";\r
\r
SQLite3DB::Statement st=m_db->Prepare(sql);\r
\r
m_requesting.push_back(requestid);\r
\r
- m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"MessageRequester::StartRequest requesting "+message["Identifier"]);\r
+ // update tries\r
+ st=m_db->Prepare("UPDATE tblMessageRequests SET Tries=Tries+1 WHERE IdentityID=? AND Day=? AND RequestIndex=?;");\r
+ st.Bind(0,identityid);\r
+ st.Bind(1,date);\r
+ st.Bind(2,indexstr);\r
+ st.Step();\r
+\r
+ m_log->debug("MessageRequester::StartRequest requesting "+message["Identifier"]);\r
}\r
\r
m_ids[requestid]=true;\r