package org.jacorb.orb.listener; /* * JacORB - a free Java ORB * * Copyright (C) 1999-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ import java.io.IOException; import java.net.*; import javax.net.ssl.*; import org.jacorb.orb.ORB; import org.jacorb.orb.iiop.IIOPConnection; import org.jacorb.orb.iiop.IIOPAddress; import org.slf4j.Logger; /** * <code>SSLListenerUtil</code> contains utility methods for processing * SSL exceptions and adding a listener to a SSLSocket. This class is used * with the listeners. * * @author Nick Cross */ public class SSLListenerUtil { /** * <code>addListener</code> adds a handshake listener to a specific * socket.SSLListenerUtil * * @param socket a <code>Socket</code> value */ public static void addListener(ORB orb, Socket socket) { if (socket instanceof SSLSocket) { SSLSessionListener listener = orb.getTransportManager().getSocketFactoryManager().getSSLListener(); Logger logger = orb.getConfiguration().getLogger("org.jacorb.ssl.sessionlistener"); // TODO kategorie ((SSLSocket)socket).addHandshakeCompletedListener(new SSLHandshakeListener(logger, listener)); } } /** * <code>processException</code> examines the supplied exception for an * SSLException and can notify a listener. * * @param ex an <code>IOException</code> value */ public static void processException(ORB orb, IIOPConnection iiop, Socket socket, IOException ex) { final SSLSessionListener listener = orb.getTransportManager().getSocketFactoryManager().getSSLListener(); final Logger logger = orb.getConfiguration().getLogger("org.jacorb.ssl.sessionlistener"); // TODO kategorie String localhost = IIOPAddress.getLocalHostAddress(logger); // Not nice, but as a javax.net.ssl.SSLException extends // java.io.IOException we need to work out which one it is in order // to call the correct listener. if (ex instanceof SSLHandshakeException) { listener.handshakeException ( new SSLSessionEvent ( iiop, socket.getInetAddress().getHostAddress(), socket.getPort(), null, socket.getLocalPort(), localhost, ex ) ); } else if (ex instanceof SSLKeyException) { listener.keyException ( new SSLSessionEvent ( iiop, socket.getInetAddress().getHostAddress(), socket.getPort(), null, socket.getLocalPort(), localhost, ex ) ); } else if (ex instanceof SSLPeerUnverifiedException) { listener.peerUnverifiedException ( new SSLSessionEvent ( iiop, socket.getInetAddress().getHostAddress(), socket.getPort(), null, socket.getLocalPort(), localhost, ex ) ); } else if (ex instanceof SSLProtocolException) { listener.protocolException ( new SSLSessionEvent ( iiop, socket.getInetAddress().getHostAddress(), socket.getPort(), null, socket.getLocalPort(), localhost, ex ) ); } else if (ex instanceof SSLException) { listener.sslException ( new SSLSessionEvent ( iiop, socket.getInetAddress().getHostAddress(), socket.getPort(), null, socket.getLocalPort(), localhost, ex ) ); } else { if (logger.isDebugEnabled()) { logger.debug ( "Unknown exception type " + ex.getClass().getName() + " with exception " + ex ); } } } }