Package com.aelitis.net.natpmp.upnp.impl

Source Code of com.aelitis.net.natpmp.upnp.impl.NatPMPImpl

/*
* Created on 12 Jun 2006
* Created by Marc Colosimo
* Copyright (C) 2006 Aelitis, 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, or (at your option) any later version.
* 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.
* 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 com.aelitis.net.natpmp.upnp.impl;

import java.util.*;

import com.aelitis.net.natpmp.NatPMPDevice;
import com.aelitis.net.upnp.UPnPException;
import com.aelitis.net.upnp.services.UPnPWANConnectionPortMapping;

public class NatPMPImpl {
    /* NatPMP stuff */
    private NatPMPDevice natDevice;

    /* Azureus stuff */
    private List    mappings = new ArrayList(); // not synchronized!
   

   
    public NatPMPImpl(NatPMPDevice device ) throws UPnPException {
        try {
            natDevice = device;
        } catch( Exception e) {
            throw( new UPnPException( "Error in getting NatPMP Service!" ));
        }
    }
   
    /**
     * Azureus framework methods
     *
     * @see: ...service/UPnPSSWANConnectionImpl.java
     **/
    public void addPortMapping(
                    boolean tcp,        // false -> UDP
                    int port,
                    String description )
                    throws UPnPException
    {
        try{
            /* use public port for internal port */
            natDevice.addPortMapping( tcp, port, port );
        } catch( Exception e) {
            throw( new UPnPException( "addPortMapping failed", e ));
        }
       
        synchronized( this ){
          /* Find and remove old mapping, if any */
          Iterator it = mappings.iterator();
          while( it.hasNext() ) {
              portMapping m = (portMapping)it.next();
                 
              if (m.getExternalPort() == port && m.isTCP() == tcp)
                  it.remove() ;
          }
          /* add new port to list */  
          mappings.add(   new portMapping( port, tcp,
                          natDevice.getLocalAddress().getHostAddress(),
                          description) );
        }
    }
   
    public void deletePortMapping( boolean tcp, int port)
                throws UPnPException
    {
        try {
            natDevice.deletePortMapping( tcp, port, port );
        } catch ( Exception e) {
            throw( new UPnPException("deletePortMapping failed", e) );
        }
       
        synchronized( this ){
          /* Delete from the mappings */
          Iterator it = mappings.iterator();
          while( it.hasNext() ) {
              portMapping m = (portMapping)it.next();
                 
              if (m.getExternalPort() == port && m.isTCP() == tcp)
                  it.remove() ;      
          }
        }
    }
   
    public UPnPWANConnectionPortMapping[] getPortMappings()
                throws UPnPException
    {
        synchronized( this ){
          /* Check UPnPSSWANConnectionImpl.java for hints */
          UPnPWANConnectionPortMapping[] res2 = new UPnPWANConnectionPortMapping[mappings.size()];
          mappings.toArray(res2);
          return res2;
        }
    }
    
    public String[] getStatusInfo()
                throws UPnPException
    {
        String connection_status    = null;
        String connection_error     = null;
        String uptime               = null;
       
        /* can we ping the NAT for this info? */
        uptime = "" + natDevice.getEpoch();
        return( new String[] { connection_status, connection_error, uptime } );
    }
   
  public String
  getExternalIPAddress()
  {
    return(natDevice.getExternalIPAddress());
  }
 
    protected class portMapping
        implements UPnPWANConnectionPortMapping
    {
        protected int           external_port;
        protected boolean       tcp;
        protected String        internal_host;
        protected String        description;
       
        protected portMapping(
                int         _external_port,
                boolean     _tcp,
                String      _internal_host,
                String      _description )
        {
            external_port   = _external_port;
            tcp             = _tcp;
            internal_host   = _internal_host;
            description     = _description;
        }
       
        public boolean isTCP()
        {
            return( tcp );
        }
       
        public int getExternalPort()
        {
            return( external_port );
        }
       
        public String getInternalHost()
        {
            return( internal_host );
        }
       
        public String getDescription()
        {
            return( description );
        }
       
        protected String getString()
        {
            return( getDescription() + " [" + getExternalPort() + ":" + (isTCP()?"TCP":"UDP") + "]");
        }
    } /* end protected class portMapping */
} /* end public class NatPMPImpl */
TOP

Related Classes of com.aelitis.net.natpmp.upnp.impl.NatPMPImpl

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.
m/analytics.js','ga'); ga('create', 'UA-20639858-1', 'auto'); ga('send', 'pageview');