/projects/azureus-4.7.0.2/org/gudy/azureus2/ui/swt/nat/NatTestWindow.java
Java | 413 lines | 317 code | 71 blank | 25 comment | 50 complexity | 946089cfe7a2670a3e172890ea1e6785 MD5 | raw file
- /*
- * Created on 14 avr. 2005
- * Created by Olivier Chalouhi
- *
- * Copyright (C) 2004, 2005, 2006 Aelitis SAS, All rights Reserved
- *
- * 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 2 of the License.
- *
- * 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 ( see the LICENSE file ).
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * AELITIS, SAS au capital de 46,603.30 euros,
- * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
- */
- package org.gudy.azureus2.ui.swt.nat;
- import java.net.InetAddress;
- import org.eclipse.swt.SWT;
- import org.eclipse.swt.custom.StyledText;
- import org.eclipse.swt.layout.GridData;
- import org.eclipse.swt.layout.GridLayout;
- import org.eclipse.swt.widgets.*;
- import org.gudy.azureus2.core3.config.COConfigurationManager;
- import org.gudy.azureus2.core3.internat.MessageText;
- import org.gudy.azureus2.core3.ipchecker.natchecker.NatChecker;
- import org.gudy.azureus2.core3.util.AERunnable;
- import org.gudy.azureus2.core3.util.AEThread;
- import org.gudy.azureus2.core3.util.Debug;
- import org.gudy.azureus2.ui.swt.Messages;
- import org.gudy.azureus2.ui.swt.Utils;
- import org.gudy.azureus2.ui.swt.components.shell.ShellFactory;
- import org.gudy.azureus2.ui.swt.shells.CoreWaiterSWT;
- import org.gudy.azureus2.ui.swt.shells.CoreWaiterSWT.TriggerInThread;
- import com.aelitis.azureus.core.AzureusCore;
- import com.aelitis.azureus.core.AzureusCoreRunningListener;
- import com.aelitis.azureus.core.AzureusCoreFactory;
- import com.aelitis.azureus.core.networkmanager.admin.NetworkAdmin;
- import com.aelitis.azureus.core.networkmanager.admin.NetworkAdminProgressListener;
- import com.aelitis.azureus.core.networkmanager.admin.NetworkAdminProtocol;
- public class NatTestWindow {
-
- Display display;
-
- Button bTestTCP,bTestUDP,bApply,bCancel;
- StyledText textResults;
-
- int serverTCPListenPort;
- int serverUDPListenPort;
-
- public class CheckerTCP extends AEThread {
- private int TCPListenPort;
-
- public CheckerTCP(int tcp_listen_port) {
- super("NAT Checker TCP");
- this.TCPListenPort = tcp_listen_port;
- }
- public void
- runSupport()
- {
- try{
- printMessage(MessageText.getString("configureWizard.nat.testing") + " TCP " + TCPListenPort + " ... ");
- NatChecker checker = new NatChecker(AzureusCoreFactory.getSingleton(), NetworkAdmin.getSingleton().getMultiHomedServiceBindAddresses(true)[0], TCPListenPort, false);
- switch (checker.getResult()) {
- case NatChecker.NAT_OK :
- printMessage( "\n" + MessageText.getString("configureWizard.nat.ok") + "\n" + checker.getAdditionalInfo());
- break;
- case NatChecker.NAT_KO :
- printMessage( "\n" + MessageText.getString("configureWizard.nat.ko") + " - " + checker.getAdditionalInfo()+".\n");
- break;
- default :
- printMessage( "\n" + MessageText.getString("configureWizard.nat.unable") + ". \n(" + checker.getAdditionalInfo()+").\n");
- break;
- }
- }finally{
- if (display.isDisposed()) {return;}
- display.asyncExec(new AERunnable() {
- public void runSupport() {
- if(bTestTCP != null && ! bTestTCP.isDisposed())
- bTestTCP.setEnabled(true);
- if(bTestUDP != null && ! bTestUDP.isDisposed())
- bTestUDP.setEnabled(true);
- if(bApply != null && ! bApply.isDisposed())
- bApply.setEnabled(true);
- }
- });
- }
- }
- }
-
- public class CheckerUDP extends AEThread {
- private AzureusCore core;
- private int udp_port;
-
- public CheckerUDP(AzureusCore _core, int _udp_port ){
- super("NAT Checker UDP");
- core = _core;
- udp_port = _udp_port;
- }
- public void
- runSupport()
- {
- try{
- final NetworkAdmin admin = NetworkAdmin.getSingleton();
-
- NetworkAdminProtocol[] inbound_protocols = admin.getInboundProtocols(core);
-
- NetworkAdminProtocol selected = null;
-
- for ( NetworkAdminProtocol p: inbound_protocols ){
-
- if ( p.getType() == NetworkAdminProtocol.PT_UDP && p.getPort() == udp_port ){
-
- selected = p;
-
- break;
- }
- }
-
- if ( selected == null ){
-
- selected = admin.createInboundProtocol( core, NetworkAdminProtocol.PT_UDP, udp_port );
- }
- if ( selected == null ){
-
- printMessage( "\n" + MessageText.getString("configureWizard.nat.ko") + ". \n( No UDP protocols enabled ).\n");
-
- }else{
-
- printMessage(MessageText.getString("configureWizard.nat.testing") + " UDP " + udp_port + " ... ");
- try{
- selected.test(
- null,
- true,
- new NetworkAdminProgressListener()
- {
- public void
- reportProgress(
- String task )
- {
- printMessage( "\n " + task );
- }
- });
- printMessage( "\n" + MessageText.getString("configureWizard.nat.ok"));
- }catch( Throwable e ){
- printMessage( "\n" + MessageText.getString("configureWizard.nat.ko") + ". " + Debug.getNestedExceptionMessage(e)+".\n");
- }
- }
-
- }finally{
- if (display.isDisposed()) {return;}
- display.asyncExec(new AERunnable() {
- public void runSupport() {
- if(bTestTCP != null && ! bTestTCP.isDisposed())
- bTestTCP.setEnabled(true);
- if(bTestUDP != null && ! bTestUDP.isDisposed())
- bTestUDP.setEnabled(true);
- if(bApply != null && ! bApply.isDisposed())
- bApply.setEnabled(true);
- }
- });
- }
- }
- }
-
-
- public NatTestWindow() {
- serverTCPListenPort = COConfigurationManager.getIntParameter( "TCP.Listen.Port" );
- serverUDPListenPort = COConfigurationManager.getIntParameter( "UDP.Listen.Port" );
-
- final Shell shell = ShellFactory.createMainShell(SWT.BORDER | SWT.TITLE | SWT.CLOSE);
- shell.setText(MessageText.getString("configureWizard.nat.title"));
- Utils.setShellIcon(shell);
- display = shell.getDisplay();
-
- GridLayout layout = new GridLayout();
- layout.numColumns = 1;
- shell.setLayout(layout);
- Composite panel = new Composite(shell, SWT.NULL);
- GridData gridData = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.FILL_HORIZONTAL);
- panel.setLayoutData(gridData);
- layout = new GridLayout();
- layout.numColumns = 3;
- panel.setLayout(layout);
- Label label = new Label(panel, SWT.WRAP);
- gridData = new GridData();
- gridData.horizontalSpan = 3;
- gridData.widthHint = 400;
- label.setLayoutData(gridData);
- Messages.setLanguageText(label, "configureWizard.nat.message");
- label = new Label(panel, SWT.NULL);
- label = new Label(panel, SWT.NULL);
- label = new Label(panel, SWT.NULL);
- label = new Label(panel, SWT.NULL);
-
- // TCP
-
- Messages.setLanguageText(label, "configureWizard.nat.server.tcp_listen_port");
- final Text textServerTCPListen = new Text(panel, SWT.BORDER);
- gridData = new GridData();
- gridData.grabExcessHorizontalSpace = true;
- gridData.horizontalAlignment = SWT.FILL;
- textServerTCPListen.setLayoutData(gridData);
- textServerTCPListen.setText("" + serverTCPListenPort);
- textServerTCPListen.addListener(SWT.Verify, new Listener() {
- public void handleEvent(Event e) {
- String text = e.text;
- char[] chars = new char[text.length()];
- text.getChars(0, chars.length, chars, 0);
- for (int i = 0; i < chars.length; i++) {
- if (!('0' <= chars[i] && chars[i] <= '9')) {
- e.doit = false;
- return;
- }
- }
- }
- });
-
- textServerTCPListen.addListener(SWT.Modify, new Listener() {
- public void handleEvent(Event e) {
- final int TCPListenPort = Integer.parseInt(textServerTCPListen.getText());
- serverTCPListenPort = TCPListenPort;
- }
- });
- bTestTCP = new Button(panel, SWT.PUSH);
- Messages.setLanguageText(bTestTCP, "configureWizard.nat.test");
- gridData = new GridData();
- gridData.widthHint = 70;
- bTestTCP.setLayoutData(gridData);
- label = new Label(panel, SWT.NULL);
- // UDP
-
- Messages.setLanguageText(label, "configureWizard.nat.server.udp_listen_port");
- final Text textServerUDPListen = new Text(panel, SWT.BORDER);
- gridData = new GridData();
- gridData.grabExcessHorizontalSpace = true;
- gridData.horizontalAlignment = SWT.FILL;
- textServerUDPListen.setLayoutData(gridData);
- textServerUDPListen.setText("" + serverUDPListenPort);
- textServerUDPListen.addListener(SWT.Verify, new Listener() {
- public void handleEvent(Event e) {
- String text = e.text;
- char[] chars = new char[text.length()];
- text.getChars(0, chars.length, chars, 0);
- for (int i = 0; i < chars.length; i++) {
- if (!('0' <= chars[i] && chars[i] <= '9')) {
- e.doit = false;
- return;
- }
- }
- }
- });
-
- textServerUDPListen.addListener(SWT.Modify, new Listener() {
- public void handleEvent(Event e) {
- final int UDPListenPort = Integer.parseInt(textServerUDPListen.getText());
- serverUDPListenPort =UDPListenPort;
- }
- });
- bTestUDP = new Button(panel, SWT.PUSH);
- Messages.setLanguageText(bTestUDP, "configureWizard.nat.test");
- gridData = new GridData();
- gridData.widthHint = 70;
- bTestUDP.setLayoutData(gridData);
-
- // results
-
- textResults = new StyledText(panel, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.WRAP );
- gridData = new GridData();
- gridData.widthHint = 400;
- gridData.heightHint = 100;
- gridData.grabExcessVerticalSpace = true;
- gridData.verticalAlignment = SWT.FILL;
- gridData.horizontalSpan = 3;
- textResults.setLayoutData(gridData);
- textResults.setBackground(panel.getDisplay().getSystemColor(SWT.COLOR_WHITE));
- bTestTCP.addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event event) {
- bTestUDP.setEnabled(false);
- bTestTCP.setEnabled(false);
- bApply.setEnabled(false);
- textResults.setText("");
- CoreWaiterSWT.waitForCore(TriggerInThread.ANY_THREAD,
- new AzureusCoreRunningListener() {
- public void azureusCoreRunning(AzureusCore core) {
- CheckerTCP checker = new CheckerTCP(serverTCPListenPort);
- checker.start();
- }
- });
- }
- });
-
-
- bTestUDP.addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event event) {
- bTestUDP.setEnabled(false);
- bTestTCP.setEnabled(false);
- bApply.setEnabled(false);
- textResults.setText("");
- CoreWaiterSWT.waitForCore(TriggerInThread.ANY_THREAD,
- new AzureusCoreRunningListener() {
- public void azureusCoreRunning(AzureusCore core) {
- CheckerUDP checker = new CheckerUDP(core,serverUDPListenPort);
- checker.start();
- }
- });
- }
- });
-
- bApply = new Button(panel,SWT.PUSH);
- bApply.setText(MessageText.getString("Button.apply"));
- gridData = new GridData();
- gridData.widthHint = 70;
- gridData.grabExcessHorizontalSpace = true;
- gridData.horizontalAlignment = SWT.RIGHT;
- gridData.horizontalSpan = 2;
- bApply.setLayoutData(gridData);
-
-
- bApply.addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event event) {
- int old_tcp = COConfigurationManager.getIntParameter( "TCP.Listen.Port" );
- int old_udp = COConfigurationManager.getIntParameter( "UDP.Listen.Port" );
- int old_udp2 = COConfigurationManager.getIntParameter( "UDP.NonData.Listen.Port" );
-
- if ( old_tcp != serverTCPListenPort ){
- COConfigurationManager.setParameter("TCP.Listen.Port",serverTCPListenPort);
- }
-
- if ( old_udp != serverUDPListenPort ){
- COConfigurationManager.setParameter("UDP.Listen.Port",serverUDPListenPort);
-
- if ( old_udp == old_udp2 ){
- COConfigurationManager.setParameter("UDP.NonData.Listen.Port",serverUDPListenPort);
- }
- }
-
- COConfigurationManager.save();
-
- shell.close();
- }
- });
-
- bCancel = new Button(panel,SWT.PUSH);
- bCancel.setText(MessageText.getString("Button.cancel"));
- gridData = new GridData();
- gridData.widthHint = 70;
- bCancel.setLayoutData(gridData);
- bCancel.addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event event) {
- shell.close();
- }
- });
-
- shell.setDefaultButton( bApply );
-
- shell.addListener(SWT.Traverse, new Listener() {
- public void handleEvent(Event e) {
- if ( e.character == SWT.ESC){
- shell.close();
- }
- }
- });
-
- shell.pack();
- Utils.centreWindow(shell);
- shell.open();
- }
- public void printMessage(final String message) {
- if (display == null || display.isDisposed())
- return;
- display.asyncExec(new AERunnable() {
- public void runSupport() {
- if (textResults == null || textResults.isDisposed())
- return;
- textResults.append(message);
- }
- });
- }
- }