private WriteFuture initiateClosure(NextFilter nextFilter, IoSession session) throws SSLException { SslHandler handler = getSslSessionHandler(session); // if already shut down if (!handler.closeOutbound()) { return DefaultWriteFuture.newNotWrittenFuture( session, new IllegalStateException("SSL session is shut down already.")); } // there might be data to write out here? WriteFuture future = handler.writeNetBuffer(nextFilter); if (future == null) { future = DefaultWriteFuture.newWrittenFuture(session); } if (handler.isInboundDone()) { handler.destroy(); } if (session.containsAttribute(USE_NOTIFICATION)) { handler.scheduleMessageReceived(nextFilter, SESSION_UNSECURED); } return future; }
if (!sslHandler.closeOutbound()) { return DefaultWriteFuture.newNotWrittenFuture(session, new IllegalStateException( "SSL session is shut down already."));
private WriteFuture initiateClosure(NextFilter nextFilter, IoSession session) throws SSLException { SslHandler sslHandler = getSslSessionHandler(session); WriteFuture future = null; // if already shut down try { synchronized(sslHandler) { if (!sslHandler.closeOutbound()) { return DefaultWriteFuture.newNotWrittenFuture(session, new IllegalStateException( "SSL session is shut down already.")); } // there might be data to write out here? future = sslHandler.writeNetBuffer(nextFilter); if (future == null) { future = DefaultWriteFuture.newWrittenFuture(session); } if (sslHandler.isInboundDone()) { sslHandler.destroy(); } } // Inform that the session is not any more secured session.getFilterChain().fireEvent(SslEvent.UNSECURED); } catch (SSLException se) { sslHandler.release(); throw se; } return future; }