Package org.gudy.azureus2.ui.swt.nat

Source Code of org.gudy.azureus2.ui.swt.nat.NatTestWindow$CheckerUDP

/*
* 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);
      }
    });
  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.nat.NatTestWindow$CheckerUDP

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.