version 0.2.14
[fms.git] / src / global.cpp
index 587f141..ec296c1 100644 (file)
@@ -17,7 +17,7 @@
        #include <xmem.h>\r
 #endif\r
 \r
        #include <xmem.h>\r
 #endif\r
 \r
-bool wantshutdown=false;\r
+volatile bool wantshutdown=false;\r
 \r
 std::string CreateShortIdentityName(const std::string &name, const std::string &publickey)\r
 {\r
 \r
 std::string CreateShortIdentityName(const std::string &name, const std::string &publickey)\r
 {\r
@@ -39,11 +39,18 @@ void SetupDB()
 {\r
 \r
        DateTime date;\r
 {\r
 \r
        DateTime date;\r
+       std::string tempval="";\r
        SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
 \r
        db->Open("fms.db3");\r
        db->SetBusyTimeout(10000);              // set timeout to 10 seconds\r
        SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
 \r
        db->Open("fms.db3");\r
        db->SetBusyTimeout(10000);              // set timeout to 10 seconds\r
-       //db->Execute("VACUUM;");               // not needed every startup\r
+\r
+       tempval="";\r
+       Option::Instance()->Get("VacuumOnStartup",tempval);\r
+       if(tempval=="true")\r
+       {\r
+               db->Execute("VACUUM;");\r
+       }\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblDBVersion(\\r
                                Major                           INTEGER,\\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblDBVersion(\\r
                                Major                           INTEGER,\\r
@@ -95,13 +102,31 @@ void SetupDB()
                        major=1;\r
                        minor=7;\r
                }\r
                        major=1;\r
                        minor=7;\r
                }\r
+               if(major==1 && minor==7)\r
+               {\r
+                       ConvertDB0107To0108();\r
+                       major=1;\r
+                       minor=8;\r
+               }\r
+               if(major==1 && minor==8)\r
+               {\r
+                       ConvertDB0108To0109();\r
+                       major=1;\r
+                       minor=9;\r
+               }\r
+               if(major==1 && minor==9)\r
+               {\r
+                       ConvertDB0109To0110();\r
+                       major=1;\r
+                       minor=10;\r
+               }\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
-               db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,7);");\r
+               db->Execute("INSERT INTO tblDBVersion(Major,Minor) VALUES(1,10);");\r
        }\r
 \r
        }\r
 \r
-       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=7;");\r
+       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=10;");\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblOption(\\r
                                Option                          TEXT UNIQUE,\\r
 \r
        db->Execute("CREATE TABLE IF NOT EXISTS tblOption(\\r
                                Option                          TEXT UNIQUE,\\r
@@ -118,6 +143,7 @@ void SetupDB()
                                PublishTrustList                BOOL CHECK(PublishTrustList IN('true','false')) DEFAULT 'false',\\r
                                PublishBoardList                BOOL CHECK(PublishBoardList IN('true','false')) DEFAULT 'false',\\r
                                PublishFreesite                 BOOL CHECK(PublishFreesite IN('true','false')) DEFAULT 'false',\\r
                                PublishTrustList                BOOL CHECK(PublishTrustList IN('true','false')) DEFAULT 'false',\\r
                                PublishBoardList                BOOL CHECK(PublishBoardList IN('true','false')) DEFAULT 'false',\\r
                                PublishFreesite                 BOOL CHECK(PublishFreesite IN('true','false')) DEFAULT 'false',\\r
+                               FreesiteEdition                 INTEGER,\\r
                                InsertingIdentity               BOOL CHECK(InsertingIdentity IN('true','false')) DEFAULT 'false',\\r
                                LastInsertedIdentity    DATETIME,\\r
                                InsertingPuzzle                 BOOL CHECK(InsertingPuzzle IN('true','false')) DEFAULT 'false',\\r
                                InsertingIdentity               BOOL CHECK(InsertingIdentity IN('true','false')) DEFAULT 'false',\\r
                                LastInsertedIdentity    DATETIME,\\r
                                InsertingPuzzle                 BOOL CHECK(InsertingPuzzle IN('true','false')) DEFAULT 'false',\\r
@@ -170,6 +196,7 @@ void SetupDB()
                                SingleUse                               BOOL CHECK(SingleUse IN('true','false')) DEFAULT 'false',\\r
                                PublishTrustList                BOOL CHECK(PublishTrustList IN('true','false')) DEFAULT 'false',\\r
                                PublishBoardList                BOOL CHECK(PublishBoardList IN('true','false')) DEFAULT 'false',\\r
                                SingleUse                               BOOL CHECK(SingleUse IN('true','false')) DEFAULT 'false',\\r
                                PublishTrustList                BOOL CHECK(PublishTrustList IN('true','false')) DEFAULT 'false',\\r
                                PublishBoardList                BOOL CHECK(PublishBoardList IN('true','false')) DEFAULT 'false',\\r
+                               FreesiteEdition                 INTEGER,\\r
                                DateAdded                               DATETIME,\\r
                                LastSeen                                DATETIME,\\r
                                LocalMessageTrust               INTEGER CHECK(LocalMessageTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
                                DateAdded                               DATETIME,\\r
                                LastSeen                                DATETIME,\\r
                                LocalMessageTrust               INTEGER CHECK(LocalMessageTrust BETWEEN 0 AND 100) DEFAULT NULL,\\r
@@ -320,6 +347,16 @@ void SetupDB()
                                Inserted                        BOOL CHECK(Inserted IN('true','false')) DEFAULT 'false'\\r
                                );");\r
 \r
                                Inserted                        BOOL CHECK(Inserted IN('true','false')) DEFAULT 'false'\\r
                                );");\r
 \r
+       db->Execute("CREATE TABLE IF NOT EXISTS tblFileInserts(\\r
+                               FileInsertID            INTEGER PRIMARY KEY,\\r
+                               MessageUUID                     TEXT,\\r
+                               FileName                        TEXT,\\r
+                               Key                                     TEXT,\\r
+                               Size                            INTEGER,\\r
+                               MimeType                        TEXT,\\r
+                               Data                            BLOB\\r
+                               );");\r
+\r
        db->Execute("CREATE TABLE IF NOT EXISTS tblMessageListInserts(\\r
                                LocalIdentityID         INTEGER,\\r
                                Day                                     DATE,\\r
        db->Execute("CREATE TABLE IF NOT EXISTS tblMessageListInserts(\\r
                                LocalIdentityID         INTEGER,\\r
                                Day                                     DATE,\\r
@@ -468,6 +505,20 @@ void SetupDB()
        db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@~mimyB1kmH4f7Cgsd2wM2Qv2NxrZHRMM6IY8~7EWRVQ,fxTKkR0TYhgMYb-vEGAv55sMOxCGD2xhE4ZxWHxdPz4,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
        // insert garfield's public key\r
        db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@T8l1IEGU4-PoASFzgc2GYhIgRzUvZsKdoQWeuLHuTmM,QLxAPfkGis8l5NafNpSCdbxzXhBlu9WL8svcqJw9Mpo,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
        db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@~mimyB1kmH4f7Cgsd2wM2Qv2NxrZHRMM6IY8~7EWRVQ,fxTKkR0TYhgMYb-vEGAv55sMOxCGD2xhE4ZxWHxdPz4,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
        // insert garfield's public key\r
        db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@T8l1IEGU4-PoASFzgc2GYhIgRzUvZsKdoQWeuLHuTmM,QLxAPfkGis8l5NafNpSCdbxzXhBlu9WL8svcqJw9Mpo,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
+       // insert alek's public key\r
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@lTjeI6V0lQsktXqaqJ6Iwk4TdsHduQI54rdUpHfhGbg,0oTYfrxxx8OmdU1~60gqpf3781qzEicM4Sz97mJsBM4,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
+       // insert Luke771's public key\r
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@mdXK~ZVlfTZhF1SLBrvZ--i0vOsOpa~w9wv~~psQ-04,gXonsXKc7aexKSO8Gt8Fwre4Qgmmbt2WueO7VzxNKkk,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
+       // insert falafel's public key\r
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@IxVqeqM0LyYdTmYAf5z49SJZUxr7NtQkOqVYG0hvITw,RM2wnMn5zAufCMt5upkkgq25B1elfBAxc7htapIWg1c,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
+       // insert cptn_insano's public key\r
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@bloE1LJ~qzSYUkU2nt7sB9kq060D4HTQC66pk5Q8NpA,DOOASUnp0kj6tOdhZJ-h5Tk7Ka50FSrUgsH7tCG1usU,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
+       // insert Flink's public key\r
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@q2TtkNBOuuniyJ56~8NSopCs3ttwe5KlB31ugZtWmXA,6~PzIupS8YK7L6oFNpXGKJmHT2kBMDfwTg73nHdNur8,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
+       // insert Kane's public key\r
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@Ofm~yZivDJ5Z2fSzZbMiLEUUQaIc0KHRdZMBTaPLO6I,WLm4s4hNbOOurJ6ijfOq4odz7-dN7uTUvYxJRwWnlMI,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
+       // inserts boardstat's public key\r
+       db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,AddedMethod) VALUES('SSK@aYWBb6zo2AM13XCNhsmmRKMANEx6PG~C15CWjdZziKA,X1pAG4EIqR1gAiyGFVZ1iiw-uTlh460~rFACJ7ZHQXk,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"','Initial Identity');");\r
 \r
        // TODO remove sometime after 0.1.17\r
        FixCapitalBoardNames();\r
 \r
        // TODO remove sometime after 0.1.17\r
        FixCapitalBoardNames();\r
@@ -581,6 +632,36 @@ void ConvertDB0106To0107()
        db->Execute("UPDATE tblDBVersion SET Major=1, Minor=7;");\r
 }\r
 \r
        db->Execute("UPDATE tblDBVersion SET Major=1, Minor=7;");\r
 }\r
 \r
