Package org.apache.mina.filter.support

Examples of org.apache.mina.filter.support.SSLHandler$Event


    }
  
    public void messageReceived( NextFilter nextFilter, IoSession session,
                                 Object message ) throws SSLException
    {
        SSLHandler handler = getSSLSessionHandler( session );
        synchronized( handler )
        {
            if( !isSSLStarted( session ) && handler.isInboundDone() )
            {
                handler.schedulePostHandshakeMessage( nextFilter, message );
            }
            else
            {
                ByteBuffer buf = ( ByteBuffer ) message;
                if( SessionLog.isDebugEnabled( session ) )
                {
                    SessionLog.debug( session, " Data Read: " + handler + " (" + buf+ ')' );
                }
   
                try
                {
                    // forward read encrypted data to SSL handler
                    handler.messageReceived( nextFilter, buf.buf() );
   
                    // Handle data to be forwarded to application or written to net
                    handleSSLData( nextFilter, handler );
   
                    if( handler.isInboundDone() )
                    {
                        if( handler.isOutboundDone() )
                        {
                            if( SessionLog.isDebugEnabled( session ) )
                            {
                                SessionLog.debug(
                                        session, " SSL Session closed." );
                            }
                           
                            handler.destroy();
                        }
                        else
                        {
                            initiateClosure( nextFilter, session );
                        }
   
                        if( buf.hasRemaining() )
                        {
                            handler.schedulePostHandshakeMessage( nextFilter, buf );
                        }
                    }
                }
                catch( SSLException ssle )
                {
                    if( !handler.isInitialHandshakeComplete() )
                    {
                        SSLException newSSLE = new SSLHandshakeException(
                                "Initial SSL handshake failed." );
                        newSSLE.initCause( ssle );
                        ssle = newSSLE;
                    }
   
                    throw ssle;
                }
            }
        }
       
        handler.flushPostHandshakeEvents();
    }
View Full Code Here


        }
    }

    public void filterWrite( NextFilter nextFilter, IoSession session, WriteRequest writeRequest ) throws SSLException
    {
        SSLHandler handler = getSSLSessionHandler( session );
        synchronized( handler )
        {
            if( !isSSLStarted( session ) )
            {
                handler.schedulePostHandshakeWriteRequest( nextFilter, writeRequest );
            }
            // Don't encrypt the data if encryption is disabled.
            else if ( session.containsAttribute( DISABLE_ENCRYPTION_ONCE ) )
            {
                // Remove the marker attribute because it is temporary.
                session.removeAttribute( DISABLE_ENCRYPTION_ONCE );
                handler.schedulePostHandshakeWriteRequest( nextFilter, writeRequest );
            }
            else
            {
                // Otherwise, encrypt the buffer.
                ByteBuffer buf = ( ByteBuffer ) writeRequest.getMessage();
           
                if( SessionLog.isDebugEnabled( session ) )
                {
                    SessionLog.debug( session, " Filtered Write: " + handler );
                }
   
                if( handler.isWritingEncryptedData() )
                {
                    // data already encrypted; simply return buffer
                    if( SessionLog.isDebugEnabled( session ) )
                    {
                        SessionLog.debug( session, "   already encrypted: " + buf );
                    }
                    handler.schedulePostHandshakeWriteRequest( nextFilter, writeRequest );
                }
                else if( handler.isInitialHandshakeComplete() )
                {
                    // SSL encrypt
                    if( SessionLog.isDebugEnabled( session ) )
                    {
                        SessionLog.debug( session, " encrypt: " + buf );
                    }
                   
                    int pos = buf.position();
                    handler.encrypt( buf.buf() );
                    buf.position( pos );
                    ByteBuffer encryptedBuffer = new EncryptedBuffer(
                            SSLHandler.copy( handler.getOutNetBuffer() ), buf );
   
                    if( SessionLog.isDebugEnabled( session ) )
                    {
                        SessionLog.debug( session, " encrypted buf: " + encryptedBuffer);
                    }
                    handler.schedulePostHandshakeWriteRequest( nextFilter, new WriteRequest( encryptedBuffer, writeRequest.getFuture() ) );
                }
                else
                {
                    if( !session.isConnected() )
                    {
                        if( SessionLog.isDebugEnabled( session ) )
                        {
                            SessionLog.debug( session, " Write request on closed session." );
                        }
                    }
                    else
                    {
                        if( SessionLog.isDebugEnabled( session ) )
                        {
                            SessionLog.debug( session, " Handshaking is not complete yet. Buffering write request." );
                        }
                        handler.schedulePreHandshakeWriteRequest( nextFilter, writeRequest );
                    }
                }
            }
        }
       
        handler.flushPostHandshakeEvents();
    }
