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
This commit is contained in:
mguessan 2008-10-09 23:29:45 +00:00
parent 927a12173d
commit d56022aa6d
4 changed files with 63 additions and 25 deletions

View File

@ -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();

View File

@ -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", "");

View File

@ -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);

View File

@ -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=