diff -r 9f0b95aafaa3 -r ed84c8bdd87b src/org/sonews/Main.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/sonews/Main.java Sun Aug 29 17:28:58 2010 +0200
@@ -0,0 +1,198 @@
+/*
+ * SONEWS News Server
+ * see AUTHORS for the list of contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package org.sonews;
+
+import java.sql.Driver;
+import java.sql.DriverManager;
+import java.util.Enumeration;
+import java.util.Date;
+import java.util.logging.Level;
+import org.sonews.config.Config;
+import org.sonews.daemon.ChannelLineBuffers;
+import org.sonews.daemon.CommandSelector;
+import org.sonews.daemon.Connections;
+import org.sonews.daemon.NNTPDaemon;
+import org.sonews.feed.FeedManager;
+import org.sonews.mlgw.MailPoller;
+import org.sonews.storage.StorageBackendException;
+import org.sonews.storage.StorageManager;
+import org.sonews.storage.StorageProvider;
+import org.sonews.util.Log;
+import org.sonews.util.Purger;
+import org.sonews.util.io.Resource;
+
+/**
+ * Startup class of the daemon.
+ * @author Christian Lins
+ * @since sonews/0.5.0
+ */
+public final class Main
+{
+
+ private Main()
+ {
+ }
+
+ /** Version information of the sonews daemon */
+ public static final String VERSION = "sonews/1.1.0";
+ public static final Date STARTDATE = new Date();
+
+ /**
+ * The main entrypoint.
+ * @param args
+ * @throws Exception
+ */
+ public static void main(String[] args) throws Exception
+ {
+ System.out.println(VERSION);
+ Thread.currentThread().setName("Mainthread");
+
+ // Command line arguments
+ boolean feed = false; // Enable feeding?
+ boolean mlgw = false; // Enable Mailinglist gateway?
+ int port = -1;
+
+ for(int n = 0; n < args.length; n++)
+ {
+ if(args[n].equals("-c") || args[n].equals("-config"))
+ {
+ Config.inst().set(Config.LEVEL_CLI, Config.CONFIGFILE, args[++n]);
+ System.out.println("Using config file " + args[n]);
+ }
+ else if(args[n].equals("-dumpjdbcdriver"))
+ {
+ System.out.println("Available JDBC drivers:");
+ Enumeration drvs = DriverManager.getDrivers();
+ while(drvs.hasMoreElements())
+ {
+ System.out.println(drvs.nextElement());
+ }
+ return;
+ }
+ else if(args[n].equals("-feed"))
+ {
+ feed = true;
+ }
+ else if(args[n].equals("-h") || args[n].equals("-help"))
+ {
+ printArguments();
+ return;
+ }
+ else if(args[n].equals("-mlgw"))
+ {
+ mlgw = true;
+ }
+ else if(args[n].equals("-p"))
+ {
+ port = Integer.parseInt(args[++n]);
+ }
+ else if(args[n].equals("-plugin"))
+ {
+ System.out.println("Warning: -plugin-storage is not implemented!");
+ }
+ else if(args[n].equals("-plugin-command"))
+ {
+ try
+ {
+ CommandSelector.addCommandHandler(args[++n]);
+ }
+ catch(Exception ex)
+ {
+ Log.get().warning("Could not load command plugin: " + args[n]);
+ Log.get().log(Level.INFO, "Main.java", ex);
+ }
+ }
+ else if(args[n].equals("-plugin-storage"))
+ {
+ System.out.println("Warning: -plugin-storage is not implemented!");
+ }
+ else if(args[n].equals("-v") || args[n].equals("-version"))
+ {
+ // Simply return as the version info is already printed above
+ return;
+ }
+ }
+
+ // Try to load the JDBCDatabase;
+ // Do NOT USE BackendConfig or Log classes before this point because they require
+ // a working JDBCDatabase connection.
+ try
+ {
+ StorageProvider sprov =
+ StorageManager.loadProvider("org.sonews.storage.impl.JDBCDatabaseProvider");
+ StorageManager.enableProvider(sprov);
+
+ // Make sure some elementary groups are existing
+ if(!StorageManager.current().isGroupExisting("control"))
+ {
+ StorageManager.current().addGroup("control", 0);
+ Log.get().info("Group 'control' created.");
+ }
+ }
+ catch(StorageBackendException ex)
+ {
+ ex.printStackTrace();
+ System.err.println("Database initialization failed with " + ex.toString());
+ System.err.println("Make sure you have specified the correct database" +
+ " settings in sonews.conf!");
+ return;
+ }
+
+ ChannelLineBuffers.allocateDirect();
+
+ // Add shutdown hook
+ Runtime.getRuntime().addShutdownHook(new ShutdownHook());
+
+ // Start the listening daemon
+ if(port <= 0)
+ {
+ port = Config.inst().get(Config.PORT, 119);
+ }
+ final NNTPDaemon daemon = NNTPDaemon.createInstance(port);
+ daemon.start();
+
+ // Start Connections purger thread...
+ Connections.getInstance().start();
+
+ // Start mailinglist gateway...
+ if(mlgw)
+ {
+ new MailPoller().start();
+ }
+
+ // Start feeds
+ if(feed)
+ {
+ FeedManager.startFeeding();
+ }
+
+ Purger purger = new Purger();
+ purger.start();
+
+ // Wait for main thread to exit (setDaemon(false))
+ daemon.join();
+ }
+
+ private static void printArguments()
+ {
+ String usage = Resource.getAsString("helpers/usage", true);
+ System.out.println(usage);
+ }
+
+}