View Full Code Here

        handler.flushPostHandshakeEvents();
    }
   
    public void filterClose( final NextFilter nextFilter, final IoSession session ) throws SSLException
    {
        SSLHandler handler = getSSLSessionHandler( session );

        WriteFuture future = null;
        try
        {
            synchronized( handler )
            {
                if( isSSLStarted( session ) )
                {
                    future = initiateClosure( nextFilter, session );
                }
            }
           
            handler.flushPostHandshakeEvents();
        }
        finally
        {
            if( future == null )
            {
View Full Code Here

        }
    }
   
    private WriteFuture initiateClosure( NextFilter nextFilter, IoSession session ) throws SSLException
    {
        SSLHandler handler = getSSLSessionHandler( session );
        // if already shut down
        if( !handler.closeOutbound() )
        {
            return DefaultWriteFuture.newNotWrittenFuture( session );
        }
       
        // there might be data to write out here?
        WriteFuture future = handler.writeNetBuffer( nextFilter );
       
        if( handler.isInboundDone() )
        {
            handler.destroy();
        }

        if( session.containsAttribute( USE_NOTIFICATION ) )
        {
            handler.schedulePostHandshakeMessage( nextFilter, SESSION_UNSECURED );
        }
       
        return future;
    }
View Full Code Here

        handler.schedulePostHandshakeMessage( nextFilter, readBuffer );
    }

    private SSLHandler getSSLSessionHandler( IoSession session )
    {
        SSLHandler handler = getSSLSessionHandler0( session );
        if( handler == null )
        {
            throw new IllegalStateException();
        }
        if( handler.getParent() != this )
        {
            throw new IllegalArgumentException( "Not managed by this filter." );
        }
        return handler;
    }
View Full Code Here

     * @return <tt>true</tt> if the SSL session has been started, <tt>false</tt> if already started.
     * @throws SSLException if failed to start the SSL session
     */
    public boolean startSSL( IoSession session ) throws SSLException
    {
        SSLHandler handler = getSSLSessionHandler( session );
        synchronized( handler )
        {
            if( handler.isOutboundDone() )
            {
                NextFilter nextFilter = ( NextFilter ) session.getAttribute( NEXT_FILTER );
                handler.destroy();
                handler.init();
                handler.handshake( nextFilter );
                return true;
            }
            else
            {
                return false;
View Full Code Here

     * to retun <tt>false</tt> after TLS <tt>close_notify</tt> message
     * is sent and any messages written after then is not goinf to get encrypted.
     */
    public boolean isSSLStarted( IoSession session )
    {
        SSLHandler handler = getSSLSessionHandler( session );
        synchronized( handler )
        {
            return !handler.isOutboundDone();
        }
    }
View Full Code Here

     * @throws SSLException if failed to initiate TLS closure
     * @throws IllegalArgumentException if this filter is not managing the specified session
     */
    public WriteFuture stopSSL( IoSession session ) throws SSLException
    {
        SSLHandler handler = getSSLSessionHandler( session );
        NextFilter nextFilter = ( NextFilter ) session.getAttribute( NEXT_FILTER );
        synchronized( handler )
        {
            return initiateClosure( nextFilter, session );
        }
View Full Code Here

    {
        IoSession session = parent.getSession();
        session.setAttribute( NEXT_FILTER, nextFilter );
       
        // Create an SSL handler and start handshake.
        SSLHandler handler =
            new SSLHandler( this, sslContext, session );
        session.setAttribute( SSL_HANDLER, handler );
        handler.handshake( nextFilter );
    }
View Full Code Here

    }

    // IoFilter impl.
    public void sessionClosed( NextFilter nextFilter, IoSession session ) throws SSLException
    {
        SSLHandler handler = getSSLSessionHandler( session );
        try
        {
            synchronized( handler )
            {
                if( isSSLStarted( session ) )
                {
                    if( SessionLog.isDebugEnabled( session ) )
                    {
                        SessionLog.debug( session, " Closed: " + getSSLSessionHandler( session ) );
                    }
                }
               
                // release resources
                handler.destroy();
            }
        }
        finally
        {
           // notify closed session
View Full Code Here

TOP

Related Classes of org.apache.mina.filter.support.SSLHandler$Event

Copyright © 2018 www.massapicom. 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.