<!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.proxy;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.mina.core.service.IoHandler;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.mina.core.service.IoHandlerAdapter;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.mina.core.session.IoSession;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.mina.proxy.handlers.socks.SocksProxyRequest;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.mina.proxy.session.ProxyIoSession;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.slf4j.Logger;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.slf4j.LoggerFactory;<a name="line.28"></a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
<span class="sourceLineNo">031</span> * AbstractProxyIoHandler.java - {@link IoHandler} that intercepts events until handshake is complete.<a name="line.31"></a>
<span class="sourceLineNo">032</span> * <a name="line.32"></a>
<span class="sourceLineNo">033</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.33"></a>
<span class="sourceLineNo">034</span> * @since MINA 2.0.0-M3<a name="line.34"></a>
<span class="sourceLineNo">035</span> */<a name="line.35"></a>
<span class="sourceLineNo">036</span>public abstract class AbstractProxyIoHandler extends IoHandlerAdapter {<a name="line.36"></a>
<span class="sourceLineNo">037</span>    private final static Logger logger = LoggerFactory.getLogger(AbstractProxyIoHandler.class);<a name="line.37"></a>
<span class="sourceLineNo">038</span><a name="line.38"></a>
<span class="sourceLineNo">039</span>    /**<a name="line.39"></a>
<span class="sourceLineNo">040</span>     * Method called only when handshake has completed.<a name="line.40"></a>
<span class="sourceLineNo">041</span>     * <a name="line.41"></a>
<span class="sourceLineNo">042</span>     * @param session the io session<a name="line.42"></a>
<span class="sourceLineNo">043</span>     * @throws Exception If the proxy session can't be opened<a name="line.43"></a>
<span class="sourceLineNo">044</span>     */<a name="line.44"></a>
<span class="sourceLineNo">045</span>    public abstract void proxySessionOpened(IoSession session) throws Exception;<a name="line.45"></a>
<span class="sourceLineNo">046</span><a name="line.46"></a>
<span class="sourceLineNo">047</span>    /**<a name="line.47"></a>
<span class="sourceLineNo">048</span>     * Hooked session opened event.<a name="line.48"></a>
<span class="sourceLineNo">049</span>     * <a name="line.49"></a>
<span class="sourceLineNo">050</span>     * @param session the io session<a name="line.50"></a>
<span class="sourceLineNo">051</span>     */<a name="line.51"></a>
<span class="sourceLineNo">052</span>    @Override<a name="line.52"></a>
<span class="sourceLineNo">053</span>    public final void sessionOpened(IoSession session) throws Exception {<a name="line.53"></a>
<span class="sourceLineNo">054</span>        ProxyIoSession proxyIoSession = (ProxyIoSession) session.getAttribute(ProxyIoSession.PROXY_SESSION);<a name="line.54"></a>
<span class="sourceLineNo">055</span><a name="line.55"></a>
<span class="sourceLineNo">056</span>        if (proxyIoSession.getRequest() instanceof SocksProxyRequest || proxyIoSession.isAuthenticationFailed()<a name="line.56"></a>
<span class="sourceLineNo">057</span>                || proxyIoSession.getHandler().isHandshakeComplete()) {<a name="line.57"></a>
<span class="sourceLineNo">058</span>            proxySessionOpened(session);<a name="line.58"></a>
<span class="sourceLineNo">059</span>        } else {<a name="line.59"></a>
<span class="sourceLineNo">060</span>            logger.debug("Filtered session opened event !");<a name="line.60"></a>
<span class="sourceLineNo">061</span>        }<a name="line.61"></a>
<span class="sourceLineNo">062</span>    }<a name="line.62"></a>
<span class="sourceLineNo">063</span>}<a name="line.63"></a>




























































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