2006-12-12 18:57:24 -05:00
|
|
|
|
package davmail;
|
|
|
|
|
|
2008-11-26 19:56:28 -05:00
|
|
|
|
import davmail.caldav.CaldavServer;
|
2008-11-03 20:47:10 -05:00
|
|
|
|
import davmail.http.DavGatewayHttpClientFacade;
|
2008-11-26 19:56:28 -05:00
|
|
|
|
import davmail.http.DavGatewaySSLProtocolSocketFactory;
|
2008-12-03 12:18:51 -05:00
|
|
|
|
import davmail.ldap.LdapServer;
|
2006-12-12 18:57:24 -05:00
|
|
|
|
import davmail.pop.PopServer;
|
|
|
|
|
import davmail.smtp.SmtpServer;
|
2007-10-09 08:01:58 -04:00
|
|
|
|
import davmail.tray.DavGatewayTray;
|
2008-11-03 11:07:13 -05:00
|
|
|
|
import org.apache.commons.httpclient.HttpClient;
|
|
|
|
|
import org.apache.commons.httpclient.HttpStatus;
|
|
|
|
|
import org.apache.commons.httpclient.methods.GetMethod;
|
2007-08-02 09:33:45 -04:00
|
|
|
|
|
2008-11-26 19:56:28 -05:00
|
|
|
|
import java.io.BufferedReader;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
|
|
2006-12-12 18:57:24 -05:00
|
|
|
|
/**
|
|
|
|
|
* DavGateway main class
|
|
|
|
|
*/
|
|
|
|
|
public class DavGateway {
|
2007-05-09 19:37:24 -04:00
|
|
|
|
protected DavGateway() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static SmtpServer smtpServer;
|
|
|
|
|
private static PopServer popServer;
|
2008-11-26 19:56:28 -05:00
|
|
|
|
private static CaldavServer caldavServer;
|
2008-12-03 06:38:35 -05:00
|
|
|
|
private static LdapServer ldapServer;
|
2006-12-12 18:57:24 -05:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Start the gateway, listen on sp<EFBFBD>cified smtp and pop3 ports
|
2007-05-09 19:37:24 -04:00
|
|
|
|
*
|
2007-03-14 07:55:37 -04:00
|
|
|
|
* @param args command line parameter config file path
|
2006-12-12 18:57:24 -05:00
|
|
|
|
*/
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
|
|
|
|
|
if (args.length >= 1) {
|
2006-12-15 11:44:31 -05:00
|
|
|
|
Settings.setConfigFilePath(args[0]);
|
2006-12-14 10:14:18 -05:00
|
|
|
|
}
|
2006-12-15 11:44:31 -05:00
|
|
|
|
|
2006-12-14 10:14:18 -05:00
|
|
|
|
Settings.load();
|
|
|
|
|
DavGatewayTray.init();
|
|
|
|
|
|
|
|
|
|
start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void start() {
|
|
|
|
|
// first stop existing servers
|
2008-08-21 18:02:21 -04:00
|
|
|
|
DavGateway.stop();
|
2006-12-14 10:14:18 -05:00
|
|
|
|
|
2007-08-02 09:33:45 -04:00
|
|
|
|
try {
|
2008-12-03 12:18:51 -05:00
|
|
|
|
smtpServer = new SmtpServer(Settings.getIntProperty("davmail.smtpPort"));
|
|
|
|
|
popServer = new PopServer(Settings.getIntProperty("davmail.popPort"));
|
|
|
|
|
caldavServer = new CaldavServer(Settings.getIntProperty("davmail.caldavPort"));
|
|
|
|
|
ldapServer = new LdapServer(Settings.getIntProperty("davmail.ldapPort"));
|
2007-08-02 09:33:45 -04:00
|
|
|
|
smtpServer.start();
|
|
|
|
|
popServer.start();
|
2008-11-26 19:56:28 -05:00
|
|
|
|
caldavServer.start();
|
2008-12-03 06:38:35 -05:00
|
|
|
|
ldapServer.start();
|
2007-08-02 09:33:45 -04:00
|
|
|
|
|
2008-12-03 12:18:51 -05:00
|
|
|
|
String message = "DavMail gateway listening on SMTP port " + smtpServer.getPort() +
|
|
|
|
|
", Caldav port " + caldavServer.getPort() +
|
|
|
|
|
", LDAP port " + ldapServer.getPort() +
|
|
|
|
|
" and POP port " + popServer.getPort();
|
|
|
|
|
DavGatewayTray.info(message);
|
|
|
|
|
|
|
|
|
|
// check for new version
|
2008-11-03 11:07:13 -05:00
|
|
|
|
String releasedVersion = getReleasedVersion();
|
|
|
|
|
String currentVersion = getCurrentVersion();
|
|
|
|
|
if (currentVersion != null && releasedVersion != null && currentVersion.compareTo(releasedVersion) < 0) {
|
2008-12-03 12:18:51 -05:00
|
|
|
|
DavGatewayTray.info("A new version (" + releasedVersion + ") of DavMail Gateway is available !");
|
2008-11-03 11:07:13 -05:00
|
|
|
|
}
|
2007-08-02 09:33:45 -04:00
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
DavGatewayTray.error("Exception creating server socket", e);
|
|
|
|
|
}
|
2006-12-14 10:14:18 -05:00
|
|
|
|
|
2008-10-31 13:12:30 -04:00
|
|
|
|
// register custom SSL Socket factory
|
|
|
|
|
DavGatewaySSLProtocolSocketFactory.register();
|
2006-12-12 18:57:24 -05:00
|
|
|
|
}
|
|
|
|
|
|
2008-12-03 12:18:51 -05:00
|
|
|
|
protected static void stopServer(AbstractServer server) {
|
|
|
|
|
if (server != null) {
|
|
|
|
|
server.close();
|
2008-10-31 13:12:30 -04:00
|
|
|
|
try {
|
2008-12-03 12:18:51 -05:00
|
|
|
|
server.join();
|
2008-12-03 06:38:35 -05:00
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
DavGatewayTray.warn("Exception waiting for listener to die", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-10-31 13:12:30 -04:00
|
|
|
|
}
|
2008-08-21 18:02:21 -04:00
|
|
|
|
|
2008-12-03 12:18:51 -05:00
|
|
|
|
public static void stop() {
|
|
|
|
|
stopServer(smtpServer);
|
|
|
|
|
stopServer(popServer);
|
|
|
|
|
stopServer(caldavServer);
|
|
|
|
|
stopServer(ldapServer);
|
|
|
|
|
}
|
|
|
|
|
|
2008-11-03 11:07:13 -05:00
|
|
|
|
public static String getCurrentVersion() {
|
|
|
|
|
Package davmailPackage = DavGateway.class.getPackage();
|
|
|
|
|
return davmailPackage.getImplementationVersion();
|
|
|
|
|
}
|
|
|
|
|
|
2008-11-04 05:38:31 -05:00
|
|
|
|
public static String getReleasedVersion() {
|
2008-11-03 11:07:13 -05:00
|
|
|
|
String version = null;
|
|
|
|
|
BufferedReader versionReader = null;
|
2008-11-30 13:05:36 -05:00
|
|
|
|
HttpClient httpClient = DavGatewayHttpClientFacade.getInstance();
|
2008-11-04 05:38:31 -05:00
|
|
|
|
GetMethod getMethod = new GetMethod("http://davmail.sourceforge.net/version.txt");
|
2008-11-03 11:07:13 -05:00
|
|
|
|
try {
|
2008-12-05 06:53:01 -05:00
|
|
|
|
httpClient.setConnectionTimeout(5000);
|
2008-11-03 11:07:13 -05:00
|
|
|
|
int status = httpClient.executeMethod(getMethod);
|
|
|
|
|
if (status == HttpStatus.SC_OK) {
|
|
|
|
|
versionReader = new BufferedReader(new InputStreamReader(getMethod.getResponseBodyAsStream()));
|
|
|
|
|
version = versionReader.readLine();
|
|
|
|
|
}
|
2008-12-05 09:53:38 -05:00
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
DavGatewayTray.debug("Exception getting released version",e);
|
2008-11-03 11:07:13 -05:00
|
|
|
|
} finally {
|
|
|
|
|
if (versionReader != null) {
|
|
|
|
|
try {
|
|
|
|
|
versionReader.close();
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
// ignore
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-11-03 20:47:10 -05:00
|
|
|
|
getMethod.releaseConnection();
|
2008-11-03 11:07:13 -05:00
|
|
|
|
}
|
|
|
|
|
return version;
|
|
|
|
|
}
|
2006-12-12 18:57:24 -05:00
|
|
|
|
}
|