version 0.3.3
authorSomeDude <SomeDude@NuBL7aaJ6Cn4fB7GXFb9Zfi8w1FhPyW3oKgU9TweZMw>
Mon, 30 Jun 2008 16:01:00 +0000 (18:01 +0200)
committerDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Mon, 30 Jun 2008 16:01:00 +0000 (18:01 +0200)
CMakeLists.txt
include/fmsapp.h
include/global.h
readme.txt
src/fmsapp.cpp
src/http/fmshttprequesthandlerfactory.cpp

index 03af9bd..1ab671d 100644 (file)
@@ -210,3 +210,8 @@ IF(DO_CHARSET_CONVERSION)
                ENDIF(WIN32)\r
        ENDIF(ICONV_LIBRARY)\r
 ENDIF(DO_CHARSET_CONVERSION)\r
+\r
+# FreeBSD won't find Poco include files without this\r
+IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")\r
+       INCLUDE_DIRECTORIES(AFTER /usr/local/include)\r
+ENDIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")\r
index a816d9a..dab56e1 100644 (file)
@@ -23,8 +23,10 @@ private:
 \r
        void handleHelp(const std::string &name, const std::string &value);\r
        void displayHelp();\r
+       void handleLogOption(const std::string &name, const std::string &value);\r
 \r
        bool m_displayhelp;\r
+       std::string m_logtype;\r
 \r
        ThreadedExecutor m_threads;\r
 \r
index d6ba0df..bd580af 100644 (file)
@@ -7,7 +7,7 @@
 \r
 #define VERSION_MAJOR          "0"\r
 #define VERSION_MINOR          "3"\r
-#define VERSION_RELEASE                "2"\r
+#define VERSION_RELEASE                "3"\r
 #define FMS_VERSION                    VERSION_MAJOR"."VERSION_MINOR"."VERSION_RELEASE\r
 \r
 typedef Poco::ScopedLock<Poco::FastMutex> Guard;\r
index 0fb3777..77ca276 100644 (file)
@@ -1,7 +1,7 @@
 COMPILING\r
 ---------\r
-Compiling FMS requires CMake, Poco and iconv if you want to do charset\r
-conversion.  Other required libraries are bundled with FMS.\r
+Compiling FMS requires CMake, Poco ( version >=1.2.9 ) and iconv if you want to\r
+do charset conversion.  Other required libraries are bundled with FMS.\r
 \r
 To compile, run these commands from the source directory:\r
 cmake -D I_HAVE_READ_THE_README=ON .\r
@@ -30,13 +30,14 @@ sure the user that runs FMS has read/write access to this directory.
 \r
 RUNNING\r
 -------\r
-You may run FMS in console mode by running the binary directly.  If you are\r
-running *nix and would like to run as a daemon, use the --daemon argument.  On\r
-Windows, /registerService will install FMS as a service, and /unregisterService\r
-will uninstall the service.  Use the /displayName=name argument when installing\r
-the service to set the service name to whatever you want.  You will need to\r
-manually start the service unless you change the startup type in the service\r
-properties.\r
+You may run FMS in console mode by running the binary directly.  You can view\r
+available command line options by typing /help on Windows and --help on other\r
+platforms.  If you are running *nix and would like to run as a daemon, use the \r
+--daemon argument.  On Windows, /registerService will install FMS as a service,\r
+and /unregisterService will uninstall the service.  Use the /displayName=name\r
+argument when installing the service to set the service name to whatever you\r
+want.  You will need to manually start the service unless you change the\r
+startup type in the service properties.\r
 \r
 EXITING\r
 -------\r
index 810bd5f..04562fc 100644 (file)
@@ -12,6 +12,7 @@
 \r
 #include <Poco/Util/HelpFormatter.h>\r
 #include <Poco/FileChannel.h>\r
+#include <Poco/ConsoleChannel.h>\r
 #include <Poco/FormattingChannel.h>\r
 #include <Poco/PatternFormatter.h>\r
 #include <iostream>\r
@@ -43,7 +44,7 @@ public:
        }\r
 };\r
 \r
-FMSApp::FMSApp():m_displayhelp(false)\r
+FMSApp::FMSApp():m_displayhelp(false),m_logtype("file")\r
 {\r
 \r
 }\r