+void ConvertDB0107To0108()\r
+{\r
+       // add FreesiteEdition to tblLocalIdentity and tblIdentity\r
+       SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
+       db->Execute("ALTER TABLE tblLocalIdentity ADD COLUMN FreesiteEdition INTEGER;");\r
+       db->Execute("ALTER TABLE tblIdentity ADD COLUMN FreesiteEdition INTEGER;");\r
+       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=8;");\r
+}\r
+\r
+void ConvertDB0108To0109()\r
+{\r
+       SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
+       db->Execute("CREATE TABLE IF NOT EXISTS tblFileInserts(\\r
+                       FileInsertID            INTEGER PRIMARY KEY,\\r
+                       MessageUUID                     TEXT,\\r
+                       FileName                        TEXT,\\r
+                       Key                                     TEXT,\\r
+                       Size                            INTEGER,\\r
+                       Data                            BLOB\\r
+                       );");\r
+       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=9;");\r
+}\r
+\r
+void ConvertDB0109To0110()\r
+{\r
+       SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
+       db->Execute("ALTER TABLE tblFileInserts ADD COLUMN MimeType TEXT;");\r
+       db->Execute("UPDATE tblDBVersion SET Major=1, Minor=10;");\r
+}\r
+\r
 void SetupDefaultOptions()\r
 {\r
        // OptionValue should always be inserted as a string, even if the option really isn't a string - just to keep the field data type consistent\r
 void SetupDefaultOptions()\r
 {\r
        // OptionValue should always be inserted as a string, even if the option really isn't a string - just to keep the field data type consistent\r
@@ -639,7 +720,7 @@ void SetupDefaultOptions()
 \r
        st.Bind(0,"HTTPAccessControl");\r
        st.Bind(1,"-0.0.0.0/0,+127.0.0.1");\r
 \r
        st.Bind(0,"HTTPAccessControl");\r
        st.Bind(1,"-0.0.0.0/0,+127.0.0.1");\r
-       st.Bind(2,"Comma separated list of addresses and/or subnet masks that are allowed access to the administration pages.  Default is localhost only. + allows a host, - denies as host.");\r
+       st.Bind(2,"Comma separated list of addresses and/or subnet masks that are allowed access to the administration pages.  Default is localhost only. + allows a host, - denies a host.");\r
        st.Step();\r
        st.Reset();\r
 \r
        st.Step();\r
        st.Reset();\r
 \r
@@ -664,6 +745,12 @@ void SetupDefaultOptions()
        st.Step();\r
        st.Reset();\r
 \r
        st.Step();\r
        st.Reset();\r
 \r
+       st.Bind(0,"FProxyPort");\r
+       st.Bind(1,"8888");\r
+       st.Bind(2,"The port that Freenet is listening for http connections on.");\r
+       st.Step();\r
+       st.Reset();\r
+\r
        st.Bind(0,"MessageBase");\r
        st.Bind(1,"fms");\r
        st.Bind(2,"A unique string shared by all clients who want to communicate with each other.  This should not be changed unless you want to create your own separate communications network.");\r
        st.Bind(0,"MessageBase");\r
        st.Bind(1,"fms");\r
        st.Bind(2,"A unique string shared by all clients who want to communicate with each other.  This should not be changed unless you want to create your own separate communications network.");\r
@@ -784,6 +871,12 @@ void SetupDefaultOptions()
        st.Step();\r
        st.Reset();\r
 \r
        st.Step();\r
        st.Reset();\r
 \r
+       st.Bind(0,"VacuumOnStartup");\r
+       st.Bind(1,"false");\r
+       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.");\r
+       st.Step();\r
+       st.Reset();\r
+\r
 }\r
 \r
 void SetupLogFile()\r
 }\r
 \r
 void SetupLogFile()\r
@@ -823,6 +916,9 @@ void SetupNetwork()
 \r
 void Shutdown()\r
 {\r
 \r
 void Shutdown()\r
 {\r
+\r
+       LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"FMS starting shutdown");\r
+\r
        ThreadController::Instance()->ShutdownThreads();\r
 \r
        ShutdownNetwork();\r
        ThreadController::Instance()->ShutdownThreads();\r
 \r
        ShutdownNetwork();\r