<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> *  Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> *  or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> *  distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> *  regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> *  to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> *  "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> *  with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> *  software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> *  KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> *  specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> *  under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> *<a name="line.18"></a>
<span class="sourceLineNo">019</span> */<a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.apache.mina.filter.ssl;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.net.InetSocketAddress;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span>import javax.net.ssl.SSLContext;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import javax.net.ssl.SSLEngine;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import javax.net.ssl.SSLException;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import javax.net.ssl.SSLHandshakeException;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import javax.net.ssl.SSLSession;<a name="line.30"></a>
<span class="sourceLineNo">031</span><a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.mina.core.buffer.IoBuffer;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.mina.core.filterchain.IoFilter;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.mina.core.filterchain.IoFilterAdapter;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.mina.core.filterchain.IoFilterChain;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.mina.core.future.DefaultWriteFuture;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.mina.core.future.IoFuture;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.mina.core.future.IoFutureListener;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.mina.core.future.WriteFuture;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.mina.core.service.IoAcceptor;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.mina.core.service.IoHandler;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.mina.core.session.AttributeKey;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.mina.core.session.IoSession;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.mina.core.write.WriteRequest;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.mina.core.write.WriteRequestWrapper;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.mina.core.write.WriteToClosedSessionException;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.slf4j.Logger;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.slf4j.LoggerFactory;<a name="line.48"></a>
<span class="sourceLineNo">049</span><a name="line.49"></a>
<span class="sourceLineNo">050</span>/**<a name="line.50"></a>
<span class="sourceLineNo">051</span> * An SSL filter that encrypts and decrypts the data exchanged in the session.<a name="line.51"></a>
<span class="sourceLineNo">052</span> * Adding this filter triggers SSL handshake procedure immediately by sending<a name="line.52"></a>
<span class="sourceLineNo">053</span> * a SSL 'hello' message, so you don't need to call<a name="line.53"></a>
<span class="sourceLineNo">054</span> * {@link #startSsl(IoSession)} manually unless you are implementing StartTLS<a name="line.54"></a>
<span class="sourceLineNo">055</span> * (see below).  If you don't want the handshake procedure to start<a name="line.55"></a>
<span class="sourceLineNo">056</span> * immediately, please specify {@code false} as {@code autoStart} parameter in<a name="line.56"></a>
<span class="sourceLineNo">057</span> * the constructor.<a name="line.57"></a>
<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
<span class="sourceLineNo">059</span> * This filter uses an {@link SSLEngine} which was introduced in Java 5, so<a name="line.59"></a>
<span class="sourceLineNo">060</span> * Java version 5 or above is mandatory to use this filter. And please note that<a name="line.60"></a>
<span class="sourceLineNo">061</span> * this filter only works for TCP/IP connections.<a name="line.61"></a>
<span class="sourceLineNo">062</span> *<a name="line.62"></a>
<span class="sourceLineNo">063</span> * &lt;h2&gt;Implementing StartTLS&lt;/h2&gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
<span class="sourceLineNo">065</span> * You can use {@link #DISABLE_ENCRYPTION_ONCE} attribute to implement StartTLS:<a name="line.65"></a>
<span class="sourceLineNo">066</span> * &lt;pre&gt;<a name="line.66"></a>
<span class="sourceLineNo">067</span> * public void messageReceived(IoSession session, Object message) {<a name="line.67"></a>
<span class="sourceLineNo">068</span> *    if (message instanceof MyStartTLSRequest) {<a name="line.68"></a>
<span class="sourceLineNo">069</span> *        // Insert SSLFilter to get ready for handshaking<a name="line.69"></a>
<span class="sourceLineNo">070</span> *        session.getFilterChain().addFirst(sslFilter);<a name="line.70"></a>
<span class="sourceLineNo">071</span> *<a name="line.71"></a>
<span class="sourceLineNo">072</span> *        // Disable encryption temporarilly.<a name="line.72"></a>
<span class="sourceLineNo">073</span> *        // This attribute will be removed by SSLFilter<a name="line.73"></a>
<span class="sourceLineNo">074</span> *        // inside the Session.write() call below.<a name="line.74"></a>
<span class="sourceLineNo">075</span> *        session.setAttribute(SSLFilter.DISABLE_ENCRYPTION_ONCE, Boolean.TRUE);<a name="line.75"></a>
<span class="sourceLineNo">076</span> *<a name="line.76"></a>
<span class="sourceLineNo">077</span> *        // Write StartTLSResponse which won't be encrypted.<a name="line.77"></a>
<span class="sourceLineNo">078</span> *        session.write(new MyStartTLSResponse(OK));<a name="line.78"></a>
<span class="sourceLineNo">079</span> *<a name="line.79"></a>
<span class="sourceLineNo">080</span> *        // Now DISABLE_ENCRYPTION_ONCE attribute is cleared.<a name="line.80"></a>
<span class="sourceLineNo">081</span> *        assert session.getAttribute(SSLFilter.DISABLE_ENCRYPTION_ONCE) == null;<a name="line.81"></a>
<span class="sourceLineNo">082</span> *    }<a name="line.82"></a>
<span class="sourceLineNo">083</span> * }<a name="line.83"></a>
<span class="sourceLineNo">084</span> * &lt;/pre&gt;<a name="line.84"></a>
<span class="sourceLineNo">085</span> *<a name="line.85"></a>
<span class="sourceLineNo">086</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.86"></a>
<span class="sourceLineNo">087</span> * @org.apache.xbean.XBean<a name="line.87"></a>
<span class="sourceLineNo">088</span> */<a name="line.88"></a>
<span class="sourceLineNo">089</span>public class SslFilter extends IoFilterAdapter {<a name="line.89"></a>
<span class="sourceLineNo">090</span>    /** The logger */<a name="line.90"></a>
<span class="sourceLineNo">091</span>    private static final Logger LOGGER = LoggerFactory.getLogger(SslFilter.class);<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>    /**<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * A session attribute key that stores underlying {@link SSLSession}<a name="line.94"></a>
<span class="sourceLineNo">095</span>     * for each session.<a name="line.95"></a>
<span class="sourceLineNo">096</span>     */<a name="line.96"></a>
<span class="sourceLineNo">097</span>    public static final AttributeKey SSL_SESSION = new AttributeKey(SslFilter.class, "session");<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>    /**<a name="line.99"></a>
<span class="sourceLineNo">100</span>     * A session attribute key that makes next one write request bypass<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * this filter (not encrypting the data).  This is a marker attribute,<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * which means that you can put whatever as its value. ({@link Boolean#TRUE}<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * is preferred.)  The attribute is automatically removed from the session<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * attribute map as soon as {@link IoSession#write(Object)} is invoked,<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * and therefore should be put again if you want to make more messages<a name="line.105"></a>
<span class="sourceLineNo">106</span>     * bypass this filter.  This is especially useful when you implement<a name="line.106"></a>
<span class="sourceLineNo">107</span>     * StartTLS.<a name="line.107"></a>
<span class="sourceLineNo">108</span>     */<a name="line.108"></a>
<span class="sourceLineNo">109</span>    public static final AttributeKey DISABLE_ENCRYPTION_ONCE = new AttributeKey(SslFilter.class, "disableOnce");<a name="line.109"></a>
<span class="sourceLineNo">110</span><a name="line.110"></a>
<span class="sourceLineNo">111</span>    /**<a name="line.111"></a>
<span class="sourceLineNo">112</span>     * A session attribute key that makes this filter to emit a<a name="line.112"></a>
<span class="sourceLineNo">113</span>     * {@link IoHandler#messageReceived(IoSession, Object)} event with a<a name="line.113"></a>
<span class="sourceLineNo">114</span>     * special message ({@link #SESSION_SECURED} or {@link #SESSION_UNSECURED}).<a name="line.114"></a>
<span class="sourceLineNo">115</span>     * This is a marker attribute, which means that you can put whatever as its<a name="line.115"></a>
<span class="sourceLineNo">116</span>     * value. ({@link Boolean#TRUE} is preferred.)  By default, this filter<a name="line.116"></a>
<span class="sourceLineNo">117</span>     * doesn't emit any events related with SSL session flow control.<a name="line.117"></a>
<span class="sourceLineNo">118</span>     */<a name="line.118"></a>
<span class="sourceLineNo">119</span>    public static final AttributeKey USE_NOTIFICATION = new AttributeKey(SslFilter.class, "useNotification");<a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
<span class="sourceLineNo">121</span>    /**<a name="line.121"></a>
<span class="sourceLineNo">122</span>     * A session attribute key that should be set to an {@link InetSocketAddress}.<a name="line.122"></a>
<span class="sourceLineNo">123</span>     * Setting this attribute causes<a name="line.123"></a>
<span class="sourceLineNo">124</span>     * {@link SSLContext#createSSLEngine(String, int)} to be called passing the<a name="line.124"></a>
<span class="sourceLineNo">125</span>     * hostname and port of the {@link InetSocketAddress} to get an<a name="line.125"></a>
<span class="sourceLineNo">126</span>     * {@link SSLEngine} instance. If not set {@link SSLContext#createSSLEngine()}<a name="line.126"></a>
<span class="sourceLineNo">127</span>     * will be called.<a name="line.127"></a>
<span class="sourceLineNo">128</span>     * &lt;br&gt;<a name="line.128"></a>
<span class="sourceLineNo">129</span>     * Using this feature {@link SSLSession} objects may be cached and reused<a name="line.129"></a>
<span class="sourceLineNo">130</span>     * when in client mode.<a name="line.130"></a>
<span class="sourceLineNo">131</span>     *<a name="line.131"></a>
<span class="sourceLineNo">132</span>     * @see SSLContext#createSSLEngine(String, int)<a name="line.132"></a>
<span class="sourceLineNo">133</span>     */<a name="line.133"></a>
<span class="sourceLineNo">134</span>    public static final AttributeKey PEER_ADDRESS = new AttributeKey(SslFilter.class, "peerAddress");<a name="line.134"></a>
<span class="sourceLineNo">135</span><a name="line.135"></a>
<span class="sourceLineNo">136</span>    /**<a name="line.136"></a>
<span class="sourceLineNo">137</span>     * A special message object which is emitted with a {@link IoHandler#messageReceived(IoSession, Object)}<a name="line.137"></a>
<span class="sourceLineNo">138</span>     * event when the session is secured and its {@link #USE_NOTIFICATION}<a name="line.138"></a>
<span class="sourceLineNo">139</span>     * attribute is set.<a name="line.139"></a>
<span class="sourceLineNo">140</span>     */<a name="line.140"></a>
<span class="sourceLineNo">141</span>    public static final SslFilterMessage SESSION_SECURED = new SslFilterMessage("SESSION_SECURED");<a name="line.141"></a>
<span class="sourceLineNo">142</span><a name="line.142"></a>
<span class="sourceLineNo">143</span>    /**<a name="line.143"></a>
<span class="sourceLineNo">144</span>     * A special message object which is emitted with a {@link IoHandler#messageReceived(IoSession, Object)}<a name="line.144"></a>
<span class="sourceLineNo">145</span>     * event when the session is not secure anymore and its {@link #USE_NOTIFICATION}<a name="line.145"></a>
<span class="sourceLineNo">146</span>     * attribute is set.<a name="line.146"></a>
<span class="sourceLineNo">147</span>     */<a name="line.147"></a>
<span class="sourceLineNo">148</span>    public static final SslFilterMessage SESSION_UNSECURED = new SslFilterMessage("SESSION_UNSECURED");<a name="line.148"></a>
<span class="sourceLineNo">149</span><a name="line.149"></a>
<span class="sourceLineNo">150</span>    private static final AttributeKey NEXT_FILTER = new AttributeKey(SslFilter.class, "nextFilter");<a name="line.150"></a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span>    private static final AttributeKey SSL_HANDLER = new AttributeKey(SslFilter.class, "handler");<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
<span class="sourceLineNo">154</span>    /** The SslContext used */<a name="line.154"></a>
<span class="sourceLineNo">155</span>    /* No qualifier */final SSLContext sslContext;<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>    /** A flag used to tell the filter to start the handshake immediately */<a name="line.157"></a>
<span class="sourceLineNo">158</span>    private final boolean autoStart;<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>    /** A flag used to determinate if the handshake should start immediately */<a name="line.160"></a>
<span class="sourceLineNo">161</span>    private static final boolean START_HANDSHAKE = true;<a name="line.161"></a>
<span class="sourceLineNo">162</span><a name="line.162"></a>
<span class="sourceLineNo">163</span>    private boolean client;<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>    private boolean needClientAuth;<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>    private boolean wantClientAuth;<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span>    private String[] enabledCipherSuites;<a name="line.169"></a>
<span class="sourceLineNo">170</span><a name="line.170"></a>
<span class="sourceLineNo">171</span>    private String[] enabledProtocols;<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>    /**<a name="line.173"></a>
<span class="sourceLineNo">174</span>     * Creates a new SSL filter using the specified {@link SSLContext}.<a name="line.174"></a>
<span class="sourceLineNo">175</span>     * The handshake will start immediately.<a name="line.175"></a>
<span class="sourceLineNo">176</span>     * <a name="line.176"></a>
<span class="sourceLineNo">177</span>     * @param sslContext The SSLContext to use<a name="line.177"></a>
<span class="sourceLineNo">178</span>     */<a name="line.178"></a>
<span class="sourceLineNo">179</span>    public SslFilter(SSLContext sslContext) {<a name="line.179"></a>
<span class="sourceLineNo">180</span>        this(sslContext, START_HANDSHAKE);<a name="line.180"></a>
<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
<span class="sourceLineNo">182</span><a name="line.182"></a>
<span class="sourceLineNo">183</span>    /**<a name="line.183"></a>
<span class="sourceLineNo">184</span>     * Creates a new SSL filter using the specified {@link SSLContext}.<a name="line.184"></a>
<span class="sourceLineNo">185</span>     * If the &lt;tt&gt;autostart&lt;/tt&gt; flag is set to &lt;tt&gt;true&lt;/tt&gt;, the<a name="line.185"></a>
<span class="sourceLineNo">186</span>     * handshake will start immediately.<a name="line.186"></a>
<span class="sourceLineNo">187</span>     * <a name="line.187"></a>
<span class="sourceLineNo">188</span>     * @param sslContext The SSLContext to use<a name="line.188"></a>
<span class="sourceLineNo">189</span>     * @param autoStart The flag used to tell the filter to start the handshake immediately<a name="line.189"></a>
<span class="sourceLineNo">190</span>     */<a name="line.190"></a>
<span class="sourceLineNo">191</span>    public SslFilter(SSLContext sslContext, boolean autoStart) {<a name="line.191"></a>
<span class="sourceLineNo">192</span>        if (sslContext == null) {<a name="line.192"></a>
<span class="sourceLineNo">193</span>            throw new IllegalArgumentException("sslContext");<a name="line.193"></a>
<span class="sourceLineNo">194</span>        }<a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
<span class="sourceLineNo">196</span>        this.sslContext = sslContext;<a name="line.196"></a>
<span class="sourceLineNo">197</span>        this.autoStart = autoStart;<a name="line.197"></a>
<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
<span class="sourceLineNo">199</span><a name="line.199"></a>
<span class="sourceLineNo">200</span>    /**<a name="line.200"></a>
<span class="sourceLineNo">201</span>     * Returns the underlying {@link SSLSession} for the specified session.<a name="line.201"></a>
<span class="sourceLineNo">202</span>     *<a name="line.202"></a>
<span class="sourceLineNo">203</span>     * @param session The current session <a name="line.203"></a>
<span class="sourceLineNo">204</span>     * @return &lt;tt&gt;null&lt;/tt&gt; if no {@link SSLSession} is initialized yet.<a name="line.204"></a>
<span class="sourceLineNo">205</span>     */<a name="line.205"></a>
<span class="sourceLineNo">206</span>    public SSLSession getSslSession(IoSession session) {<a name="line.206"></a>
<span class="sourceLineNo">207</span>        return (SSLSession) session.getAttribute(SSL_SESSION);<a name="line.207"></a>
<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
<span class="sourceLineNo">209</span><a name="line.209"></a>
<span class="sourceLineNo">210</span>    /**<a name="line.210"></a>
<span class="sourceLineNo">211</span>     * (Re)starts SSL session for the specified &lt;tt&gt;session&lt;/tt&gt; if not started yet.<a name="line.211"></a>
<span class="sourceLineNo">212</span>     * Please note that SSL session is automatically started by default, and therefore<a name="line.212"></a>
<span class="sourceLineNo">213</span>     * you don't need to call this method unless you've used TLS closure.<a name="line.213"></a>
<span class="sourceLineNo">214</span>     *<a name="line.214"></a>
<span class="sourceLineNo">215</span>     * @param session The session that will be switched to SSL mode<a name="line.215"></a>
<span class="sourceLineNo">216</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if the SSL session has been started, &lt;tt&gt;false&lt;/tt&gt; if already started.<a name="line.216"></a>
<span class="sourceLineNo">217</span>     * @throws SSLException if failed to start the SSL session<a name="line.217"></a>
<span class="sourceLineNo">218</span>     */<a name="line.218"></a>
<span class="sourceLineNo">219</span>    public boolean startSsl(IoSession session) throws SSLException {<a name="line.219"></a>
<span class="sourceLineNo">220</span>        SslHandler sslHandler = getSslSessionHandler(session);<a name="line.220"></a>
<span class="sourceLineNo">221</span>        boolean started;<a name="line.221"></a>
<span class="sourceLineNo">222</span><a name="line.222"></a>
<span class="sourceLineNo">223</span>        try {<a name="line.223"></a>
<span class="sourceLineNo">224</span>            synchronized (sslHandler) {<a name="line.224"></a>
<span class="sourceLineNo">225</span>                if (sslHandler.isOutboundDone()) {<a name="line.225"></a>
<span class="sourceLineNo">226</span>                    NextFilter nextFilter = (NextFilter) session.getAttribute(NEXT_FILTER);<a name="line.226"></a>
<span class="sourceLineNo">227</span>                    sslHandler.destroy();<a name="line.227"></a>
<span class="sourceLineNo">228</span>                    sslHandler.init();<a name="line.228"></a>
<span class="sourceLineNo">229</span>                    sslHandler.handshake(nextFilter);<a name="line.229"></a>
<span class="sourceLineNo">230</span>                    started = true;<a name="line.230"></a>
<span class="sourceLineNo">231</span>                } else {<a name="line.231"></a>
<span class="sourceLineNo">232</span>                    started = false;<a name="line.232"></a>
<span class="sourceLineNo">233</span>                }<a name="line.233"></a>
<span class="sourceLineNo">234</span>            }<a name="line.234"></a>
<span class="sourceLineNo">235</span><a name="line.235"></a>
<span class="sourceLineNo">236</span>            sslHandler.flushScheduledEvents();<a name="line.236"></a>
<span class="sourceLineNo">237</span>        } catch (SSLException se) {<a name="line.237"></a>
<span class="sourceLineNo">238</span>            sslHandler.release();<a name="line.238"></a>
<span class="sourceLineNo">239</span>            throw se;<a name="line.239"></a>
<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
<span class="sourceLineNo">241</span><a name="line.241"></a>
<span class="sourceLineNo">242</span>        return started;<a name="line.242"></a>
<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
<span class="sourceLineNo">244</span><a name="line.244"></a>
<span class="sourceLineNo">245</span>    /**<a name="line.245"></a>
<span class="sourceLineNo">246</span>     * An extended toString() method for sessions. If the SSL handshake<a name="line.246"></a>
<span class="sourceLineNo">247</span>     * is not yet completed, we will print (ssl) in small caps. Once it's<a name="line.247"></a>
<span class="sourceLineNo">248</span>     * completed, we will use SSL capitalized.<a name="line.248"></a>
<span class="sourceLineNo">249</span>     */<a name="line.249"></a>
<span class="sourceLineNo">250</span>    /* no qualifier */String getSessionInfo(IoSession session) {<a name="line.250"></a>
<span class="sourceLineNo">251</span>        StringBuilder sb = new StringBuilder();<a name="line.251"></a>
<span class="sourceLineNo">252</span><a name="line.252"></a>
<span class="sourceLineNo">253</span>        if (session.getService() instanceof IoAcceptor) {<a name="line.253"></a>
<span class="sourceLineNo">254</span>            sb.append("Session Server");<a name="line.254"></a>
<span class="sourceLineNo">255</span><a name="line.255"></a>
<span class="sourceLineNo">256</span>        } else {<a name="line.256"></a>
<span class="sourceLineNo">257</span>            sb.append("Session Client");<a name="line.257"></a>
<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
<span class="sourceLineNo">259</span><a name="line.259"></a>
<span class="sourceLineNo">260</span>        sb.append('[').append(session.getId()).append(']');<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>        SslHandler sslHandler = (SslHandler) session.getAttribute(SSL_HANDLER);<a name="line.262"></a>
<span class="sourceLineNo">263</span><a name="line.263"></a>
<span class="sourceLineNo">264</span>        if (sslHandler == null) {<a name="line.264"></a>
<span class="sourceLineNo">265</span>            sb.append("(no sslEngine)");<a name="line.265"></a>
<span class="sourceLineNo">266</span>        } else if (isSslStarted(session)) {<a name="line.266"></a>
<span class="sourceLineNo">267</span>            if (sslHandler.isHandshakeComplete()) {<a name="line.267"></a>
<span class="sourceLineNo">268</span>                sb.append("(SSL)");<a name="line.268"></a>
<span class="sourceLineNo">269</span>            } else {<a name="line.269"></a>
<span class="sourceLineNo">270</span>                sb.append("(ssl...)");<a name="line.270"></a>
<span class="sourceLineNo">271</span>            }<a name="line.271"></a>
<span class="sourceLineNo">272</span>        }<a name="line.272"></a>
<span class="sourceLineNo">273</span><a name="line.273"></a>
<span class="sourceLineNo">274</span>        return sb.toString();<a name="line.274"></a>
<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
<span class="sourceLineNo">276</span><a name="line.276"></a>
<span class="sourceLineNo">277</span>    /**<a name="line.277"></a>
<span class="sourceLineNo">278</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if and only if the specified &lt;tt&gt;session&lt;/tt&gt; is<a name="line.278"></a>
<span class="sourceLineNo">279</span>     * encrypted/decrypted over SSL/TLS currently. This method will start<a name="line.279"></a>
<span class="sourceLineNo">280</span>     * to return &lt;tt&gt;false&lt;/tt&gt; after TLS &lt;tt&gt;close_notify&lt;/tt&gt; message<a name="line.280"></a>
<span class="sourceLineNo">281</span>     * is sent and any messages written after then is not going to get encrypted.<a name="line.281"></a>
<span class="sourceLineNo">282</span>     * <a name="line.282"></a>
<span class="sourceLineNo">283</span>     * @param session the session we want to check<a name="line.283"></a>
<span class="sourceLineNo">284</span>     */<a name="line.284"></a>
<span class="sourceLineNo">285</span>    public boolean isSslStarted(IoSession session) {<a name="line.285"></a>
<span class="sourceLineNo">286</span>        SslHandler sslHandler = (SslHandler) session.getAttribute(SSL_HANDLER);<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>        if (sslHandler == null) {<a name="line.288"></a>
<span class="sourceLineNo">289</span>            return false;<a name="line.289"></a>
<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
<span class="sourceLineNo">292</span>        synchronized (sslHandler) {<a name="line.292"></a>
<span class="sourceLineNo">293</span>            return !sslHandler.isOutboundDone();<a name="line.293"></a>
<span class="sourceLineNo">294</span>        }<a name="line.294"></a>
<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
<span class="sourceLineNo">296</span><a name="line.296"></a>
<span class="sourceLineNo">297</span>    /**<a name="line.297"></a>
<span class="sourceLineNo">298</span>     * Stops the SSL session by sending TLS &lt;tt&gt;close_notify&lt;/tt&gt; message to<a name="line.298"></a>
<span class="sourceLineNo">299</span>     * initiate TLS closure.<a name="line.299"></a>
<span class="sourceLineNo">300</span>     *<a name="line.300"></a>
<span class="sourceLineNo">301</span>     * @param session the {@link IoSession} to initiate TLS closure<a name="line.301"></a>
<span class="sourceLineNo">302</span>     * @return The Future for the initiated closure<a name="line.302"></a>
<span class="sourceLineNo">303</span>     * @throws SSLException if failed to initiate TLS closure<a name="line.303"></a>
<span class="sourceLineNo">304</span>     */<a name="line.304"></a>
<span class="sourceLineNo">305</span>    public WriteFuture stopSsl(IoSession session) throws SSLException {<a name="line.305"></a>
<span class="sourceLineNo">306</span>        SslHandler sslHandler = getSslSessionHandler(session);<a name="line.306"></a>
<span class="sourceLineNo">307</span>        NextFilter nextFilter = (NextFilter) session.getAttribute(NEXT_FILTER);<a name="line.307"></a>
<span class="sourceLineNo">308</span>        WriteFuture future;<a name="line.308"></a>
<span class="sourceLineNo">309</span><a name="line.309"></a>
<span class="sourceLineNo">310</span>        try {<a name="line.310"></a>
<span class="sourceLineNo">311</span>            synchronized (sslHandler) {<a name="line.311"></a>
<span class="sourceLineNo">312</span>                future = initiateClosure(nextFilter, session);<a name="line.312"></a>
<span class="sourceLineNo">313</span>            }<a name="line.313"></a>
<span class="sourceLineNo">314</span><a name="line.314"></a>
<span class="sourceLineNo">315</span>            sslHandler.flushScheduledEvents();<a name="line.315"></a>
<span class="sourceLineNo">316</span>        } catch (SSLException se) {<a name="line.316"></a>
<span class="sourceLineNo">317</span>            sslHandler.release();<a name="line.317"></a>
<span class="sourceLineNo">318</span>            throw se;<a name="line.318"></a>
<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
<span class="sourceLineNo">320</span><a name="line.320"></a>
<span class="sourceLineNo">321</span>        return future;<a name="line.321"></a>
<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
<span class="sourceLineNo">323</span><a name="line.323"></a>
<span class="sourceLineNo">324</span>    /**<a name="line.324"></a>
<span class="sourceLineNo">325</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if the engine is set to use client mode<a name="line.325"></a>
<span class="sourceLineNo">326</span>     * when handshaking.<a name="line.326"></a>
<span class="sourceLineNo">327</span>     */<a name="line.327"></a>
<span class="sourceLineNo">328</span>    public boolean isUseClientMode() {<a name="line.328"></a>
<span class="sourceLineNo">329</span>        return client;<a name="line.329"></a>
<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
<span class="sourceLineNo">331</span><a name="line.331"></a>
<span class="sourceLineNo">332</span>    /**<a name="line.332"></a>
<span class="sourceLineNo">333</span>     * Configures the engine to use client (or server) mode when handshaking.<a name="line.333"></a>
<span class="sourceLineNo">334</span>     * <a name="line.334"></a>
<span class="sourceLineNo">335</span>     * @param clientMode &lt;tt&gt;true&lt;/tt&gt; when we are in client mode, &lt;tt&gt;false&lt;/tt&gt; when in server mode<a name="line.335"></a>
<span class="sourceLineNo">336</span>     */<a name="line.336"></a>
<span class="sourceLineNo">337</span>    public void setUseClientMode(boolean clientMode) {<a name="line.337"></a>
<span class="sourceLineNo">338</span>        this.client = clientMode;<a name="line.338"></a>
<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
<span class="sourceLineNo">340</span><a name="line.340"></a>
<span class="sourceLineNo">341</span>    /**<a name="line.341"></a>
<span class="sourceLineNo">342</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if the engine will &lt;em&gt;require&lt;/em&gt; client authentication.<a name="line.342"></a>
<span class="sourceLineNo">343</span>     * This option is only useful to engines in the server mode.<a name="line.343"></a>
<span class="sourceLineNo">344</span>     */<a name="line.344"></a>
<span class="sourceLineNo">345</span>    public boolean isNeedClientAuth() {<a name="line.345"></a>
<span class="sourceLineNo">346</span>        return needClientAuth;<a name="line.346"></a>
<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>    /**<a name="line.349"></a>
<span class="sourceLineNo">350</span>     * Configures the engine to &lt;em&gt;require&lt;/em&gt; client authentication.<a name="line.350"></a>
<span class="sourceLineNo">351</span>     * This option is only useful for engines in the server mode.<a name="line.351"></a>
<span class="sourceLineNo">352</span>     * <a name="line.352"></a>
<span class="sourceLineNo">353</span>     * @param needClientAuth A flag set when we need to authenticate the client<a name="line.353"></a>
<span class="sourceLineNo">354</span>     */<a name="line.354"></a>
<span class="sourceLineNo">355</span>    public void setNeedClientAuth(boolean needClientAuth) {<a name="line.355"></a>
<span class="sourceLineNo">356</span>        this.needClientAuth = needClientAuth;<a name="line.356"></a>
<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
<span class="sourceLineNo">358</span><a name="line.358"></a>
<span class="sourceLineNo">359</span>    /**<a name="line.359"></a>
<span class="sourceLineNo">360</span>     * @return &lt;tt&gt;true&lt;/tt&gt; if the engine will &lt;em&gt;request&lt;/em&gt; client authentication.<a name="line.360"></a>
<span class="sourceLineNo">361</span>     * This option is only useful to engines in the server mode.<a name="line.361"></a>
<span class="sourceLineNo">362</span>     */<a name="line.362"></a>
<span class="sourceLineNo">363</span>    public boolean isWantClientAuth() {<a name="line.363"></a>
<span class="sourceLineNo">364</span>        return wantClientAuth;<a name="line.364"></a>
<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
<span class="sourceLineNo">366</span><a name="line.366"></a>
<span class="sourceLineNo">367</span>    /**<a name="line.367"></a>
<span class="sourceLineNo">368</span>     * Configures the engine to &lt;em&gt;request&lt;/em&gt; client authentication.<a name="line.368"></a>
<span class="sourceLineNo">369</span>     * This option is only useful for engines in the server mode.<a name="line.369"></a>
<span class="sourceLineNo">370</span>     * <a name="line.370"></a>
<span class="sourceLineNo">371</span>     * @param wantClientAuth A flag set when we want to check the client authentication<a name="line.371"></a>
<span class="sourceLineNo">372</span>     */<a name="line.372"></a>
<span class="sourceLineNo">373</span>    public void setWantClientAuth(boolean wantClientAuth) {<a name="line.373"></a>
<span class="sourceLineNo">374</span>        this.wantClientAuth = wantClientAuth;<a name="line.374"></a>
<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
<span class="sourceLineNo">376</span><a name="line.376"></a>
<span class="sourceLineNo">377</span>    /**<a name="line.377"></a>
<span class="sourceLineNo">378</span>     * @return the list of cipher suites to be enabled when {@link SSLEngine}<a name="line.378"></a>
<span class="sourceLineNo">379</span>     * is initialized. &lt;tt&gt;null&lt;/tt&gt; means 'use {@link SSLEngine}'s default.'<a name="line.379"></a>
<span class="sourceLineNo">380</span>     */<a name="line.380"></a>
<span class="sourceLineNo">381</span>    public String[] getEnabledCipherSuites() {<a name="line.381"></a>
<span class="sourceLineNo">382</span>        return enabledCipherSuites;<a name="line.382"></a>
<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
<span class="sourceLineNo">384</span><a name="line.384"></a>
<span class="sourceLineNo">385</span>    /**<a name="line.385"></a>
<span class="sourceLineNo">386</span>     * Sets the list of cipher suites to be enabled when {@link SSLEngine}<a name="line.386"></a>
<span class="sourceLineNo">387</span>     * is initialized.<a name="line.387"></a>
<span class="sourceLineNo">388</span>     *<a name="line.388"></a>
<span class="sourceLineNo">389</span>     * @param cipherSuites &lt;tt&gt;null&lt;/tt&gt; means 'use {@link SSLEngine}'s default.'<a name="line.389"></a>
<span class="sourceLineNo">390</span>     */<a name="line.390"></a>
<span class="sourceLineNo">391</span>    public void setEnabledCipherSuites(String[] cipherSuites) {<a name="line.391"></a>
<span class="sourceLineNo">392</span>        this.enabledCipherSuites = cipherSuites;<a name="line.392"></a>
<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
<span class="sourceLineNo">395</span>    /**<a name="line.395"></a>
<span class="sourceLineNo">396</span>     * @return the list of protocols to be enabled when {@link SSLEngine}<a name="line.396"></a>
<span class="sourceLineNo">397</span>     * is initialized. &lt;tt&gt;null&lt;/tt&gt; means 'use {@link SSLEngine}'s default.'<a name="line.397"></a>
<span class="sourceLineNo">398</span>     */<a name="line.398"></a>
<span class="sourceLineNo">399</span>    public String[] getEnabledProtocols() {<a name="line.399"></a>
<span class="sourceLineNo">400</span>        return enabledProtocols;<a name="line.400"></a>
<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
<span class="sourceLineNo">402</span><a name="line.402"></a>
<span class="sourceLineNo">403</span>    /**<a name="line.403"></a>
<span class="sourceLineNo">404</span>     * Sets the list of protocols to be enabled when {@link SSLEngine}<a name="line.404"></a>
<span class="sourceLineNo">405</span>     * is initialized.<a name="line.405"></a>
<span class="sourceLineNo">406</span>     *<a name="line.406"></a>
<span class="sourceLineNo">407</span>     * @param protocols &lt;tt&gt;null&lt;/tt&gt; means 'use {@link SSLEngine}'s default.'<a name="line.407"></a>
<span class="sourceLineNo">408</span>     */<a name="line.408"></a>
<span class="sourceLineNo">409</span>    public void setEnabledProtocols(String[] protocols) {<a name="line.409"></a>
<span class="sourceLineNo">410</span>        this.enabledProtocols = protocols;<a name="line.410"></a>
<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
<span class="sourceLineNo">412</span><a name="line.412"></a>
<span class="sourceLineNo">413</span>    /**<a name="line.413"></a>
<span class="sourceLineNo">414</span>     * Executed just before the filter is added into the chain, we do :<a name="line.414"></a>
<span class="sourceLineNo">415</span>     * &lt;ul&gt;<a name="line.415"></a>
<span class="sourceLineNo">416</span>     * &lt;li&gt;check that we don't have a SSL filter already present<a name="line.416"></a>
<span class="sourceLineNo">417</span>     * &lt;li&gt;we update the next filter<a name="line.417"></a>
<span class="sourceLineNo">418</span>     * &lt;li&gt;we create the SSL handler helper class<a name="line.418"></a>
<span class="sourceLineNo">419</span>     * &lt;li&gt;and we store it into the session's Attributes<a name="line.419"></a>
<span class="sourceLineNo">420</span>     * &lt;/ul&gt;<a name="line.420"></a>
<span class="sourceLineNo">421</span>     */<a name="line.421"></a>
<span class="sourceLineNo">422</span>    @Override<a name="line.422"></a>
<span class="sourceLineNo">423</span>    public void onPreAdd(IoFilterChain parent, String name, NextFilter nextFilter) throws SSLException {<a name="line.423"></a>
<span class="sourceLineNo">424</span>        // Check that we don't have a SSL filter already present in the chain<a name="line.424"></a>
<span class="sourceLineNo">425</span>        if (parent.contains(SslFilter.class)) {<a name="line.425"></a>
<span class="sourceLineNo">426</span>            String msg = "Only one SSL filter is permitted in a chain.";<a name="line.426"></a>
<span class="sourceLineNo">427</span>            LOGGER.error(msg);<a name="line.427"></a>
<span class="sourceLineNo">428</span>            throw new IllegalStateException(msg);<a name="line.428"></a>
<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
<span class="sourceLineNo">430</span><a name="line.430"></a>
<span class="sourceLineNo">431</span>        LOGGER.debug("Adding the SSL Filter {} to the chain", name);<a name="line.431"></a>
<span class="sourceLineNo">432</span><a name="line.432"></a>
<span class="sourceLineNo">433</span>        IoSession session = parent.getSession();<a name="line.433"></a>
<span class="sourceLineNo">434</span>        session.setAttribute(NEXT_FILTER, nextFilter);<a name="line.434"></a>
<span class="sourceLineNo">435</span><a name="line.435"></a>
<span class="sourceLineNo">436</span>        // Create a SSL handler and start handshake.<a name="line.436"></a>
<span class="sourceLineNo">437</span>        SslHandler sslHandler = new SslHandler(this, session);<a name="line.437"></a>
<span class="sourceLineNo">438</span>        sslHandler.init();<a name="line.438"></a>
<span class="sourceLineNo">439</span><a name="line.439"></a>
<span class="sourceLineNo">440</span>        // Adding the supported ciphers in the SSLHandler<a name="line.440"></a>
<span class="sourceLineNo">441</span>        // In Java 6, we should call sslContext.getSupportedSSLParameters()<a name="line.441"></a>
<span class="sourceLineNo">442</span>        // instead<a name="line.442"></a>
<span class="sourceLineNo">443</span>        String[] ciphers = sslContext.getServerSocketFactory().getSupportedCipherSuites();<a name="line.443"></a>
<span class="sourceLineNo">444</span>        setEnabledCipherSuites(ciphers);<a name="line.444"></a>
<span class="sourceLineNo">445</span>        session.setAttribute(SSL_HANDLER, sslHandler);<a name="line.445"></a>
<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
<span class="sourceLineNo">447</span><a name="line.447"></a>
<span class="sourceLineNo">448</span>    @Override<a name="line.448"></a>
<span class="sourceLineNo">449</span>    public void onPostAdd(IoFilterChain parent, String name, NextFilter nextFilter) throws SSLException {<a name="line.449"></a>
<span class="sourceLineNo">450</span>        if (autoStart == START_HANDSHAKE) {<a name="line.450"></a>
<span class="sourceLineNo">451</span>            initiateHandshake(nextFilter, parent.getSession());<a name="line.451"></a>
<span class="sourceLineNo">452</span>        }<a name="line.452"></a>
<span class="sourceLineNo">453</span>    }<a name="line.453"></a>
<span class="sourceLineNo">454</span><a name="line.454"></a>
<span class="sourceLineNo">455</span>    @Override<a name="line.455"></a>
<span class="sourceLineNo">456</span>    public void onPreRemove(IoFilterChain parent, String name, NextFilter nextFilter) throws SSLException {<a name="line.456"></a>
<span class="sourceLineNo">457</span>        IoSession session = parent.getSession();<a name="line.457"></a>
<span class="sourceLineNo">458</span>        stopSsl(session);<a name="line.458"></a>
<span class="sourceLineNo">459</span>        session.removeAttribute(NEXT_FILTER);<a name="line.459"></a>
<span class="sourceLineNo">460</span>        session.removeAttribute(SSL_HANDLER);<a name="line.460"></a>
<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
<span class="sourceLineNo">462</span><a name="line.462"></a>
<span class="sourceLineNo">463</span>    // IoFilter impl.<a name="line.463"></a>
<span class="sourceLineNo">464</span>    @Override<a name="line.464"></a>
<span class="sourceLineNo">465</span>    public void sessionClosed(NextFilter nextFilter, IoSession session) throws SSLException {<a name="line.465"></a>
<span class="sourceLineNo">466</span>        SslHandler sslHandler = getSslSessionHandler(session);<a name="line.466"></a>
<span class="sourceLineNo">467</span><a name="line.467"></a>
<span class="sourceLineNo">468</span>        try {<a name="line.468"></a>
<span class="sourceLineNo">469</span>            synchronized (sslHandler) {<a name="line.469"></a>
<span class="sourceLineNo">470</span>                // release resources<a name="line.470"></a>
<span class="sourceLineNo">471</span>                sslHandler.destroy();<a name="line.471"></a>
<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
<span class="sourceLineNo">473</span><a name="line.473"></a>
<span class="sourceLineNo">474</span>            sslHandler.flushScheduledEvents();<a name="line.474"></a>
<span class="sourceLineNo">475</span>        } finally {<a name="line.475"></a>
<span class="sourceLineNo">476</span>            // notify closed session<a name="line.476"></a>
<span class="sourceLineNo">477</span>            nextFilter.sessionClosed(session);<a name="line.477"></a>
<span class="sourceLineNo">478</span>        }<a name="line.478"></a>
<span class="sourceLineNo">479</span>    }<a name="line.479"></a>
<span class="sourceLineNo">480</span><a name="line.480"></a>
<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
<span class="sourceLineNo">482</span>    public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws SSLException {<a name="line.482"></a>
<span class="sourceLineNo">483</span>        if (LOGGER.isDebugEnabled()) {<a name="line.483"></a>
<span class="sourceLineNo">484</span>            LOGGER.debug("{}: Message received : {}", getSessionInfo(session), message);<a name="line.484"></a>
<span class="sourceLineNo">485</span>        }<a name="line.485"></a>
<span class="sourceLineNo">486</span><a name="line.486"></a>
<span class="sourceLineNo">487</span>        SslHandler sslHandler = getSslSessionHandler(session);<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
<span class="sourceLineNo">489</span>        synchronized (sslHandler) {<a name="line.489"></a>
<span class="sourceLineNo">490</span>            if (!isSslStarted(session) &amp;&amp; sslHandler.isInboundDone()) {<a name="line.490"></a>
<span class="sourceLineNo">491</span>                // The SSL session must be established first before we<a name="line.491"></a>
<span class="sourceLineNo">492</span>                // can push data to the application. Store the incoming<a name="line.492"></a>
<span class="sourceLineNo">493</span>                // data into a queue for a later processing<a name="line.493"></a>
<span class="sourceLineNo">494</span>                sslHandler.scheduleMessageReceived(nextFilter, message);<a name="line.494"></a>
<span class="sourceLineNo">495</span>            } else {<a name="line.495"></a>
<span class="sourceLineNo">496</span>                IoBuffer buf = (IoBuffer) message;<a name="line.496"></a>
<span class="sourceLineNo">497</span><a name="line.497"></a>
<span class="sourceLineNo">498</span>                try {<a name="line.498"></a>
<span class="sourceLineNo">499</span>                    // forward read encrypted data to SSL handler<a name="line.499"></a>
<span class="sourceLineNo">500</span>                    sslHandler.messageReceived(nextFilter, buf.buf());<a name="line.500"></a>
<span class="sourceLineNo">501</span><a name="line.501"></a>
<span class="sourceLineNo">502</span>                    // Handle data to be forwarded to application or written to net<a name="line.502"></a>
<span class="sourceLineNo">503</span>                    handleSslData(nextFilter, sslHandler);<a name="line.503"></a>
<span class="sourceLineNo">504</span><a name="line.504"></a>
<span class="sourceLineNo">505</span>                    if (sslHandler.isInboundDone()) {<a name="line.505"></a>
<span class="sourceLineNo">506</span>                        if (sslHandler.isOutboundDone()) {<a name="line.506"></a>
<span class="sourceLineNo">507</span>                            sslHandler.destroy();<a name="line.507"></a>
<span class="sourceLineNo">508</span>                        } else {<a name="line.508"></a>
<span class="sourceLineNo">509</span>                            initiateClosure(nextFilter, session);<a name="line.509"></a>
<span class="sourceLineNo">510</span>                        }<a name="line.510"></a>
<span class="sourceLineNo">511</span><a name="line.511"></a>
<span class="sourceLineNo">512</span>                        if (buf.hasRemaining()) {<a name="line.512"></a>
<span class="sourceLineNo">513</span>                            // Forward the data received after closure.<a name="line.513"></a>
<span class="sourceLineNo">514</span>                            sslHandler.scheduleMessageReceived(nextFilter, buf);<a name="line.514"></a>
<span class="sourceLineNo">515</span>                        }<a name="line.515"></a>
<span class="sourceLineNo">516</span>                    }<a name="line.516"></a>
<span class="sourceLineNo">517</span>                } catch (SSLException ssle) {<a name="line.517"></a>
<span class="sourceLineNo">518</span>                    if (!sslHandler.isHandshakeComplete()) {<a name="line.518"></a>
<span class="sourceLineNo">519</span>                        SSLException newSsle = new SSLHandshakeException("SSL handshake failed.");<a name="line.519"></a>
<span class="sourceLineNo">520</span>                        newSsle.initCause(ssle);<a name="line.520"></a>
<span class="sourceLineNo">521</span>                        ssle = newSsle;<a name="line.521"></a>
<span class="sourceLineNo">522</span>                    } else {<a name="line.522"></a>
<span class="sourceLineNo">523</span>                        // Free the SSL Handler buffers<a name="line.523"></a>
<span class="sourceLineNo">524</span>                        sslHandler.release();<a name="line.524"></a>
<span class="sourceLineNo">525</span>                    }<a name="line.525"></a>
<span class="sourceLineNo">526</span><a name="line.526"></a>
<span class="sourceLineNo">527</span>                    throw ssle;<a name="line.527"></a>
<span class="sourceLineNo">528</span>                }<a name="line.528"></a>
<span class="sourceLineNo">529</span>            }<a name="line.529"></a>
<span class="sourceLineNo">530</span>        }<a name="line.530"></a>
<span class="sourceLineNo">531</span><a name="line.531"></a>
<span class="sourceLineNo">532</span>        sslHandler.flushScheduledEvents();<a name="line.532"></a>
<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
<span class="sourceLineNo">534</span><a name="line.534"></a>
<span class="sourceLineNo">535</span>    @Override<a name="line.535"></a>
<span class="sourceLineNo">536</span>    public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) {<a name="line.536"></a>
<span class="sourceLineNo">537</span>        if (writeRequest instanceof EncryptedWriteRequest) {<a name="line.537"></a>
<span class="sourceLineNo">538</span>            EncryptedWriteRequest wrappedRequest = (EncryptedWriteRequest) writeRequest;<a name="line.538"></a>
<span class="sourceLineNo">539</span>            nextFilter.messageSent(session, wrappedRequest.getParentRequest());<a name="line.539"></a>
<span class="sourceLineNo">540</span>        } else {<a name="line.540"></a>
<span class="sourceLineNo">541</span>            // ignore extra buffers used for handshaking<a name="line.541"></a>
<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
<span class="sourceLineNo">545</span>    @Override<a name="line.545"></a>
<span class="sourceLineNo">546</span>    public void exceptionCaught(NextFilter nextFilter, IoSession session, Throwable cause) throws Exception {<a name="line.546"></a>
<span class="sourceLineNo">547</span><a name="line.547"></a>
<span class="sourceLineNo">548</span>        if (cause instanceof WriteToClosedSessionException) {<a name="line.548"></a>
<span class="sourceLineNo">549</span>            // Filter out SSL close notify, which is likely to fail to flush<a name="line.549"></a>
<span class="sourceLineNo">550</span>            // due to disconnection.<a name="line.550"></a>
<span class="sourceLineNo">551</span>            WriteToClosedSessionException e = (WriteToClosedSessionException) cause;<a name="line.551"></a>
<span class="sourceLineNo">552</span>            List&lt;WriteRequest&gt; failedRequests = e.getRequests();<a name="line.552"></a>
<span class="sourceLineNo">553</span>            boolean containsCloseNotify = false;<a name="line.553"></a>
<span class="sourceLineNo">554</span><a name="line.554"></a>
<span class="sourceLineNo">555</span>            for (WriteRequest r : failedRequests) {<a name="line.555"></a>
<span class="sourceLineNo">556</span>                if (isCloseNotify(r.getMessage())) {<a name="line.556"></a>
<span class="sourceLineNo">557</span>                    containsCloseNotify = true;<a name="line.557"></a>
<span class="sourceLineNo">558</span>                    break;<a name="line.558"></a>
<span class="sourceLineNo">559</span>                }<a name="line.559"></a>
<span class="sourceLineNo">560</span>            }<a name="line.560"></a>
<span class="sourceLineNo">561</span><a name="line.561"></a>
<span class="sourceLineNo">562</span>            if (containsCloseNotify) {<a name="line.562"></a>
<span class="sourceLineNo">563</span>                if (failedRequests.size() == 1) {<a name="line.563"></a>
<span class="sourceLineNo">564</span>                    // close notify is the only failed request; bail out.<a name="line.564"></a>
<span class="sourceLineNo">565</span>                    return;<a name="line.565"></a>
<span class="sourceLineNo">566</span>                }<a name="line.566"></a>
<span class="sourceLineNo">567</span><a name="line.567"></a>
<span class="sourceLineNo">568</span>                List&lt;WriteRequest&gt; newFailedRequests = new ArrayList&lt;WriteRequest&gt;(failedRequests.size() - 1);<a name="line.568"></a>
<span class="sourceLineNo">569</span><a name="line.569"></a>
<span class="sourceLineNo">570</span>                for (WriteRequest r : failedRequests) {<a name="line.570"></a>
<span class="sourceLineNo">571</span>                    if (!isCloseNotify(r.getMessage())) {<a name="line.571"></a>
<span class="sourceLineNo">572</span>                        newFailedRequests.add(r);<a name="line.572"></a>
<span class="sourceLineNo">573</span>                    }<a name="line.573"></a>
<span class="sourceLineNo">574</span>                }<a name="line.574"></a>
<span class="sourceLineNo">575</span><a name="line.575"></a>
<span class="sourceLineNo">576</span>                if (newFailedRequests.isEmpty()) {<a name="line.576"></a>
<span class="sourceLineNo">577</span>                    // the failedRequests were full with close notify; bail out.<a name="line.577"></a>
<span class="sourceLineNo">578</span>                    return;<a name="line.578"></a>
<span class="sourceLineNo">579</span>                }<a name="line.579"></a>
<span class="sourceLineNo">580</span><a name="line.580"></a>
<span class="sourceLineNo">581</span>                cause = new WriteToClosedSessionException(newFailedRequests, cause.getMessage(), cause.getCause());<a name="line.581"></a>
<span class="sourceLineNo">582</span>            }<a name="line.582"></a>
<span class="sourceLineNo">583</span>        }<a name="line.583"></a>
<span class="sourceLineNo">584</span><a name="line.584"></a>
<span class="sourceLineNo">585</span>        nextFilter.exceptionCaught(session, cause);<a name="line.585"></a>
<span class="sourceLineNo">586</span>    }<a name="line.586"></a>
<span class="sourceLineNo">587</span><a name="line.587"></a>
<span class="sourceLineNo">588</span>    private boolean isCloseNotify(Object message) {<a name="line.588"></a>
<span class="sourceLineNo">589</span>        if (!(message instanceof IoBuffer)) {<a name="line.589"></a>
<span class="sourceLineNo">590</span>            return false;<a name="line.590"></a>
<span class="sourceLineNo">591</span>        }<a name="line.591"></a>
<span class="sourceLineNo">592</span><a name="line.592"></a>
<span class="sourceLineNo">593</span>        IoBuffer buf = (IoBuffer) message;<a name="line.593"></a>
<span class="sourceLineNo">594</span>        int offset = buf.position();<a name="line.594"></a>
<span class="sourceLineNo">595</span><a name="line.595"></a>
<span class="sourceLineNo">596</span>        return (buf.get(offset + 0) == 0x15) /* Alert */<a name="line.596"></a>
<span class="sourceLineNo">597</span>                &amp;&amp; (buf.get(offset + 1) == 0x03) /* TLS/SSL */<a name="line.597"></a>
<span class="sourceLineNo">598</span>                &amp;&amp; ((buf.get(offset + 2) == 0x00) /* SSL 3.0 */<a name="line.598"></a>
<span class="sourceLineNo">599</span>                        || (buf.get(offset + 2) == 0x01) /* TLS 1.0 */<a name="line.599"></a>
<span class="sourceLineNo">600</span>                        || (buf.get(offset + 2) == 0x02) /* TLS 1.1 */<a name="line.600"></a>
<span class="sourceLineNo">601</span>                        || (buf.get(offset + 2) == 0x03)) /* TLS 1.2 */<a name="line.601"></a>
<span class="sourceLineNo">602</span>                        &amp;&amp; (buf.get(offset + 3) == 0x00); /* close_notify */<a name="line.602"></a>
<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
<span class="sourceLineNo">604</span><a name="line.604"></a>
<span class="sourceLineNo">605</span>    @Override<a name="line.605"></a>
<span class="sourceLineNo">606</span>    public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws SSLException {<a name="line.606"></a>
<span class="sourceLineNo">607</span>        if (LOGGER.isDebugEnabled()) {<a name="line.607"></a>
<span class="sourceLineNo">608</span>            LOGGER.debug("{}: Writing Message : {}", getSessionInfo(session), writeRequest);<a name="line.608"></a>
<span class="sourceLineNo">609</span>        }<a name="line.609"></a>
<span class="sourceLineNo">610</span><a name="line.610"></a>
<span class="sourceLineNo">611</span>        boolean needsFlush = true;<a name="line.611"></a>
<span class="sourceLineNo">612</span>        SslHandler sslHandler = getSslSessionHandler(session);<a name="line.612"></a>
<span class="sourceLineNo">613</span><a name="line.613"></a>
<span class="sourceLineNo">614</span>        try {<a name="line.614"></a>
<span class="sourceLineNo">615</span>            synchronized (sslHandler) {<a name="line.615"></a>
<span class="sourceLineNo">616</span>                if (!isSslStarted(session)) {<a name="line.616"></a>
<span class="sourceLineNo">617</span>                    sslHandler.scheduleFilterWrite(nextFilter, writeRequest);<a name="line.617"></a>
<span class="sourceLineNo">618</span>                }<a name="line.618"></a>
<span class="sourceLineNo">619</span>                // Don't encrypt the data if encryption is disabled.<a name="line.619"></a>
<span class="sourceLineNo">620</span>                else if (session.containsAttribute(DISABLE_ENCRYPTION_ONCE)) {<a name="line.620"></a>
<span class="sourceLineNo">621</span>                    // Remove the marker attribute because it is temporary.<a name="line.621"></a>
<span class="sourceLineNo">622</span>                    session.removeAttribute(DISABLE_ENCRYPTION_ONCE);<a name="line.622"></a>
<span class="sourceLineNo">623</span>                    sslHandler.scheduleFilterWrite(nextFilter, writeRequest);<a name="line.623"></a>
<span class="sourceLineNo">624</span>                } else {<a name="line.624"></a>
<span class="sourceLineNo">625</span>                    // Otherwise, encrypt the buffer.<a name="line.625"></a>
<span class="sourceLineNo">626</span>                    IoBuffer buf = (IoBuffer) writeRequest.getMessage();<a name="line.626"></a>
<span class="sourceLineNo">627</span><a name="line.627"></a>
<span class="sourceLineNo">628</span>                    if (sslHandler.isWritingEncryptedData()) {<a name="line.628"></a>
<span class="sourceLineNo">629</span>                        // data already encrypted; simply return buffer<a name="line.629"></a>
<span class="sourceLineNo">630</span>                        sslHandler.scheduleFilterWrite(nextFilter, writeRequest);<a name="line.630"></a>
<span class="sourceLineNo">631</span>                    } else if (sslHandler.isHandshakeComplete()) {<a name="line.631"></a>
<span class="sourceLineNo">632</span>                        // SSL encrypt<a name="line.632"></a>
<span class="sourceLineNo">633</span>                        int pos = buf.position();<a name="line.633"></a>
<span class="sourceLineNo">634</span>                        sslHandler.encrypt(buf.buf());<a name="line.634"></a>
<span class="sourceLineNo">635</span>                        buf.position(pos);<a name="line.635"></a>
<span class="sourceLineNo">636</span>                        IoBuffer encryptedBuffer = sslHandler.fetchOutNetBuffer();<a name="line.636"></a>
<span class="sourceLineNo">637</span>                        sslHandler.scheduleFilterWrite(nextFilter, new EncryptedWriteRequest(writeRequest,<a name="line.637"></a>
<span class="sourceLineNo">638</span>                                encryptedBuffer));<a name="line.638"></a>
<span class="sourceLineNo">639</span>                    } else {<a name="line.639"></a>
<span class="sourceLineNo">640</span>                        if (session.isConnected()) {<a name="line.640"></a>
<span class="sourceLineNo">641</span>                            // Handshake not complete yet.<a name="line.641"></a>
<span class="sourceLineNo">642</span>                            sslHandler.schedulePreHandshakeWriteRequest(nextFilter, writeRequest);<a name="line.642"></a>
<span class="sourceLineNo">643</span>                        }<a name="line.643"></a>
<span class="sourceLineNo">644</span><a name="line.644"></a>
<span class="sourceLineNo">645</span>                        needsFlush = false;<a name="line.645"></a>
<span class="sourceLineNo">646</span>                    }<a name="line.646"></a>
<span class="sourceLineNo">647</span>                }<a name="line.647"></a>
<span class="sourceLineNo">648</span>            }<a name="line.648"></a>
<span class="sourceLineNo">649</span><a name="line.649"></a>
<span class="sourceLineNo">650</span>            if (needsFlush) {<a name="line.650"></a>
<span class="sourceLineNo">651</span>                sslHandler.flushScheduledEvents();<a name="line.651"></a>
<span class="sourceLineNo">652</span>            }<a name="line.652"></a>
<span class="sourceLineNo">653</span>        } catch (SSLException se) {<a name="line.653"></a>
<span class="sourceLineNo">654</span>            sslHandler.release();<a name="line.654"></a>
<span class="sourceLineNo">655</span>            throw se;<a name="line.655"></a>
<span class="sourceLineNo">656</span>        }<a name="line.656"></a>
<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
<span class="sourceLineNo">658</span><a name="line.658"></a>
<span class="sourceLineNo">659</span>    @Override<a name="line.659"></a>
<span class="sourceLineNo">660</span>    public void filterClose(final NextFilter nextFilter, final IoSession session) throws SSLException {<a name="line.660"></a>
<span class="sourceLineNo">661</span>        SslHandler sslHandler = (SslHandler) session.getAttribute(SSL_HANDLER);<a name="line.661"></a>
<span class="sourceLineNo">662</span><a name="line.662"></a>
<span class="sourceLineNo">663</span>        if (sslHandler == null) {<a name="line.663"></a>
<span class="sourceLineNo">664</span>            // The connection might already have closed, or<a name="line.664"></a>
<span class="sourceLineNo">665</span>            // SSL might have not started yet.<a name="line.665"></a>
<span class="sourceLineNo">666</span>            nextFilter.filterClose(session);<a name="line.666"></a>
<span class="sourceLineNo">667</span>            return;<a name="line.667"></a>
<span class="sourceLineNo">668</span>        }<a name="line.668"></a>
<span class="sourceLineNo">669</span><a name="line.669"></a>
<span class="sourceLineNo">670</span>        WriteFuture future = null;<a name="line.670"></a>
<span class="sourceLineNo">671</span><a name="line.671"></a>
<span class="sourceLineNo">672</span>        try {<a name="line.672"></a>
<span class="sourceLineNo">673</span>            synchronized (sslHandler) {<a name="line.673"></a>
<span class="sourceLineNo">674</span>                if (isSslStarted(session)) {<a name="line.674"></a>
<span class="sourceLineNo">675</span>                    future = initiateClosure(nextFilter, session);<a name="line.675"></a>
<span class="sourceLineNo">676</span>                    future.addListener(new IoFutureListener&lt;IoFuture&gt;() {<a name="line.676"></a>
<span class="sourceLineNo">677</span>                        public void operationComplete(IoFuture future) {<a name="line.677"></a>
<span class="sourceLineNo">678</span>                            nextFilter.filterClose(session);<a name="line.678"></a>
<span class="sourceLineNo">679</span>                        }<a name="line.679"></a>
<span class="sourceLineNo">680</span>                    });<a name="line.680"></a>
<span class="sourceLineNo">681</span>                }<a name="line.681"></a>
<span class="sourceLineNo">682</span>            }<a name="line.682"></a>
<span class="sourceLineNo">683</span><a name="line.683"></a>
<span class="sourceLineNo">684</span>            sslHandler.flushScheduledEvents();<a name="line.684"></a>
<span class="sourceLineNo">685</span>        } catch (SSLException se) {<a name="line.685"></a>
<span class="sourceLineNo">686</span>            sslHandler.release();<a name="line.686"></a>
<span class="sourceLineNo">687</span>            throw se;<a name="line.687"></a>
<span class="sourceLineNo">688</span>        } finally {<a name="line.688"></a>
<span class="sourceLineNo">689</span>            if (future == null) {<a name="line.689"></a>
<span class="sourceLineNo">690</span>                nextFilter.filterClose(session);<a name="line.690"></a>
<span class="sourceLineNo">691</span>            }<a name="line.691"></a>
<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
<span class="sourceLineNo">694</span><a name="line.694"></a>
<span class="sourceLineNo">695</span>    /**<a name="line.695"></a>
<span class="sourceLineNo">696</span>     * Initiate the SSL handshake. This can be invoked if you have set the 'autoStart' to<a name="line.696"></a>
<span class="sourceLineNo">697</span>     * false when creating the SslFilter instance.<a name="line.697"></a>
<span class="sourceLineNo">698</span>     * <a name="line.698"></a>
<span class="sourceLineNo">699</span>     * @param session The session for which the SSL handshake should be done<a name="line.699"></a>
<span class="sourceLineNo">700</span>     * @throws SSLException If the handshake failed<a name="line.700"></a>
<span class="sourceLineNo">701</span>     */<a name="line.701"></a>
<span class="sourceLineNo">702</span>    public void initiateHandshake(IoSession session) throws SSLException {<a name="line.702"></a>
<span class="sourceLineNo">703</span>        IoFilterChain filterChain = session.getFilterChain();<a name="line.703"></a>
<span class="sourceLineNo">704</span>        <a name="line.704"></a>
<span class="sourceLineNo">705</span>        if (filterChain == null) {<a name="line.705"></a>
<span class="sourceLineNo">706</span>            throw new SSLException("No filter chain");<a name="line.706"></a>
<span class="sourceLineNo">707</span>        }<a name="line.707"></a>
<span class="sourceLineNo">708</span>        <a name="line.708"></a>
<span class="sourceLineNo">709</span>        IoFilter.NextFilter nextFilter = filterChain.getNextFilter(SslFilter.class);<a name="line.709"></a>
<span class="sourceLineNo">710</span>        <a name="line.710"></a>
<span class="sourceLineNo">711</span>        if (nextFilter == null) {<a name="line.711"></a>
<span class="sourceLineNo">712</span>            throw new SSLException("No SSL next filter in the chain");<a name="line.712"></a>
<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
<span class="sourceLineNo">714</span>        <a name="line.714"></a>
<span class="sourceLineNo">715</span>        initiateHandshake(nextFilter, session);<a name="line.715"></a>
<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
<span class="sourceLineNo">717</span><a name="line.717"></a>
<span class="sourceLineNo">718</span>    private void initiateHandshake(NextFilter nextFilter, IoSession session) throws SSLException {<a name="line.718"></a>
<span class="sourceLineNo">719</span>        LOGGER.debug("{} : Starting the first handshake", getSessionInfo(session));<a name="line.719"></a>
<span class="sourceLineNo">720</span>        SslHandler sslHandler = getSslSessionHandler(session);<a name="line.720"></a>
<span class="sourceLineNo">721</span><a name="line.721"></a>
<span class="sourceLineNo">722</span>        try {<a name="line.722"></a>
<span class="sourceLineNo">723</span>            synchronized (sslHandler) {<a name="line.723"></a>
<span class="sourceLineNo">724</span>                sslHandler.handshake(nextFilter);<a name="line.724"></a>
<span class="sourceLineNo">725</span>            }<a name="line.725"></a>
<span class="sourceLineNo">726</span><a name="line.726"></a>
<span class="sourceLineNo">727</span>            sslHandler.flushScheduledEvents();<a name="line.727"></a>
<span class="sourceLineNo">728</span>        } catch (SSLException se) {<a name="line.728"></a>
<span class="sourceLineNo">729</span>            sslHandler.release();<a name="line.729"></a>
<span class="sourceLineNo">730</span>            throw se;<a name="line.730"></a>
<span class="sourceLineNo">731</span>        }<a name="line.731"></a>
<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
<span class="sourceLineNo">733</span><a name="line.733"></a>
<span class="sourceLineNo">734</span>    private WriteFuture initiateClosure(NextFilter nextFilter, IoSession session) throws SSLException {<a name="line.734"></a>
<span class="sourceLineNo">735</span>        SslHandler sslHandler = getSslSessionHandler(session);<a name="line.735"></a>
<span class="sourceLineNo">736</span>        WriteFuture future = null;<a name="line.736"></a>
<span class="sourceLineNo">737</span><a name="line.737"></a>
<span class="sourceLineNo">738</span>        // if already shut down<a name="line.738"></a>
<span class="sourceLineNo">739</span>        try {<a name="line.739"></a>
<span class="sourceLineNo">740</span>            if (!sslHandler.closeOutbound()) {<a name="line.740"></a>
<span class="sourceLineNo">741</span>                return DefaultWriteFuture.newNotWrittenFuture(session, new IllegalStateException(<a name="line.741"></a>
<span class="sourceLineNo">742</span>                        "SSL session is shut down already."));<a name="line.742"></a>
<span class="sourceLineNo">743</span>            }<a name="line.743"></a>
<span class="sourceLineNo">744</span><a name="line.744"></a>
<span class="sourceLineNo">745</span>            // there might be data to write out here?<a name="line.745"></a>
<span class="sourceLineNo">746</span>            future = sslHandler.writeNetBuffer(nextFilter);<a name="line.746"></a>
<span class="sourceLineNo">747</span><a name="line.747"></a>
<span class="sourceLineNo">748</span>            if (future == null) {<a name="line.748"></a>
<span class="sourceLineNo">749</span>                future = DefaultWriteFuture.newWrittenFuture(session);<a name="line.749"></a>
<span class="sourceLineNo">750</span>            }<a name="line.750"></a>
<span class="sourceLineNo">751</span><a name="line.751"></a>
<span class="sourceLineNo">752</span>            if (sslHandler.isInboundDone()) {<a name="line.752"></a>
<span class="sourceLineNo">753</span>                sslHandler.destroy();<a name="line.753"></a>
<span class="sourceLineNo">754</span>            }<a name="line.754"></a>
<span class="sourceLineNo">755</span><a name="line.755"></a>
<span class="sourceLineNo">756</span>            if (session.containsAttribute(USE_NOTIFICATION)) {<a name="line.756"></a>
<span class="sourceLineNo">757</span>                sslHandler.scheduleMessageReceived(nextFilter, SESSION_UNSECURED);<a name="line.757"></a>
<span class="sourceLineNo">758</span>            }<a name="line.758"></a>
<span class="sourceLineNo">759</span>        } catch (SSLException se) {<a name="line.759"></a>
<span class="sourceLineNo">760</span>            sslHandler.release();<a name="line.760"></a>
<span class="sourceLineNo">761</span>            throw se;<a name="line.761"></a>
<span class="sourceLineNo">762</span>        }<a name="line.762"></a>
<span class="sourceLineNo">763</span><a name="line.763"></a>
<span class="sourceLineNo">764</span>        return future;<a name="line.764"></a>
<span class="sourceLineNo">765</span>    }<a name="line.765"></a>
<span class="sourceLineNo">766</span><a name="line.766"></a>
<span class="sourceLineNo">767</span>    // Utilities<a name="line.767"></a>
<span class="sourceLineNo">768</span>    private void handleSslData(NextFilter nextFilter, SslHandler sslHandler) throws SSLException {<a name="line.768"></a>
<span class="sourceLineNo">769</span>        if (LOGGER.isDebugEnabled()) {<a name="line.769"></a>
<span class="sourceLineNo">770</span>            LOGGER.debug("{}: Processing the SSL Data ", getSessionInfo(sslHandler.getSession()));<a name="line.770"></a>
<span class="sourceLineNo">771</span>        }<a name="line.771"></a>
<span class="sourceLineNo">772</span><a name="line.772"></a>
<span class="sourceLineNo">773</span>        // Flush any buffered write requests occurred before handshaking.<a name="line.773"></a>
<span class="sourceLineNo">774</span>        if (sslHandler.isHandshakeComplete()) {<a name="line.774"></a>
<span class="sourceLineNo">775</span>            sslHandler.flushPreHandshakeEvents();<a name="line.775"></a>
<span class="sourceLineNo">776</span>        }<a name="line.776"></a>
<span class="sourceLineNo">777</span><a name="line.777"></a>
<span class="sourceLineNo">778</span>        // Write encrypted data to be written (if any)<a name="line.778"></a>
<span class="sourceLineNo">779</span>        sslHandler.writeNetBuffer(nextFilter);<a name="line.779"></a>
<span class="sourceLineNo">780</span><a name="line.780"></a>
<span class="sourceLineNo">781</span>        // handle app. data read (if any)<a name="line.781"></a>
<span class="sourceLineNo">782</span>        handleAppDataRead(nextFilter, sslHandler);<a name="line.782"></a>
<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
<span class="sourceLineNo">784</span><a name="line.784"></a>
<span class="sourceLineNo">785</span>    private void handleAppDataRead(NextFilter nextFilter, SslHandler sslHandler) {<a name="line.785"></a>
<span class="sourceLineNo">786</span>        // forward read app data<a name="line.786"></a>
<span class="sourceLineNo">787</span>        IoBuffer readBuffer = sslHandler.fetchAppBuffer();<a name="line.787"></a>
<span class="sourceLineNo">788</span><a name="line.788"></a>
<span class="sourceLineNo">789</span>        if (readBuffer.hasRemaining()) {<a name="line.789"></a>
<span class="sourceLineNo">790</span>            sslHandler.scheduleMessageReceived(nextFilter, readBuffer);<a name="line.790"></a>
<span class="sourceLineNo">791</span>        }<a name="line.791"></a>
<span class="sourceLineNo">792</span>    }<a name="line.792"></a>
<span class="sourceLineNo">793</span><a name="line.793"></a>
<span class="sourceLineNo">794</span>    private SslHandler getSslSessionHandler(IoSession session) {<a name="line.794"></a>
<span class="sourceLineNo">795</span>        SslHandler sslHandler = (SslHandler) session.getAttribute(SSL_HANDLER);<a name="line.795"></a>
<span class="sourceLineNo">796</span><a name="line.796"></a>
<span class="sourceLineNo">797</span>        if (sslHandler == null) {<a name="line.797"></a>
<span class="sourceLineNo">798</span>            throw new IllegalStateException();<a name="line.798"></a>
<span class="sourceLineNo">799</span>        }<a name="line.799"></a>
<span class="sourceLineNo">800</span><a name="line.800"></a>
<span class="sourceLineNo">801</span>        if (sslHandler.getSslFilter() != this) {<a name="line.801"></a>
<span class="sourceLineNo">802</span>            throw new IllegalArgumentException("Not managed by this filter.");<a name="line.802"></a>
<span class="sourceLineNo">803</span>        }<a name="line.803"></a>
<span class="sourceLineNo">804</span><a name="line.804"></a>
<span class="sourceLineNo">805</span>        return sslHandler;<a name="line.805"></a>
<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
<span class="sourceLineNo">807</span><a name="line.807"></a>
<span class="sourceLineNo">808</span>    /**<a name="line.808"></a>
<span class="sourceLineNo">809</span>     * A message that is sent from {@link SslFilter} when the connection became<a name="line.809"></a>
<span class="sourceLineNo">810</span>     * secure or is not secure anymore.<a name="line.810"></a>
<span class="sourceLineNo">811</span>     *<a name="line.811"></a>
<span class="sourceLineNo">812</span>     * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.812"></a>
<span class="sourceLineNo">813</span>     */<a name="line.813"></a>
<span class="sourceLineNo">814</span>    public static class SslFilterMessage {<a name="line.814"></a>
<span class="sourceLineNo">815</span>        private final String name;<a name="line.815"></a>
<span class="sourceLineNo">816</span><a name="line.816"></a>
<span class="sourceLineNo">817</span>        private SslFilterMessage(String name) {<a name="line.817"></a>
<span class="sourceLineNo">818</span>            this.name = name;<a name="line.818"></a>
<span class="sourceLineNo">819</span>        }<a name="line.819"></a>
<span class="sourceLineNo">820</span><a name="line.820"></a>
<span class="sourceLineNo">821</span>        @Override<a name="line.821"></a>
<span class="sourceLineNo">822</span>        public String toString() {<a name="line.822"></a>
<span class="sourceLineNo">823</span>            return name;<a name="line.823"></a>
<span class="sourceLineNo">824</span>        }<a name="line.824"></a>
<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
<span class="sourceLineNo">826</span><a name="line.826"></a>
<span class="sourceLineNo">827</span>    private static class EncryptedWriteRequest extends WriteRequestWrapper {<a name="line.827"></a>
<span class="sourceLineNo">828</span>        private final IoBuffer encryptedMessage;<a name="line.828"></a>
<span class="sourceLineNo">829</span><a name="line.829"></a>
<span class="sourceLineNo">830</span>        private EncryptedWriteRequest(WriteRequest writeRequest, IoBuffer encryptedMessage) {<a name="line.830"></a>
<span class="sourceLineNo">831</span>            super(writeRequest);<a name="line.831"></a>
<span class="sourceLineNo">832</span>            this.encryptedMessage = encryptedMessage;<a name="line.832"></a>
<span class="sourceLineNo">833</span>        }<a name="line.833"></a>
<span class="sourceLineNo">834</span><a name="line.834"></a>
<span class="sourceLineNo">835</span>        @Override<a name="line.835"></a>
<span class="sourceLineNo">836</span>        public Object getMessage() {<a name="line.836"></a>
<span class="sourceLineNo">837</span>            return encryptedMessage;<a name="line.837"></a>
<span class="sourceLineNo">838</span>        }<a name="line.838"></a>
<span class="sourceLineNo">839</span>    }<a name="line.839"></a>
<span class="sourceLineNo">840</span>}<a name="line.840"></a>




























































</pre>
</div>
</body>
</html>