@@ -54,6 +55,7 @@ void FMSApp::defineOptions(Poco::Util::OptionSet &options)
 \r
        // add command line options here\r
        options.addOption(Poco::Util::Option("help","?","display help for command line arguments",false).repeatable(false).callback(Poco::Util::OptionCallback<FMSApp>(this,&FMSApp::handleHelp)));\r
+       options.addOption(Poco::Util::Option("log","l","select type of log output (file|stdout|stderr)",false,"type",true).repeatable(false).callback(Poco::Util::OptionCallback<FMSApp>(this,&FMSApp::handleLogOption)));\r
 }\r
 \r
 void FMSApp::displayHelp()\r
@@ -72,6 +74,14 @@ void FMSApp::handleHelp(const std::string &name, const std::string &value)
        stopOptionsProcessing();\r
 }\r
 \r
+void FMSApp::handleLogOption(const std::string &name, const std::string &value)\r
+{\r
+       if(value=="file" || value=="stdout" || value=="stderr")\r
+       {\r
+               m_logtype=value;\r
+       }\r
+}\r
+\r
 void FMSApp::initialize(Poco::Util::Application &self)\r
 {\r
        ServerApplication::initialize(self);\r
@@ -96,13 +106,30 @@ void FMSApp::initializeLogger()
        }\r
 \r
        Poco::AutoPtr<Poco::FormattingChannel> formatter=new Poco::FormattingChannel(new Poco::PatternFormatter("%Y-%m-%d %H:%M:%S | %p | %t"));\r
-       Poco::AutoPtr<Poco::FileChannel> fc=new Poco::FileChannel("fms.log");\r
-       fc->setProperty("rotation","daily");    // rotate log file daily\r
-       fc->setProperty("times","utc");                 // utc date/times for log entries\r
-       fc->setProperty("archive","timestamp"); // add timestamp to old logs\r
-       fc->setProperty("purgeCount","30");             // purge old logs after 30 logs have accumulated\r
-       fc->setProperty("compress","true");             // gz compress old log files\r
-       formatter->setChannel(fc);\r
+       \r
+       if(m_logtype=="file")\r
+       {\r
+               Poco::AutoPtr<Poco::FileChannel> fc=new Poco::FileChannel("fms.log");\r
+               fc->setProperty("rotation","daily");    // rotate log file daily\r
+               fc->setProperty("times","utc");                 // utc date/times for log entries\r
+               fc->setProperty("archive","timestamp"); // add timestamp to old logs\r
+               fc->setProperty("purgeCount","30");             // purge old logs after 30 logs have accumulated\r
+               fc->setProperty("compress","true");             // gz compress old log files\r
+               formatter->setChannel(fc);\r
+       }\r
+       else\r
+       {\r
+               if(m_logtype=="stdout")\r
+               {\r
+                       Poco::AutoPtr<Poco::ConsoleChannel> cc=new Poco::ConsoleChannel(std::cout);\r
+                       formatter->setChannel(cc);\r
+               }\r
+               else\r
+               {\r
+                       Poco::AutoPtr<Poco::ConsoleChannel> cc=new Poco::ConsoleChannel(std::cerr);\r
+                       formatter->setChannel(cc);\r
+               }\r
+       }\r
        \r
        setLogger(Poco::Logger::create("logfile",formatter,initiallevel));\r
 }\r
@@ -110,12 +137,22 @@ void FMSApp::initializeLogger()
 int FMSApp::main(const std::vector<std::string> &args)\r
 {\r
 \r
+       // running as a daemon would reset the working directory to / before calling main\r
+       // so we need to set the working directory again\r
+       // set working directory to program directory\r
+       int rval=chdir(config().getString("application.dir").c_str());\r
+\r
        if(m_displayhelp==false)\r
        {\r
                logger().information("FMS startup v"FMS_VERSION);\r
 \r
                StartThreads();\r
 \r
+               if(isInteractive()==true)\r
+               {\r
+                       std::cout << "FMS has been started." << std::endl << std::endl;\r
+               }\r
+\r
                waitForTerminationRequest();\r
 \r
                m_threads.Cancel();\r
index 819b02b..46f31a2 100644 (file)
@@ -89,5 +89,9 @@ Poco::Net::HTTPRequestHandler *FMSHTTPRequestHandlerFactory::createRequestHandle
                        }\r
                }\r
        }\r
+       else\r
+       {\r
+               m_log->debug("FMSHTTPRequestHandlerFactory::createRequestHandler host denied access "+request.clientAddress().host().toString());\r
+       }\r
        return 0;\r
 }\r