From d56022aa6dfa68ff4b4b407e90bc9c288673a42d Mon Sep 17 00:00:00 2001 From: mguessan Date: Thu, 9 Oct 2008 23:29:45 +0000 Subject: [PATCH] Patch 1944352 by flszen : Specify network binding interface, also added a new advanced tab in settings frame git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@144 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/AbstractServer.java | 15 ++++- src/java/davmail/Settings.java | 1 + src/java/davmail/SettingsFrame.java | 71 +++++++++++++++------- src/web/WEB-INF/classes/davmail.properties | 1 + 4 files changed, 63 insertions(+), 25 deletions(-) diff --git a/src/java/davmail/AbstractServer.java b/src/java/davmail/AbstractServer.java index d455e7e7..5d8bf52b 100644 --- a/src/java/davmail/AbstractServer.java +++ b/src/java/davmail/AbstractServer.java @@ -3,6 +3,7 @@ package davmail; import davmail.tray.DavGatewayTray; import java.io.IOException; +import java.net.Inet4Address; import java.net.ServerSocket; import java.net.Socket; @@ -16,6 +17,10 @@ public abstract class AbstractServer extends Thread { /** * Create a ServerSocket to listen for connections. * Start the thread. + * + * @param port tcp socket chosen port + * @param defaultPort tcp socket default port + * @throws java.io.IOException unable to create server socket */ public AbstractServer(int port, int defaultPort) throws IOException { if (port == 0) { @@ -23,8 +28,14 @@ public abstract class AbstractServer extends Thread { } else { this.port = port; } + + String bindAddress = Settings.getProperty("davmail.bindAddress"); //noinspection SocketOpenedButNotSafelyClosed - serverSocket = new ServerSocket(port); + if (bindAddress == null || bindAddress.length() == 0) { + serverSocket = new ServerSocket(port); + } else { + serverSocket = new ServerSocket(port, 0, Inet4Address.getByName(bindAddress)); + } } @@ -43,7 +54,7 @@ public abstract class AbstractServer extends Thread { clientSocket = serverSocket.accept(); DavGatewayTray.debug("Connection from " + clientSocket.getInetAddress() + " on port " + port); // only accept localhost connections for security reasons - if (Settings.getBooleanProperty("davmail.allowRemote") || + if (Settings.getBooleanProperty("davmail.allowRemote") || clientSocket.getInetAddress().toString().indexOf("127.0.0.1") > 0) { connection = createConnectionHandler(clientSocket); connection.start(); diff --git a/src/java/davmail/Settings.java b/src/java/davmail/Settings.java index d3c084aa..5ba8b43f 100644 --- a/src/java/davmail/Settings.java +++ b/src/java/davmail/Settings.java @@ -48,6 +48,7 @@ public class Settings { SETTINGS.put("davmail.smtpPort", "1025"); SETTINGS.put("davmail.keepDelay", "30"); SETTINGS.put("davmail.allowRemote", "false"); + SETTINGS.put("davmail.bindAddress", ""); SETTINGS.put("davmail.enableProxy", "false"); SETTINGS.put("davmail.proxyHost", ""); SETTINGS.put("davmail.proxyPort", ""); diff --git a/src/java/davmail/SettingsFrame.java b/src/java/davmail/SettingsFrame.java index 53fc24a5..a156868d 100644 --- a/src/java/davmail/SettingsFrame.java +++ b/src/java/davmail/SettingsFrame.java @@ -19,8 +19,12 @@ public class SettingsFrame extends JFrame { public SettingsFrame() { setTitle("DavMail Settings"); - JPanel panel = new JPanel(new GridLayout(5, 2)); - panel.setBorder(BorderFactory.createTitledBorder("Gateway settings")); + JTabbedPane tabbedPane = new JTabbedPane(); + + JPanel mainPanel = new JPanel(new GridLayout(2, 1)); + + JPanel settingsPanel = new JPanel(new GridLayout(4, 2)); + settingsPanel.setBorder(BorderFactory.createTitledBorder("Gateway settings")); final JTextField urlField = new JTextField(Settings.getProperty("davmail.url"), 15); urlField.setToolTipText("Base outlook web access URL"); @@ -29,20 +33,16 @@ public class SettingsFrame extends JFrame { final JTextField keepDelayField = new JTextField(Settings.getProperty("davmail.keepDelay"), 4); keepDelayField.setToolTipText("Number of days to keep messages in trash"); - final JCheckBox allowRemoteField = new JCheckBox(); - allowRemoteField.setSelected(Settings.getBooleanProperty("davmail.allowRemote")); - allowRemoteField.setToolTipText("Allow remote connections to the gateway (server mode)"); - addSettingComponent(panel, "OWA url: ", urlField); - addSettingComponent(panel, "Local POP port: ", popPortField); - addSettingComponent(panel, "Local SMTP port: ", smtpPortField); - addSettingComponent(panel, "Keep Delay: ", keepDelayField); - addSettingComponent(panel, "Allow Remote Connections: ", allowRemoteField); + addSettingComponent(settingsPanel, "OWA url: ", urlField); + addSettingComponent(settingsPanel, "Local POP port: ", popPortField); + addSettingComponent(settingsPanel, "Local SMTP port: ", smtpPortField); + addSettingComponent(settingsPanel, "Keep Delay: ", keepDelayField); - add("North", panel); + mainPanel.add(settingsPanel); - panel = new JPanel(new GridLayout(5, 2)); - panel.setBorder(BorderFactory.createTitledBorder("Proxy settings")); + JPanel proxyPanel = new JPanel(new GridLayout(5, 2)); + proxyPanel.setBorder(BorderFactory.createTitledBorder("Proxy settings")); boolean enableProxy = Settings.getBooleanProperty("davmail.enableProxy"); final JCheckBox enableProxyField = new JCheckBox(); @@ -67,15 +67,38 @@ public class SettingsFrame extends JFrame { } }); - addSettingComponent(panel, "Enable proxy: ", enableProxyField); - addSettingComponent(panel, "Proxy server: ", httpProxyField); - addSettingComponent(panel, "Proxy port: ", httpProxyPortField); - addSettingComponent(panel, "Proxy user: ", httpProxyUserField); - addSettingComponent(panel, "Proxy password: ", httpProxyPasswordField); + addSettingComponent(proxyPanel, "Enable proxy: ", enableProxyField); + addSettingComponent(proxyPanel, "Proxy server: ", httpProxyField); + addSettingComponent(proxyPanel, "Proxy port: ", httpProxyPortField); + addSettingComponent(proxyPanel, "Proxy user: ", httpProxyUserField); + addSettingComponent(proxyPanel, "Proxy password: ", httpProxyPasswordField); - add("Center", panel); + mainPanel.add(proxyPanel); - panel = new JPanel(); + tabbedPane.add("Main", mainPanel); + + JPanel advancedPanel = new JPanel(); + + JPanel networkSettingsPanel = new JPanel(new GridLayout(2, 2)); + networkSettingsPanel.setBorder(BorderFactory.createTitledBorder("Network settings")); + + final JCheckBox allowRemoteField = new JCheckBox(); + allowRemoteField.setSelected(Settings.getBooleanProperty("davmail.allowRemote")); + allowRemoteField.setToolTipText("Allow remote connections to the gateway (server mode)"); + + final JTextField bindAddressField = new JTextField(Settings.getProperty("davmail.bindAddress"), 15); + bindAddressField.setToolTipText("Bind only to the specified network address"); + + addSettingComponent(networkSettingsPanel, "Bind address: ", bindAddressField); + addSettingComponent(networkSettingsPanel, "Allow Remote Connections: ", allowRemoteField); + + advancedPanel.add(networkSettingsPanel); + + tabbedPane.add("Advanced", advancedPanel); + + add("Center", tabbedPane); + + JPanel buttonPanel = new JPanel(); JButton cancel = new JButton("Cancel"); JButton ok = new JButton("Save"); ActionListener save = new ActionListener() { @@ -86,6 +109,7 @@ public class SettingsFrame extends JFrame { Settings.setProperty("davmail.smtpPort", smtpPortField.getText()); Settings.setProperty("davmail.keepDelay", keepDelayField.getText()); Settings.setProperty("davmail.allowRemote", String.valueOf(allowRemoteField.isSelected())); + Settings.setProperty("davmail.bindAddress", bindAddressField.getText()); Settings.setProperty("davmail.enableProxy", String.valueOf(enableProxyField.isSelected())); Settings.setProperty("davmail.proxyHost", httpProxyField.getText()); Settings.setProperty("davmail.proxyPort", httpProxyPortField.getText()); @@ -107,6 +131,7 @@ public class SettingsFrame extends JFrame { smtpPortField.setText(Settings.getProperty("davmail.smtpPort")); keepDelayField.setText(Settings.getProperty("davmail.keepDelay")); allowRemoteField.setSelected(Settings.getBooleanProperty(("davmail.allowRemote"))); + bindAddressField.setText(Settings.getProperty("davmail.bindAddress")); boolean enableProxy = Settings.getBooleanProperty("davmail.allowRemote"); enableProxyField.setSelected(enableProxy); httpProxyField.setEnabled(enableProxy); @@ -121,10 +146,10 @@ public class SettingsFrame extends JFrame { } }); - panel.add(ok); - panel.add(cancel); + buttonPanel.add(ok); + buttonPanel.add(cancel); - add("South", panel); + add("South", buttonPanel); pack(); setResizable(false); diff --git a/src/web/WEB-INF/classes/davmail.properties b/src/web/WEB-INF/classes/davmail.properties index 1299c97d..287531a8 100644 --- a/src/web/WEB-INF/classes/davmail.properties +++ b/src/web/WEB-INF/classes/davmail.properties @@ -3,6 +3,7 @@ davmail.popPort=1110 davmail.smtpPort=1025 davmail.keepDelay=30 davmail.allowRemote=true +davmail.bindAddress= davmail.enableProxy=false davmail.proxyHost= davmail.proxyPort=