diff --git a/build.xml b/build.xml index ff0171228..dfdee9395 100644 --- a/build.xml +++ b/build.xml @@ -903,7 +903,8 @@ + + + + + + + diff --git a/lib/felix.client.run.properties b/lib/felix.client.run.properties index 85c800c59..42d6d9e0a 100644 --- a/lib/felix.client.run.properties +++ b/lib/felix.client.run.properties @@ -55,7 +55,8 @@ felix.auto.start.31= \ reference:file:sc-bundles/notification-service.jar felix.auto.start.32= \ - reference:file:sc-bundles/dns.jar + reference:file:sc-bundles/dns.jar \ + reference:file:sc-bundles/dnsconfig.jar felix.auto.start.35= \ reference:file:sc-bundles/commons-codec.jar \ diff --git a/src/net/java/sip/communicator/impl/dns/DnsUtilActivator.java b/src/net/java/sip/communicator/impl/dns/DnsUtilActivator.java index e74682430..9b44cb0a9 100644 --- a/src/net/java/sip/communicator/impl/dns/DnsUtilActivator.java +++ b/src/net/java/sip/communicator/impl/dns/DnsUtilActivator.java @@ -6,7 +6,6 @@ */ package net.java.sip.communicator.impl.dns; -import net.java.sip.communicator.impl.dns.dnsconfig.*; import net.java.sip.communicator.service.dns.*; import net.java.sip.communicator.service.netaddr.*; import net.java.sip.communicator.service.netaddr.event.*; @@ -45,7 +44,6 @@ public class DnsUtilActivator private static NotificationService notificationService; private static ResourceManagementService resourceService; private static BundleContext bundleContext; - private static DnsConfigActivator dnsConfigActivator; /** * The address of the backup resolver we would use by default. @@ -130,8 +128,6 @@ public void start(BundleContext context) logger.info("DnssecResolver ... [REGISTERED]"); } - dnsConfigActivator = new DnsConfigActivator(); - dnsConfigActivator.start(context); logger.info("DNS service ... [STARTED]"); } @@ -208,8 +204,6 @@ public static void reloadDnsResolverConfig() public void stop(BundleContext context) throws Exception { - if (dnsConfigActivator != null) - dnsConfigActivator.stop(context); } /** diff --git a/src/net/java/sip/communicator/impl/dns/dnsconfig/DnsConfigActivator.java b/src/net/java/sip/communicator/plugin/dnsconfig/DnsConfigActivator.java similarity index 98% rename from src/net/java/sip/communicator/impl/dns/dnsconfig/DnsConfigActivator.java rename to src/net/java/sip/communicator/plugin/dnsconfig/DnsConfigActivator.java index e2eb96132..c8acab7b4 100644 --- a/src/net/java/sip/communicator/impl/dns/dnsconfig/DnsConfigActivator.java +++ b/src/net/java/sip/communicator/plugin/dnsconfig/DnsConfigActivator.java @@ -4,7 +4,7 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.dns.dnsconfig; +package net.java.sip.communicator.plugin.dnsconfig; import java.util.*; diff --git a/src/net/java/sip/communicator/impl/dns/dnsconfig/DnsContainerPanel.java b/src/net/java/sip/communicator/plugin/dnsconfig/DnsContainerPanel.java similarity index 92% rename from src/net/java/sip/communicator/impl/dns/dnsconfig/DnsContainerPanel.java rename to src/net/java/sip/communicator/plugin/dnsconfig/DnsContainerPanel.java index 59945c470..68275924a 100644 --- a/src/net/java/sip/communicator/impl/dns/dnsconfig/DnsContainerPanel.java +++ b/src/net/java/sip/communicator/plugin/dnsconfig/DnsContainerPanel.java @@ -1,59 +1,59 @@ -/* - * Jitsi, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ -package net.java.sip.communicator.impl.dns.dnsconfig; - -import net.java.sip.communicator.plugin.desktoputil.*; -import net.java.sip.communicator.util.*; - -import org.jitsi.service.resources.*; -import org.osgi.framework.*; - -/** - * Container for all DNS configuration panels. - * - * @author Ingo Bauersachs - */ -public class DnsContainerPanel - extends SIPCommTabbedPane -{ - /** - * Serial version UID. - */ - private static final long serialVersionUID = 0L; - - //service references - private ResourceManagementService R; - - //panels - private ParallelDnsPanel parallelDnsPanel; - private DnssecPanel dnssecPanel; - - /** - * Creates a new instance of this class. Loads all panels. - */ - public DnsContainerPanel() - { - initServices(); - - parallelDnsPanel = new ParallelDnsPanel(); - addTab(R.getI18NString("plugin.dnsconfig.PARALLEL_DNS"), - parallelDnsPanel); - - dnssecPanel = new DnssecPanel(parallelDnsPanel); - addTab(R.getI18NString("plugin.dnsconfig.DNSSEC"), - dnssecPanel); - } - - /** - * Loads all service references - */ - private void initServices() - { - BundleContext bc = DnsConfigActivator.bundleContext; - R = ServiceUtils.getService(bc, ResourceManagementService.class); - } -} +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.plugin.dnsconfig; + +import net.java.sip.communicator.plugin.desktoputil.*; +import net.java.sip.communicator.util.*; + +import org.jitsi.service.resources.*; +import org.osgi.framework.*; + +/** + * Container for all DNS configuration panels. + * + * @author Ingo Bauersachs + */ +public class DnsContainerPanel + extends SIPCommTabbedPane +{ + /** + * Serial version UID. + */ + private static final long serialVersionUID = 0L; + + //service references + private ResourceManagementService R; + + //panels + private ParallelDnsPanel parallelDnsPanel; + private DnssecPanel dnssecPanel; + + /** + * Creates a new instance of this class. Loads all panels. + */ + public DnsContainerPanel() + { + initServices(); + + parallelDnsPanel = new ParallelDnsPanel(); + addTab(R.getI18NString("plugin.dnsconfig.PARALLEL_DNS"), + parallelDnsPanel); + + dnssecPanel = new DnssecPanel(parallelDnsPanel); + addTab(R.getI18NString("plugin.dnsconfig.DNSSEC"), + dnssecPanel); + } + + /** + * Loads all service references + */ + private void initServices() + { + BundleContext bc = DnsConfigActivator.bundleContext; + R = ServiceUtils.getService(bc, ResourceManagementService.class); + } +} diff --git a/src/net/java/sip/communicator/impl/dns/dnsconfig/DnssecPanel.java b/src/net/java/sip/communicator/plugin/dnsconfig/DnssecPanel.java similarity index 96% rename from src/net/java/sip/communicator/impl/dns/dnsconfig/DnssecPanel.java rename to src/net/java/sip/communicator/plugin/dnsconfig/DnssecPanel.java index 8e7928f56..4faa6c15c 100644 --- a/src/net/java/sip/communicator/impl/dns/dnsconfig/DnssecPanel.java +++ b/src/net/java/sip/communicator/plugin/dnsconfig/DnssecPanel.java @@ -1,350 +1,350 @@ -/* - * Jitsi, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ -package net.java.sip.communicator.impl.dns.dnsconfig; - -import java.awt.*; -import java.awt.event.*; -import java.io.*; - -import javax.swing.*; -import javax.swing.plaf.basic.*; -import javax.swing.table.*; - -import net.java.sip.communicator.impl.dns.*; -import net.java.sip.communicator.plugin.desktoputil.*; -import net.java.sip.communicator.service.dns.*; -import net.java.sip.communicator.util.*; - -import org.jitsi.service.configuration.*; -import org.jitsi.service.resources.*; -import org.osgi.framework.*; - -/** - * Configuration of the DNSSEC validating resolver. - * - * @author Ingo Bauersachs - */ -public class DnssecPanel - extends TransparentPanel - implements ActionListener, FocusListener -{ - /** - * Serial version UID. - */ - private static final long serialVersionUID = 0L; - - private final static Logger logger = Logger.getLogger(DnssecPanel.class); - - //UI Controls - private JComboBox cboDefault; - private JCheckBox chkEnabled; - private JCheckBox chkAbsolute; - private JTable tblDomains; - private JTextField txtNameservers; - - //service references - private ResourceManagementService R; - private ConfigurationService config; - private TableModel data = new DnssecTableModel(); - private final ParallelDnsPanel parallelDnsPanel; - - /** - * Create a new instance of this class. - * @param parallelDnsPanel the panel configuring the parallel resolver - */ - public DnssecPanel(ParallelDnsPanel parallelDnsPanel) - { - this.parallelDnsPanel = parallelDnsPanel; - initServices(); - initComponents(); - loadData(); - updateState(); - chkAbsolute.addActionListener(this); - chkEnabled.addActionListener(this); - cboDefault.addActionListener(this); - txtNameservers.addFocusListener(this); - } - - /** - * Loads all service references - */ - private void initServices() - { - BundleContext bc = DnsConfigActivator.bundleContext; - R = ServiceUtils.getService(bc, ResourceManagementService.class); - config = ServiceUtils.getService(bc, ConfigurationService.class); - } - - /** - * Create the UI components - */ - private void initComponents() - { - setLayout(new BorderLayout(0, 10)); - setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 0)); - - JPanel pnlCommon = new TransparentPanel(new GridBagLayout()); - pnlCommon.setAlignmentX(LEFT_ALIGNMENT); - GridBagConstraints cl = new GridBagConstraints(); - GridBagConstraints cr = new GridBagConstraints(); - cl.gridy = cr.gridy = 0; - cl.anchor = cr.anchor = GridBagConstraints.LINE_START; - cl.gridx = 0; - cl.fill = GridBagConstraints.HORIZONTAL; - cl.weightx = 0; - cl.insets = new Insets(0, 0, 0, 10); - cr.gridx = 1; - cr.fill = GridBagConstraints.HORIZONTAL; - cr.gridwidth = GridBagConstraints.REMAINDER; - cr.weightx = 1; - add(pnlCommon, BorderLayout.NORTH); - - - //always use absolute names - chkAbsolute = new SIPCommCheckBox( - R.getI18NString("plugin.dnsconfig.dnssec.chkAbsolute")); - cl.gridwidth = 2; - pnlCommon.add(chkAbsolute, cl); - cl.gridwidth = 1; - - //dnssec enable/disable - cl.gridy = ++cr.gridy; - chkEnabled = new SIPCommCheckBox( - R.getI18NString("plugin.dnsconfig.dnssec.chkEnabled")); - cl.gridwidth = 2; - pnlCommon.add(chkEnabled, cl); - cl.gridwidth = 1; - - cl.gridy = ++cr.gridy; - JLabel lblRestart = new JLabel( - R.getI18NString("plugin.dnsconfig.dnssec.RESTART_WARNING", - new String[]{ - R.getSettingsString("service.gui.APPLICATION_NAME") - })); - lblRestart.setBorder(BorderFactory.createEmptyBorder(0, 22, 10, 0)); - cl.gridwidth = GridBagConstraints.REMAINDER; - pnlCommon.add(lblRestart, cl); - cl.gridwidth = 1; - - //custom nameservers - cl.gridy = ++cr.gridy; - JLabel lblNameserver = new JLabel( - R.getI18NString("plugin.dnsconfig.dnssec.lblNameservers")); - lblNameserver.setBorder(BorderFactory.createEmptyBorder(0, 22, 0, 0)); - pnlCommon.add(lblNameserver, cl); - - txtNameservers = new JTextField(); - pnlCommon.add(txtNameservers, cr); - cl.gridy = ++cr.gridy; - JLabel lblNsHint = new JLabel( - R.getI18NString("plugin.dnsconfig.dnssec.lblNameserversHint")); - lblNsHint.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); - pnlCommon.add(lblNsHint, cr); - - //default dnssec handling - cl.gridy = ++cr.gridy; - JLabel lblDefault = new JLabel( - R.getI18NString("plugin.dnsconfig.dnssec.lblDefault")); - lblDefault.setBorder(BorderFactory.createEmptyBorder(0, 22, 0, 0)); - pnlCommon.add(lblDefault, cl); - cboDefault = new JComboBox(SecureResolveMode.values()); - cboDefault.setRenderer(getResolveModeRenderer()); - pnlCommon.add(cboDefault, cr); - - //domain list table - tblDomains = new JTable(data); - tblDomains.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - tblDomains.setRowHeight(20); - tblDomains.getColumnModel().getColumn(1).setCellRenderer( - new DefaultTableCellRenderer() - { - /** - * Serial version UID. - */ - private static final long serialVersionUID = 0L; - - @Override - protected void setValue(Object value) - { - if (value instanceof SecureResolveMode) - setText(R.getI18NString( - "net.java.sip.communicator.util.dns." - + SecureResolveMode.class.getSimpleName() - + "." - + ((SecureResolveMode) value).name())); - else - super.setValue(value); - } - } - ); - JComboBox cboTblModeEditor = new JComboBox(SecureResolveMode.values()); - cboTblModeEditor.setRenderer(getResolveModeRenderer()); - tblDomains.getColumnModel().getColumn(1).setCellEditor( - new DefaultCellEditor(cboTblModeEditor)); - JScrollPane pnlScroller = new JScrollPane(tblDomains); - pnlScroller.setBorder(BorderFactory.createEmptyBorder(0, 22, 0, 0)); - pnlScroller.setOpaque(false); - add(pnlScroller, BorderLayout.CENTER); - } - - /** - * Reads the configured properties or their defaults into the UI controls. - */ - private void loadData() - { - cboDefault.setSelectedItem(Enum.valueOf(SecureResolveMode.class, - config.getString( - ConfigurableDnssecResolver.PNAME_DNSSEC_VALIDATION_MODE, - SecureResolveMode.WarnIfBogus.name()) - ) - ); - chkEnabled.setSelected(config.getBoolean( - CustomResolver.PNAME_DNSSEC_RESOLVER_ENABLED, - CustomResolver.PDEFAULT_DNSSEC_RESOLVER_ENABLED - )); - chkAbsolute.setSelected(config.getBoolean( - NetworkUtils.PNAME_DNS_ALWAYS_ABSOLUTE, - NetworkUtils.PDEFAULT_DNS_ALWAYS_ABSOLUTE - )); - txtNameservers.setText( - config.getString(DnsUtilActivator.PNAME_DNSSEC_NAMESERVERS)); - } - - /** - * Action has occurred in the config form. - * @param e the action event - */ - public void actionPerformed(ActionEvent e) - { - if(e.getSource() == cboDefault) - { - if(cboDefault.getSelectedItem() == null) - return; - - SecureResolveMode oldMode = Enum.valueOf(SecureResolveMode.class, - config.getString( - ConfigurableDnssecResolver.PNAME_DNSSEC_VALIDATION_MODE, - SecureResolveMode.WarnIfBogus.name()) - ); - config.setProperty( - ConfigurableDnssecResolver.PNAME_DNSSEC_VALIDATION_MODE, - ((SecureResolveMode)cboDefault.getSelectedItem()).name()); - - //update all values that had the default to the new default - for(int i = 0; i < tblDomains.getModel().getRowCount(); i++) - { - SecureResolveMode m = (SecureResolveMode)data.getValueAt(i, 1); - if(m == oldMode) - data.setValueAt(cboDefault.getSelectedItem(), i, 1); - } - tblDomains.repaint(); - return; - } - if(e.getSource() == chkEnabled) - { - File f; - try - { - f = DnsConfigActivator.getFileAccessService() - .getPrivatePersistentFile(".usednsjava"); - if(chkEnabled.isSelected()) - { - if(!f.createNewFile() && !f.exists()) - chkEnabled.setSelected(UnboundApi.isAvailable()); - } - else - { - if(!f.delete() && f.exists()) - chkEnabled.setSelected(true); - } - config.setProperty( - CustomResolver.PNAME_DNSSEC_RESOLVER_ENABLED, - chkEnabled.isSelected()); - } - catch (Exception ex) - { - logger.error("failed to enable DNSSEC", ex); - ErrorDialog ed = new ErrorDialog( - null, - R.getI18NString("plugin.dnsconfig.dnssec.ENABLE_FAILED"), - R.getI18NString("plugin.dnsconfig.dnssec.ENABLE_FAILED_MSG"), - ex); - ed.showDialog(); - } - updateState(); - } - if(e.getSource() == chkAbsolute) - { - config.setProperty( - NetworkUtils.PNAME_DNS_ALWAYS_ABSOLUTE, - chkAbsolute.isSelected()); - updateState(); - } - } - - /** - * Updates the form behavior when the resolver is enabled or disabled. - */ - private void updateState() - { - cboDefault.setEnabled(chkEnabled.isSelected()); - txtNameservers.setEnabled(chkEnabled.isSelected()); - tblDomains.setEnabled(chkEnabled.isSelected()); - parallelDnsPanel.updateDnssecState(); - } - - /** - * Creates a ComboBox renderer for the resolve mode column. The non-edit - * text is based on the selected value of the row for which the renderer is - * created. - * - * @return ComboBox render for the SecureResolveMode enum. - */ - private BasicComboBoxRenderer getResolveModeRenderer() - { - return new BasicComboBoxRenderer() - { - /** - * Serial version UID. - */ - private static final long serialVersionUID = 0L; - - @Override - public Component getListCellRendererComponent(JList list, - Object value, int index, boolean isSelected, - boolean cellHasFocus) - { - Component c = - super.getListCellRendererComponent(list, value, index, - isSelected, cellHasFocus); - setText(R.getI18NString("net.java.sip.communicator.util.dns." - + SecureResolveMode.class.getSimpleName() - + "." - + value)); - return c; - } - }; - } - - /** - * A text field has lost the focus in the config form. - * @param e the action event - */ - public void focusLost(FocusEvent e) - { - if(e.getSource() == txtNameservers) - { - config.setProperty( - DnsUtilActivator.PNAME_DNSSEC_NAMESERVERS, - txtNameservers.getText()); - DnsUtilActivator.reloadDnsResolverConfig(); - } - } - - public void focusGained(FocusEvent e) - {} -} +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.plugin.dnsconfig; + +import java.awt.*; +import java.awt.event.*; +import java.io.*; + +import javax.swing.*; +import javax.swing.plaf.basic.*; +import javax.swing.table.*; + +import net.java.sip.communicator.impl.dns.*; +import net.java.sip.communicator.plugin.desktoputil.*; +import net.java.sip.communicator.service.dns.*; +import net.java.sip.communicator.util.*; + +import org.jitsi.service.configuration.*; +import org.jitsi.service.resources.*; +import org.osgi.framework.*; + +/** + * Configuration of the DNSSEC validating resolver. + * + * @author Ingo Bauersachs + */ +public class DnssecPanel + extends TransparentPanel + implements ActionListener, FocusListener +{ + /** + * Serial version UID. + */ + private static final long serialVersionUID = 0L; + + private final static Logger logger = Logger.getLogger(DnssecPanel.class); + + //UI Controls + private JComboBox cboDefault; + private JCheckBox chkEnabled; + private JCheckBox chkAbsolute; + private JTable tblDomains; + private JTextField txtNameservers; + + //service references + private ResourceManagementService R; + private ConfigurationService config; + private TableModel data = new DnssecTableModel(); + private final ParallelDnsPanel parallelDnsPanel; + + /** + * Create a new instance of this class. + * @param parallelDnsPanel the panel configuring the parallel resolver + */ + public DnssecPanel(ParallelDnsPanel parallelDnsPanel) + { + this.parallelDnsPanel = parallelDnsPanel; + initServices(); + initComponents(); + loadData(); + updateState(); + chkAbsolute.addActionListener(this); + chkEnabled.addActionListener(this); + cboDefault.addActionListener(this); + txtNameservers.addFocusListener(this); + } + + /** + * Loads all service references + */ + private void initServices() + { + BundleContext bc = DnsConfigActivator.bundleContext; + R = ServiceUtils.getService(bc, ResourceManagementService.class); + config = ServiceUtils.getService(bc, ConfigurationService.class); + } + + /** + * Create the UI components + */ + private void initComponents() + { + setLayout(new BorderLayout(0, 10)); + setBorder(BorderFactory.createEmptyBorder(10, 5, 0, 0)); + + JPanel pnlCommon = new TransparentPanel(new GridBagLayout()); + pnlCommon.setAlignmentX(LEFT_ALIGNMENT); + GridBagConstraints cl = new GridBagConstraints(); + GridBagConstraints cr = new GridBagConstraints(); + cl.gridy = cr.gridy = 0; + cl.anchor = cr.anchor = GridBagConstraints.LINE_START; + cl.gridx = 0; + cl.fill = GridBagConstraints.HORIZONTAL; + cl.weightx = 0; + cl.insets = new Insets(0, 0, 0, 10); + cr.gridx = 1; + cr.fill = GridBagConstraints.HORIZONTAL; + cr.gridwidth = GridBagConstraints.REMAINDER; + cr.weightx = 1; + add(pnlCommon, BorderLayout.NORTH); + + + //always use absolute names + chkAbsolute = new SIPCommCheckBox( + R.getI18NString("plugin.dnsconfig.dnssec.chkAbsolute")); + cl.gridwidth = 2; + pnlCommon.add(chkAbsolute, cl); + cl.gridwidth = 1; + + //dnssec enable/disable + cl.gridy = ++cr.gridy; + chkEnabled = new SIPCommCheckBox( + R.getI18NString("plugin.dnsconfig.dnssec.chkEnabled")); + cl.gridwidth = 2; + pnlCommon.add(chkEnabled, cl); + cl.gridwidth = 1; + + cl.gridy = ++cr.gridy; + JLabel lblRestart = new JLabel( + R.getI18NString("plugin.dnsconfig.dnssec.RESTART_WARNING", + new String[]{ + R.getSettingsString("service.gui.APPLICATION_NAME") + })); + lblRestart.setBorder(BorderFactory.createEmptyBorder(0, 22, 10, 0)); + cl.gridwidth = GridBagConstraints.REMAINDER; + pnlCommon.add(lblRestart, cl); + cl.gridwidth = 1; + + //custom nameservers + cl.gridy = ++cr.gridy; + JLabel lblNameserver = new JLabel( + R.getI18NString("plugin.dnsconfig.dnssec.lblNameservers")); + lblNameserver.setBorder(BorderFactory.createEmptyBorder(0, 22, 0, 0)); + pnlCommon.add(lblNameserver, cl); + + txtNameservers = new JTextField(); + pnlCommon.add(txtNameservers, cr); + cl.gridy = ++cr.gridy; + JLabel lblNsHint = new JLabel( + R.getI18NString("plugin.dnsconfig.dnssec.lblNameserversHint")); + lblNsHint.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); + pnlCommon.add(lblNsHint, cr); + + //default dnssec handling + cl.gridy = ++cr.gridy; + JLabel lblDefault = new JLabel( + R.getI18NString("plugin.dnsconfig.dnssec.lblDefault")); + lblDefault.setBorder(BorderFactory.createEmptyBorder(0, 22, 0, 0)); + pnlCommon.add(lblDefault, cl); + cboDefault = new JComboBox(SecureResolveMode.values()); + cboDefault.setRenderer(getResolveModeRenderer()); + pnlCommon.add(cboDefault, cr); + + //domain list table + tblDomains = new JTable(data); + tblDomains.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + tblDomains.setRowHeight(20); + tblDomains.getColumnModel().getColumn(1).setCellRenderer( + new DefaultTableCellRenderer() + { + /** + * Serial version UID. + */ + private static final long serialVersionUID = 0L; + + @Override + protected void setValue(Object value) + { + if (value instanceof SecureResolveMode) + setText(R.getI18NString( + "net.java.sip.communicator.util.dns." + + SecureResolveMode.class.getSimpleName() + + "." + + ((SecureResolveMode) value).name())); + else + super.setValue(value); + } + } + ); + JComboBox cboTblModeEditor = new JComboBox(SecureResolveMode.values()); + cboTblModeEditor.setRenderer(getResolveModeRenderer()); + tblDomains.getColumnModel().getColumn(1).setCellEditor( + new DefaultCellEditor(cboTblModeEditor)); + JScrollPane pnlScroller = new JScrollPane(tblDomains); + pnlScroller.setBorder(BorderFactory.createEmptyBorder(0, 22, 0, 0)); + pnlScroller.setOpaque(false); + add(pnlScroller, BorderLayout.CENTER); + } + + /** + * Reads the configured properties or their defaults into the UI controls. + */ + private void loadData() + { + cboDefault.setSelectedItem(Enum.valueOf(SecureResolveMode.class, + config.getString( + ConfigurableDnssecResolver.PNAME_DNSSEC_VALIDATION_MODE, + SecureResolveMode.WarnIfBogus.name()) + ) + ); + chkEnabled.setSelected(config.getBoolean( + CustomResolver.PNAME_DNSSEC_RESOLVER_ENABLED, + CustomResolver.PDEFAULT_DNSSEC_RESOLVER_ENABLED + )); + chkAbsolute.setSelected(config.getBoolean( + NetworkUtils.PNAME_DNS_ALWAYS_ABSOLUTE, + NetworkUtils.PDEFAULT_DNS_ALWAYS_ABSOLUTE + )); + txtNameservers.setText( + config.getString(DnsUtilActivator.PNAME_DNSSEC_NAMESERVERS)); + } + + /** + * Action has occurred in the config form. + * @param e the action event + */ + public void actionPerformed(ActionEvent e) + { + if(e.getSource() == cboDefault) + { + if(cboDefault.getSelectedItem() == null) + return; + + SecureResolveMode oldMode = Enum.valueOf(SecureResolveMode.class, + config.getString( + ConfigurableDnssecResolver.PNAME_DNSSEC_VALIDATION_MODE, + SecureResolveMode.WarnIfBogus.name()) + ); + config.setProperty( + ConfigurableDnssecResolver.PNAME_DNSSEC_VALIDATION_MODE, + ((SecureResolveMode)cboDefault.getSelectedItem()).name()); + + //update all values that had the default to the new default + for(int i = 0; i < tblDomains.getModel().getRowCount(); i++) + { + SecureResolveMode m = (SecureResolveMode)data.getValueAt(i, 1); + if(m == oldMode) + data.setValueAt(cboDefault.getSelectedItem(), i, 1); + } + tblDomains.repaint(); + return; + } + if(e.getSource() == chkEnabled) + { + File f; + try + { + f = DnsConfigActivator.getFileAccessService() + .getPrivatePersistentFile(".usednsjava"); + if(chkEnabled.isSelected()) + { + if(!f.createNewFile() && !f.exists()) + chkEnabled.setSelected(UnboundApi.isAvailable()); + } + else + { + if(!f.delete() && f.exists()) + chkEnabled.setSelected(true); + } + config.setProperty( + CustomResolver.PNAME_DNSSEC_RESOLVER_ENABLED, + chkEnabled.isSelected()); + } + catch (Exception ex) + { + logger.error("failed to enable DNSSEC", ex); + ErrorDialog ed = new ErrorDialog( + null, + R.getI18NString("plugin.dnsconfig.dnssec.ENABLE_FAILED"), + R.getI18NString("plugin.dnsconfig.dnssec.ENABLE_FAILED_MSG"), + ex); + ed.showDialog(); + } + updateState(); + } + if(e.getSource() == chkAbsolute) + { + config.setProperty( + NetworkUtils.PNAME_DNS_ALWAYS_ABSOLUTE, + chkAbsolute.isSelected()); + updateState(); + } + } + + /** + * Updates the form behavior when the resolver is enabled or disabled. + */ + private void updateState() + { + cboDefault.setEnabled(chkEnabled.isSelected()); + txtNameservers.setEnabled(chkEnabled.isSelected()); + tblDomains.setEnabled(chkEnabled.isSelected()); + parallelDnsPanel.updateDnssecState(); + } + + /** + * Creates a ComboBox renderer for the resolve mode column. The non-edit + * text is based on the selected value of the row for which the renderer is + * created. + * + * @return ComboBox render for the SecureResolveMode enum. + */ + private BasicComboBoxRenderer getResolveModeRenderer() + { + return new BasicComboBoxRenderer() + { + /** + * Serial version UID. + */ + private static final long serialVersionUID = 0L; + + @Override + public Component getListCellRendererComponent(JList list, + Object value, int index, boolean isSelected, + boolean cellHasFocus) + { + Component c = + super.getListCellRendererComponent(list, value, index, + isSelected, cellHasFocus); + setText(R.getI18NString("net.java.sip.communicator.util.dns." + + SecureResolveMode.class.getSimpleName() + + "." + + value)); + return c; + } + }; + } + + /** + * A text field has lost the focus in the config form. + * @param e the action event + */ + public void focusLost(FocusEvent e) + { + if(e.getSource() == txtNameservers) + { + config.setProperty( + DnsUtilActivator.PNAME_DNSSEC_NAMESERVERS, + txtNameservers.getText()); + DnsUtilActivator.reloadDnsResolverConfig(); + } + } + + public void focusGained(FocusEvent e) + {} +} diff --git a/src/net/java/sip/communicator/impl/dns/dnsconfig/DnssecTableModel.java b/src/net/java/sip/communicator/plugin/dnsconfig/DnssecTableModel.java similarity index 94% rename from src/net/java/sip/communicator/impl/dns/dnsconfig/DnssecTableModel.java rename to src/net/java/sip/communicator/plugin/dnsconfig/DnssecTableModel.java index b2029df00..6de7f9a96 100644 --- a/src/net/java/sip/communicator/impl/dns/dnsconfig/DnssecTableModel.java +++ b/src/net/java/sip/communicator/plugin/dnsconfig/DnssecTableModel.java @@ -1,137 +1,137 @@ -/* - * Jitsi, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ -package net.java.sip.communicator.impl.dns.dnsconfig; - -import java.awt.*; -import java.util.*; -import java.util.List; - -import javax.swing.table.*; - -import net.java.sip.communicator.util.*; -import net.java.sip.communicator.impl.dns.*; - -import org.jitsi.service.configuration.*; -import org.jitsi.service.resources.*; -import org.osgi.framework.*; - -/** - * TableModel for selectively managing DNSSEC behavior for zones ever requested - * by Jitsi. - * - * @author Ingo Bauersachs - */ -public class DnssecTableModel - extends DefaultTableModel -{ - /** - * Serial version UID. - */ - private static final long serialVersionUID = 0L; - - private List data = new LinkedList(); - private ResourceManagementService R; - private ConfigurationService config; - - /** - * Creates a new instance of this class. Reads all zones from the - * configuration store. - */ - public DnssecTableModel() - { - BundleContext bc = DnsConfigActivator.bundleContext; - R = ServiceUtils.getService(bc, ResourceManagementService.class); - config = ServiceUtils.getService(bc, ConfigurationService.class); - data = config.getPropertyNamesByPrefix( - ConfigurableDnssecResolver.PNAME_BASE_DNSSEC_PIN, false); - Collections.sort(data); - if(data == null) - data = new ArrayList(0); - } - - /** - * {@inheritDoc} - */ - public int getRowCount() - { - if(data == null) - return 0; - return data.size(); - } - - /** - * {@inheritDoc} - */ - public int getColumnCount() - { - return 2; - } - - /** - * {@inheritDoc} - */ - public String getColumnName(int columnIndex) - { - switch(columnIndex) - { - case 0: - return R.getI18NString("plugin.dnsconfig.dnssec.DOMAIN_NAME"); - case 1: - return R.getI18NString("plugin.dnsconfig.dnssec.MODE"); - } - return null; - } - - /** - * {@inheritDoc} - */ - public Class getColumnClass(int columnIndex) - { - if(columnIndex < 1) - return String.class; - return Component.class; - } - - /** - * {@inheritDoc} - */ - public boolean isCellEditable(int rowIndex, int columnIndex) - { - return columnIndex == 1; - } - - /** - * {@inheritDoc} - */ - public Object getValueAt(int rowIndex, int columnIndex) - { - switch(columnIndex) - { - case 0: - return data.get(rowIndex).substring( - ConfigurableDnssecResolver.PNAME_BASE_DNSSEC_PIN.length()+1) - .split("\\.")[0].replaceAll("__", "."); - case 1: - return SecureResolveMode.valueOf( - config.getString(data.get(rowIndex))); - } - return null; - } - - /** - * {@inheritDoc} - */ - public void setValueAt(Object aValue, int rowIndex, int columnIndex) - { - if(aValue == null) - return; - config.setProperty( - data.get(rowIndex), - ((SecureResolveMode)aValue).name() - ); - } -} +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.plugin.dnsconfig; + +import java.awt.*; +import java.util.*; +import java.util.List; + +import javax.swing.table.*; + +import net.java.sip.communicator.util.*; +import net.java.sip.communicator.impl.dns.*; + +import org.jitsi.service.configuration.*; +import org.jitsi.service.resources.*; +import org.osgi.framework.*; + +/** + * TableModel for selectively managing DNSSEC behavior for zones ever requested + * by Jitsi. + * + * @author Ingo Bauersachs + */ +public class DnssecTableModel + extends DefaultTableModel +{ + /** + * Serial version UID. + */ + private static final long serialVersionUID = 0L; + + private List data = new LinkedList(); + private ResourceManagementService R; + private ConfigurationService config; + + /** + * Creates a new instance of this class. Reads all zones from the + * configuration store. + */ + public DnssecTableModel() + { + BundleContext bc = DnsConfigActivator.bundleContext; + R = ServiceUtils.getService(bc, ResourceManagementService.class); + config = ServiceUtils.getService(bc, ConfigurationService.class); + data = config.getPropertyNamesByPrefix( + ConfigurableDnssecResolver.PNAME_BASE_DNSSEC_PIN, false); + Collections.sort(data); + if(data == null) + data = new ArrayList(0); + } + + /** + * {@inheritDoc} + */ + public int getRowCount() + { + if(data == null) + return 0; + return data.size(); + } + + /** + * {@inheritDoc} + */ + public int getColumnCount() + { + return 2; + } + + /** + * {@inheritDoc} + */ + public String getColumnName(int columnIndex) + { + switch(columnIndex) + { + case 0: + return R.getI18NString("plugin.dnsconfig.dnssec.DOMAIN_NAME"); + case 1: + return R.getI18NString("plugin.dnsconfig.dnssec.MODE"); + } + return null; + } + + /** + * {@inheritDoc} + */ + public Class getColumnClass(int columnIndex) + { + if(columnIndex < 1) + return String.class; + return Component.class; + } + + /** + * {@inheritDoc} + */ + public boolean isCellEditable(int rowIndex, int columnIndex) + { + return columnIndex == 1; + } + + /** + * {@inheritDoc} + */ + public Object getValueAt(int rowIndex, int columnIndex) + { + switch(columnIndex) + { + case 0: + return data.get(rowIndex).substring( + ConfigurableDnssecResolver.PNAME_BASE_DNSSEC_PIN.length()+1) + .split("\\.")[0].replaceAll("__", "."); + case 1: + return SecureResolveMode.valueOf( + config.getString(data.get(rowIndex))); + } + return null; + } + + /** + * {@inheritDoc} + */ + public void setValueAt(Object aValue, int rowIndex, int columnIndex) + { + if(aValue == null) + return; + config.setProperty( + data.get(rowIndex), + ((SecureResolveMode)aValue).name() + ); + } +} diff --git a/src/net/java/sip/communicator/impl/dns/dnsconfig/ParallelDnsPanel.java b/src/net/java/sip/communicator/plugin/dnsconfig/ParallelDnsPanel.java similarity index 99% rename from src/net/java/sip/communicator/impl/dns/dnsconfig/ParallelDnsPanel.java rename to src/net/java/sip/communicator/plugin/dnsconfig/ParallelDnsPanel.java index 8414b6c9c..a7aaced62 100644 --- a/src/net/java/sip/communicator/impl/dns/dnsconfig/ParallelDnsPanel.java +++ b/src/net/java/sip/communicator/plugin/dnsconfig/ParallelDnsPanel.java @@ -4,7 +4,7 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.dns.dnsconfig; +package net.java.sip.communicator.plugin.dnsconfig; import static net.java.sip.communicator.impl.dns.DnsUtilActivator.*; import static net.java.sip.communicator.service.dns.CustomResolver.*; diff --git a/src/net/java/sip/communicator/plugin/dnsconfig/dnsconfig.manifest.mf b/src/net/java/sip/communicator/plugin/dnsconfig/dnsconfig.manifest.mf new file mode 100644 index 000000000..12f505246 --- /dev/null +++ b/src/net/java/sip/communicator/plugin/dnsconfig/dnsconfig.manifest.mf @@ -0,0 +1,30 @@ +Bundle-Activator: net.java.sip.communicator.plugin.dnsconfig.DnsConfigActivator +Bundle-Name: Jitsi DNS config +Bundle-SymbolicName: net.java.sip.communicator.plugin +Bundle-Description: A bundle that export config panels for DNS utility classes. +Bundle-Vendor: jitsi.org +Bundle-Version: 0.0.1 +System-Bundle: yes +Import-Package: org.jitsi.util, + org.osgi.framework, + net.java.sip.communicator.util, + net.java.sip.communicator.plugin.desktoputil, + org.jitsi.service.resources, + org.jitsi.service.fileaccess, + net.java.sip.communicator.impl.dns, + net.java.sip.communicator.service.resources, + net.java.sip.communicator.service.notification, + net.java.sip.communicator.service.dns, + net.java.sip.communicator.service.gui, + net.java.sip.communicator.service.netaddr, + net.java.sip.communicator.service.netaddr.event, + org.jitsi.service.configuration, + sun.net.dns, + org.xbill.DNS, + javax.swing, + javax.swing.event, + javax.swing.text, + javax.swing.border, + javax.swing.plaf.basic, + javax.swing.table +