[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting/transport/sslsocket ...

Tom Elrod tom.elrod at jboss.com
Wed Jul 12 00:49:51 EDT 2006


  User: telrod  
  Date: 06/07/12 00:49:51

  Added:       src/main/org/jboss/remoting/transport/sslsocket     
                        SSLSocketClientInvoker.java
                        SSLSocketServerInvoker.java
                        SSLSocketServerInvokerMBean.java
                        TransportClientFactory.java
                        TransportServerFactory.java
  Log:
  JBREM-496 & JBREM-492 & JBREM-535 - changed invoker loading to use a client and server factory instead of loading classes directly.  This allows users ability to plugin custom transport implementation with zero config.  Also added config for forcing remote call when client and server within same jvm (which was able to do previously using BYVALUE config, but not any more).  Also changed way to get hint if transport supports ssl to be provided by the transport factory instead of the transport itself.
  
  Revision  Changes    Path
  1.1      date: 2006/07/12 04:49:51;  author: telrod;  state: Exp;JBossRemoting/src/main/org/jboss/remoting/transport/sslsocket/SSLSocketClientInvoker.java
  
  Index: SSLSocketClientInvoker.java
  ===================================================================
  /*
  * JBoss, Home of Professional Open Source
  * Copyright 2005, JBoss Inc., and individual contributors as indicated
  * by the @authors tag. See the copyright.txt in the distribution for a
  * full listing of individual contributors.
  *
  * This is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as
  * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software 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
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
  
  package org.jboss.remoting.transport.sslsocket;
  
  import org.jboss.remoting.Client;
  import org.jboss.remoting.InvokerLocator;
  import org.jboss.remoting.security.SSLSocketBuilder;
  import org.jboss.remoting.transport.socket.SocketClientInvoker;
  import org.jboss.remoting.util.socket.HandshakeRepeater;
  
  import javax.net.SocketFactory;
  import javax.net.ssl.HandshakeCompletedListener;
  import javax.net.ssl.SSLSocket;
  import java.io.IOException;
  import java.net.Socket;
  import java.util.Map;
  
  /**
   * @author <a href="mailto:tom.elrod at jboss.com">Tom Elrod</a>
   */
  public class SSLSocketClientInvoker extends SocketClientInvoker
  {
  
     public SSLSocketClientInvoker(InvokerLocator locator) throws IOException
     {
        super(locator);
        try
        {
           setup();
        }
        catch (Exception ex)
        {
           log.error("Error setting up ssl socket client invoker.", ex);
           throw new RuntimeException(ex.getMessage());
        }
     }
  
     public SSLSocketClientInvoker(InvokerLocator locator, Map configuration) throws IOException
     {
        super(locator, configuration);
        try
        {
           setup();
        }
        catch (Exception ex)
        {
           log.error("Error setting up ssl socket client invoker.", ex);
           throw new RuntimeException(ex.getMessage());
        }
     }
  
     protected SocketFactory createSocketFactory(Map configuration)
     {
        SocketFactory sf = super.createSocketFactory(configuration);
  
        if (sf != null)
        {
           return sf;
        }
  
        try
        {
           SSLSocketBuilder server = new SSLSocketBuilder();
           sf = server.createSSLSocketFactory();
        }
        catch (Exception e)
        {
           log.error("Error creating SSL Socket Factory for client invoker.", e);
        }
  
        return sf;
     }
  
  
     protected Socket createSocket(String address, int port) throws IOException
     {
        SocketFactory sf = getSocketFactory();
  
        if (sf == null)
           sf = createSocketFactory(configuration);
        
        Socket s = sf.createSocket(address, port);
  
        if (s instanceof SSLSocket)
        {
           // need to check for handshake listener and add them if there is one
           Object obj = configuration.get(Client.HANDSHAKE_COMPLETED_LISTENER);
           if (obj != null && obj instanceof HandshakeCompletedListener)
           {
              SSLSocket sslSocket = (SSLSocket) s;
              HandshakeCompletedListener listener = (HandshakeCompletedListener) obj;
              establishHandshake(sslSocket, listener);
           }
        }
  
        return s;
     }
  
     private void establishHandshake(SSLSocket sslSocket, HandshakeCompletedListener listener)
           throws IOException
     {
        HandshakeRepeater repeater = new HandshakeRepeater(listener);
        sslSocket.addHandshakeCompletedListener(repeater);
        sslSocket.getSession();
        repeater.waitForHandshake();
     }
  
  }
  
  
  1.1      date: 2006/07/12 04:49:51;  author: telrod;  state: Exp;JBossRemoting/src/main/org/jboss/remoting/transport/sslsocket/SSLSocketServerInvoker.java
  
  Index: SSLSocketServerInvoker.java
  ===================================================================
  /*
  * JBoss, Home of Professional Open Source
  * Copyright 2005, JBoss Inc., and individual contributors as indicated
  * by the @authors tag. See the copyright.txt in the distribution for a
  * full listing of individual contributors.
  *
  * This is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as
  * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software 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
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
  
  package org.jboss.remoting.transport.sslsocket;
  
  import org.jboss.remoting.InvokerLocator;
  import org.jboss.remoting.transport.socket.SocketServerInvoker;
  
  import javax.net.ServerSocketFactory;
  import javax.net.ssl.SSLServerSocketFactory;
  import java.io.IOException;
  import java.net.InetAddress;
  import java.net.ServerSocket;
  import java.util.Map;
  
  /**
   * @author <a href="mailto:tom.elrod at jboss.com">Tom Elrod</a>
   */
  public class SSLSocketServerInvoker extends SocketServerInvoker implements SSLSocketServerInvokerMBean
  {
  
     public SSLSocketServerInvoker(InvokerLocator locator)
     {
        super(locator);
     }
  
     public SSLSocketServerInvoker(InvokerLocator locator, Map configuration)
     {
        super(locator, configuration);
     }
  
     protected ServerSocketFactory getDefaultServerSocketFactory()
     {
        return SSLServerSocketFactory.getDefault();
     }
  
     protected ServerSocket createServerSocket(int serverBindPort, int backlog, InetAddress bindAddress) throws IOException
     {
        ServerSocket svrSocket = getServerSocketFactory().createServerSocket(serverBindPort, backlog, bindAddress);
        return svrSocket;
     }
  
  }
  
  
  1.1      date: 2006/07/12 04:49:51;  author: telrod;  state: Exp;JBossRemoting/src/main/org/jboss/remoting/transport/sslsocket/SSLSocketServerInvokerMBean.java
  
  Index: SSLSocketServerInvokerMBean.java
  ===================================================================
  /*
  * JBoss, Home of Professional Open Source
  * Copyright 2005, JBoss Inc., and individual contributors as indicated
  * by the @authors tag. See the copyright.txt in the distribution for a
  * full listing of individual contributors.
  *
  * This is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as
  * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software 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
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
  
  package org.jboss.remoting.transport.sslsocket;
  
  import org.jboss.remoting.transport.socket.SocketServerInvokerMBean;
  
  import javax.net.ServerSocketFactory;
  
  /**
   * @author <a href="mailto:tom.elrod at jboss.com">Tom Elrod</a>
   */
  public interface SSLSocketServerInvokerMBean extends SocketServerInvokerMBean
  {
     /**
      * Sets the server socket factory for the SocketServerInvoker to use.
      * Can produce normal server socket or ssl server socket, depending
      * on implementation passed.
      *
      * @param serverSocketFactory
      */
     void setServerSocketFactory(ServerSocketFactory serverSocketFactory);
  
  
  }
  
  
  1.1      date: 2006/07/12 04:49:51;  author: telrod;  state: Exp;JBossRemoting/src/main/org/jboss/remoting/transport/sslsocket/TransportClientFactory.java
  
  Index: TransportClientFactory.java
  ===================================================================
  /*
  * JBoss, Home of Professional Open Source
  * Copyright 2005, JBoss Inc., and individual contributors as indicated
  * by the @authors tag. See the copyright.txt in the distribution for a
  * full listing of individual contributors.
  *
  * This is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as
  * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software 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
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
  package org.jboss.remoting.transport.sslsocket;
  
  import org.jboss.remoting.InvokerLocator;
  import org.jboss.remoting.transport.ClientFactory;
  import org.jboss.remoting.transport.ClientInvoker;
  
  import java.io.IOException;
  import java.util.Map;
  
  /**
   * @author <a href="mailto:tom.elrod at jboss.com">Tom Elrod</a>
   */
  public class TransportClientFactory implements ClientFactory
  {
     public ClientInvoker createClientInvoker(InvokerLocator locator, Map config) throws IOException
     {
        return new SSLSocketClientInvoker(locator, config);
     }
  
     public boolean supportsSSL()
     {
        return true;
     }
  }
  
  
  1.1      date: 2006/07/12 04:49:51;  author: telrod;  state: Exp;JBossRemoting/src/main/org/jboss/remoting/transport/sslsocket/TransportServerFactory.java
  
  Index: TransportServerFactory.java
  ===================================================================
  package org.jboss.remoting.transport.sslsocket;
  
  import org.jboss.remoting.InvokerLocator;
  import org.jboss.remoting.ServerInvoker;
  import org.jboss.remoting.transport.ServerFactory;
  
  import java.util.Map;
  
  /**
   * @author <a href="mailto:tom.elrod at jboss.com">Tom Elrod</a>
   */
  public class TransportServerFactory implements ServerFactory
  {
     public ServerInvoker createServerInvoker(InvokerLocator locator, Map config)
     {
        return new SSLSocketServerInvoker(locator, config);
     }
  
     public boolean supportsSSL()
     {
        return true;
     }
  }
  
  
  



More information about the jboss-cvs-commits mailing list