From 14fff12d9df0ee30e2df4bf9d22c2e83065816df Mon Sep 17 00:00:00 2001
From: SomeDude
Date: Wed, 7 May 2008 07:52:00 +0200
Subject: [PATCH] version 0.2.14
---
include/global.h | 4 +-
include/http/ipagehandler.h | 1 +
include/http/pages/homepage.h | 3 +-
include/http/pages/localidentitiespage.h | 2 -
src/fmsservice.cpp | 8 +++
src/freenet/introductionpuzzleinserter.cpp | 4 +-
src/freenet/introductionpuzzlerequester.cpp | 4 +-
src/global.cpp | 20 +++++++-
src/http/ipagehandler.cpp | 22 ++++++++
src/http/pages/homepage.cpp | 20 ++++++++
src/http/pages/localidentitiespage.cpp | 22 --------
src/http/pages/optionspage.cpp | 11 +++-
src/localidentity.cpp | 2 +-
src/main.cpp | 2 +
src/message.cpp | 80 ++++++++++++++++-------------
15 files changed, 133 insertions(+), 72 deletions(-)
diff --git a/include/global.h b/include/global.h
index b1b315b..7dcc373 100644
--- a/include/global.h
+++ b/include/global.h
@@ -5,7 +5,7 @@
#include
#include "pthreadwrapper/thread.h"
-#define FMS_VERSION "0.2.13"
+#define FMS_VERSION "0.2.14"
// opens database and creates tables and initial inserts if necessary
void SetupDB();
@@ -38,6 +38,6 @@ void SetupNetwork();
// cleanup network on Windows
void ShutdownNetwork();
-extern bool wantshutdown;
+extern volatile bool wantshutdown;
#endif // _global_
diff --git a/include/http/ipagehandler.h b/include/http/ipagehandler.h
index 6cd3052..66e15b8 100644
--- a/include/http/ipagehandler.h
+++ b/include/http/ipagehandler.h
@@ -30,6 +30,7 @@ protected:
void HandleMultiPartData(const std::string &contenttypeheader, char *data, const long datalen, std::map &args);
// converts from basename[#] query args into a vector where the vector pos is the index pos #
void CreateArgArray(const std::map &vars, const std::string &basename, std::vector &args);
+ const std::string CreateTrueFalseDropDown(const std::string &name, const std::string &selected);
// replaces html control characters with elements (i.e. < becomes <)
const std::string SanitizeOutput(const std::string &input);
diff --git a/include/http/pages/homepage.h b/include/http/pages/homepage.h
index d8eaa0c..0205557 100644
--- a/include/http/pages/homepage.h
+++ b/include/http/pages/homepage.h
@@ -2,8 +2,9 @@
#define _homepage_
#include "../ipagehandler.h"
+#include "../../idatabase.h"
-class HomePage:public IPageHandler
+class HomePage:public IPageHandler,public IDatabase
{
public:
HomePage(const std::string &templatestr):IPageHandler(templatestr) {}
diff --git a/include/http/pages/localidentitiespage.h b/include/http/pages/localidentitiespage.h
index bc687e1..71e0caa 100644
--- a/include/http/pages/localidentitiespage.h
+++ b/include/http/pages/localidentitiespage.h
@@ -12,8 +12,6 @@ private:
const bool WillHandleURI(const std::string &uri);
const std::string GeneratePage(const std::string &method, const std::map &queryvars);
- const std::string CreateTrueFalseDropDown(const std::string &name, const std::string &selected);
-
};
#endif // _localidentitiespage_
diff --git a/src/fmsservice.cpp b/src/fmsservice.cpp
index e24a53f..03e2b8e 100644
--- a/src/fmsservice.cpp
+++ b/src/fmsservice.cpp
@@ -1,5 +1,6 @@
#include "../include/fmsservice.h"
#include "../include/global.h"
+#include "../include/logfile.h"
#include
@@ -22,6 +23,7 @@ void ControlHandler(DWORD request)
case SERVICE_CONTROL_SHUTDOWN:
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
+ LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"ControlHandler service got shutdown request");
wantshutdown=true;
break;
@@ -170,11 +172,17 @@ void ServiceMain(int argc, char** argv)
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);
+ LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"ServiceMain starting service");
+
MainFunction();
+ LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"ServiceMain stopping service");
+
ServiceStatus.dwCurrentState=SERVICE_STOPPED;
SetServiceStatus(hStatus,&ServiceStatus);
+ LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"ServiceMain returning");
+
return;
}
diff --git a/src/freenet/introductionpuzzleinserter.cpp b/src/freenet/introductionpuzzleinserter.cpp
index 66635bb..9bb4da8 100644
--- a/src/freenet/introductionpuzzleinserter.cpp
+++ b/src/freenet/introductionpuzzleinserter.cpp
@@ -22,8 +22,8 @@ IntroductionPuzzleInserter::IntroductionPuzzleInserter(FCPv2 *fcp):IFCPConnected
void IntroductionPuzzleInserter::CheckForNeededInsert()
{
- // select all local ids that aren't single use and that aren't currently inserting a puzzle
- SQLite3DB::Recordset rs=m_db->Query("SELECT LocalIdentityID FROM tblLocalIdentity WHERE SingleUse='false' AND InsertingPuzzle='false' AND PrivateKey IS NOT NULL AND PrivateKey <> '' ORDER BY LastInsertedPuzzle;");
+ // select all local ids that aren't single use and that aren't currently inserting a puzzle and are publishing a trust list
+ SQLite3DB::Recordset rs=m_db->Query("SELECT LocalIdentityID FROM tblLocalIdentity WHERE PublishTrustList='true' AND SingleUse='false' AND InsertingPuzzle='false' AND PrivateKey IS NOT NULL AND PrivateKey <> '' ORDER BY LastInsertedPuzzle;");
while(!rs.AtEnd())
{
diff --git a/src/freenet/introductionpuzzlerequester.cpp b/src/freenet/introductionpuzzlerequester.cpp
index 1a24bd0..39ffb36 100644
--- a/src/freenet/introductionpuzzlerequester.cpp
+++ b/src/freenet/introductionpuzzlerequester.cpp
@@ -252,8 +252,8 @@ void IntroductionPuzzleRequester::PopulateIDList()
now.SetToGMTime();
- // select identities that aren't single use and have been seen today ( order by trust DESC and limit to limitnum )
- st=m_db->Prepare("SELECT IdentityID FROM tblIdentity WHERE PublicKey IS NOT NULL AND PublicKey <> '' AND SingleUse='false' AND LastSeen>='"+now.Format("%Y-%m-%d")+"' ORDER BY LocalMessageTrust DESC LIMIT 0,"+limitnum+";");
+ // select identities that aren't single use, are publishing a trust list, and have been seen today ( order by trust DESC and limit to limitnum )
+ st=m_db->Prepare("SELECT IdentityID FROM tblIdentity WHERE PublishTrustList='true' AND PublicKey IS NOT NULL AND PublicKey <> '' AND SingleUse='false' AND LastSeen>='"+now.Format("%Y-%m-%d")+"' ORDER BY LocalMessageTrust DESC LIMIT 0,"+limitnum+";");
st.Step();
m_ids.clear();
diff --git a/src/global.cpp b/src/global.cpp
index 38d51bc..ec296c1 100644
--- a/src/global.cpp
+++ b/src/global.cpp
@@ -17,7 +17,7 @@
#include
#endif
-bool wantshutdown=false;
+volatile bool wantshutdown=false;
std::string CreateShortIdentityName(const std::string &name, const std::string &publickey)
{
@@ -39,11 +39,18 @@ void SetupDB()
{
DateTime date;
+ std::string tempval="";
SQLite3DB::DB *db=SQLite3DB::DB::Instance();
db->Open("fms.db3");
db->SetBusyTimeout(10000); // set timeout to 10 seconds
- //db->Execute("VACUUM;"); // not needed every startup
+
+ tempval="";
+ Option::Instance()->Get("VacuumOnStartup",tempval);
+ if(tempval=="true")
+ {
+ db->Execute("VACUUM;");
+ }
db->Execute("CREATE TABLE IF NOT EXISTS tblDBVersion(\
Major INTEGER,\
@@ -864,6 +871,12 @@ void SetupDefaultOptions()
st.Step();
st.Reset();
+ st.Bind(0,"VacuumOnStartup");
+ st.Bind(1,"false");
+ st.Bind(2,"VACUUM the database every time FMS starts. This will defragment the free space in the database and create a smaller database file. Vacuuming the database can be CPU and disk intensive.");
+ st.Step();
+ st.Reset();
+
}
void SetupLogFile()
@@ -903,6 +916,9 @@ void SetupNetwork()
void Shutdown()
{
+
+ LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"FMS starting shutdown");
+
ThreadController::Instance()->ShutdownThreads();
ShutdownNetwork();
diff --git a/src/http/ipagehandler.cpp b/src/http/ipagehandler.cpp
index 8599c23..6edd8ac 100644
--- a/src/http/ipagehandler.cpp
+++ b/src/http/ipagehandler.cpp
@@ -33,6 +33,28 @@ void IPageHandler::CreateArgArray(const std::map &vars,
}
}
+const std::string IPageHandler::CreateTrueFalseDropDown(const std::string &name, const std::string &selected)
+{
+ std::string rval="";
+
+ rval+="";
+
+ return rval;
+}
+
const bool IPageHandler::Handle(shttpd_arg *arg)
{
const char *uri=shttpd_get_env(arg,"REQUEST_URI");
diff --git a/src/http/pages/homepage.cpp b/src/http/pages/homepage.cpp
index f305f30..1a65cf4 100644
--- a/src/http/pages/homepage.cpp
+++ b/src/http/pages/homepage.cpp
@@ -9,6 +9,9 @@
const std::string HomePage::GeneratePage(const std::string &method, const std::map &queryvars)
{
+ std::string messagecountstr="";
+ std::string filecountstr="";
+
if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="shutdown")
{
wantshutdown=true;
@@ -21,12 +24,29 @@ const std::string HomePage::GeneratePage(const std::string &method, const std::m
content+="
";
content+="Use these pages to administer your FMS installation.";
content+="
";
+
+ SQLite3DB::Statement st=m_db->Prepare("SELECT COUNT(*) FROM tblMessageInserts WHERE Inserted='false';");
+ st.Step();
+ if(st.RowReturned())
+ {
+ st.ResultText(0,messagecountstr);
+ }
+ content+="Messages waiting to be inserted:"+messagecountstr+"
";
+ st=m_db->Prepare("SELECT COUNT(*) FROM tblFileInserts WHERE Key IS NULL;");
+ st.Step();
+ if(st.RowReturned())
+ {
+ st.ResultText(0,filecountstr);
+ }
+ content+="Files waiting to be inserted:"+filecountstr+"
";
+
content+="";
content+="
";
content+="";
+
return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
}
diff --git a/src/http/pages/localidentitiespage.cpp b/src/http/pages/localidentitiespage.cpp
index 8b26238..3fd3c48 100644
--- a/src/http/pages/localidentitiespage.cpp
+++ b/src/http/pages/localidentitiespage.cpp
@@ -7,28 +7,6 @@
#include
#endif
-const std::string LocalIdentitiesPage::CreateTrueFalseDropDown(const std::string &name, const std::string &selected)
-{
- std::string rval="";
-
- rval+="";
-
- return rval;
-}
-
const std::string LocalIdentitiesPage::GeneratePage(const std::string &method, const std::map &queryvars)
{
int count;
diff --git a/src/http/pages/optionspage.cpp b/src/http/pages/optionspage.cpp
index 4c39834..7743738 100644
--- a/src/http/pages/optionspage.cpp
+++ b/src/http/pages/optionspage.cpp
@@ -52,7 +52,16 @@ const std::string OptionsPage::GeneratePage(const std::string &method, const std
content+="";
content+=""+option+" | ";
content+="";
- content+=" | ";
+
+ if(value!="true" && value!="false")
+ {
+ content+="";
+ }
+ else
+ {
+ content+=CreateTrueFalseDropDown("value["+countstr+"]",value);
+ }
+
content+=""+description+" | ";
content+="
";
st.Step();
diff --git a/src/localidentity.cpp b/src/localidentity.cpp
index 35843a3..fc749b9 100644
--- a/src/localidentity.cpp
+++ b/src/localidentity.cpp
@@ -57,4 +57,4 @@ const bool LocalIdentity::Load(const std::string &name)
{
return false;
}
-}
\ No newline at end of file
+}
diff --git a/src/main.cpp b/src/main.cpp
index 69edc54..c2c499f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -134,5 +134,7 @@ void MainFunction()
PThread::Sleep(1000);
}while(!wantshutdown);
+ LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"FMS wants to shutdown");
+
Shutdown();
}
diff --git a/src/message.cpp b/src/message.cpp
index d7aaf3f..53d8b34 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -729,50 +729,56 @@ const bool Message::StartFreenetInsert()
MessageXML xml;
int localidentityid=-1;
- xml.SetMessageID(m_messageuuid);
- xml.SetSubject(m_subject);
- xml.SetBody(m_body);
- xml.SetReplyBoard(m_replyboardname);
- xml.SetDate(m_datetime.Format("%Y-%m-%d"));
- xml.SetTime(m_datetime.Format("%H:%M:%S"));
-
StripAdministrationBoards();
- for(std::vector::iterator i=m_boards.begin(); i!=m_boards.end(); i++)
- {
- xml.AddBoard((*i));
- }
-
- for(std::map::iterator j=m_inreplyto.begin(); j!=m_inreplyto.end(); j++)
- {
- xml.AddInReplyTo((*j).first,(*j).second);
- }
- localidentityid=FindLocalIdentityID(m_fromname);
- if(localidentityid==-1)
+ if(m_boards.size()>0)
{
- return false;
- }
- SQLite3DB::Statement st=m_db->Prepare("INSERT INTO tblMessageInserts(LocalIdentityID,MessageUUID,MessageXML) VALUES(?,?,?);");
- st.Bind(0,localidentityid);
- st.Bind(1,m_messageuuid);
- st.Bind(2,xml.GetXML());
- st.Step();
+ xml.SetMessageID(m_messageuuid);
+ xml.SetSubject(m_subject);
+ xml.SetBody(m_body);
+ xml.SetReplyBoard(m_replyboardname);
+ xml.SetDate(m_datetime.Format("%Y-%m-%d"));
+ xml.SetTime(m_datetime.Format("%H:%M:%S"));
+
+ for(std::vector::iterator i=m_boards.begin(); i!=m_boards.end(); i++)
+ {
+ xml.AddBoard((*i));
+ }
+
+ for(std::map::iterator j=m_inreplyto.begin(); j!=m_inreplyto.end(); j++)
+ {
+ xml.AddInReplyTo((*j).first,(*j).second);
+ }
- // insert file attachments into database
- st=m_db->Prepare("INSERT INTO tblFileInserts(MessageUUID,FileName,Size,MimeType,Data) VALUES(?,?,?,?,?);");
- for(std::vector::iterator i=m_fileattachments.begin(); i!=m_fileattachments.end(); i++)
- {
- st.Bind(0,m_messageuuid);
- st.Bind(1,(*i).m_filename);
- st.Bind(2,(long)(*i).m_data.size());
- st.Bind(3,(*i).m_mimetype);
- st.Bind(4,&((*i).m_data[0]),(*i).m_data.size());
+ localidentityid=FindLocalIdentityID(m_fromname);
+ if(localidentityid==-1)
+ {
+ return false;
+ }
+
+ SQLite3DB::Statement st=m_db->Prepare("INSERT INTO tblMessageInserts(LocalIdentityID,MessageUUID,MessageXML) VALUES(?,?,?);");
+ st.Bind(0,localidentityid);
+ st.Bind(1,m_messageuuid);
+ st.Bind(2,xml.GetXML());
st.Step();
- st.Reset();
- }
- HandleChangeTrust();
+ // insert file attachments into database
+ st=m_db->Prepare("INSERT INTO tblFileInserts(MessageUUID,FileName,Size,MimeType,Data) VALUES(?,?,?,?,?);");
+ for(std::vector::iterator i=m_fileattachments.begin(); i!=m_fileattachments.end(); i++)
+ {
+ st.Bind(0,m_messageuuid);
+ st.Bind(1,(*i).m_filename);
+ st.Bind(2,(long)(*i).m_data.size());
+ st.Bind(3,(*i).m_mimetype);
+ st.Bind(4,&((*i).m_data[0]),(*i).m_data.size());
+ st.Step();
+ st.Reset();
+ }
+
+ HandleChangeTrust();
+
+ }
return true;
--
2.7.4