<!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.core.service;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.net.SocketAddress;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.ArrayList;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.Collection;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.Collections;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.concurrent.Executor;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.concurrent.Executors;<a name="line.31"></a>
<span class="sourceLineNo">032</span><a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.mina.core.RuntimeIoException;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.mina.core.session.IoSession;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.mina.core.session.IoSessionConfig;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
<span class="sourceLineNo">038</span> * A base implementation of {@link IoAcceptor}.<a name="line.38"></a>
<span class="sourceLineNo">039</span> *<a name="line.39"></a>
<span class="sourceLineNo">040</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.40"></a>
<span class="sourceLineNo">041</span> * @org.apache.xbean.XBean<a name="line.41"></a>
<span class="sourceLineNo">042</span> */<a name="line.42"></a>
<span class="sourceLineNo">043</span>public abstract class AbstractIoAcceptor extends AbstractIoService implements IoAcceptor {<a name="line.43"></a>
<span class="sourceLineNo">044</span><a name="line.44"></a>
<span class="sourceLineNo">045</span>    private final List&lt;SocketAddress&gt; defaultLocalAddresses = new ArrayList&lt;SocketAddress&gt;();<a name="line.45"></a>
<span class="sourceLineNo">046</span><a name="line.46"></a>
<span class="sourceLineNo">047</span>    private final List&lt;SocketAddress&gt; unmodifiableDefaultLocalAddresses = Collections<a name="line.47"></a>
<span class="sourceLineNo">048</span>            .unmodifiableList(defaultLocalAddresses);<a name="line.48"></a>
<span class="sourceLineNo">049</span><a name="line.49"></a>
<span class="sourceLineNo">050</span>    private final Set&lt;SocketAddress&gt; boundAddresses = new HashSet&lt;SocketAddress&gt;();<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>    private boolean disconnectOnUnbind = true;<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>    /**<a name="line.54"></a>
<span class="sourceLineNo">055</span>     * The lock object which is acquired while bind or unbind operation is performed.<a name="line.55"></a>
<span class="sourceLineNo">056</span>     * Acquire this lock in your property setters which shouldn't be changed while<a name="line.56"></a>
<span class="sourceLineNo">057</span>     * the service is bound.<a name="line.57"></a>
<span class="sourceLineNo">058</span>     */<a name="line.58"></a>
<span class="sourceLineNo">059</span>    protected final Object bindLock = new Object();<a name="line.59"></a>
<span class="sourceLineNo">060</span><a name="line.60"></a>
<span class="sourceLineNo">061</span>    /**<a name="line.61"></a>
<span class="sourceLineNo">062</span>     * Constructor for {@link AbstractIoAcceptor}. You need to provide a default<a name="line.62"></a>
<span class="sourceLineNo">063</span>     * session configuration and an {@link Executor} for handling I/O events. If<a name="line.63"></a>
<span class="sourceLineNo">064</span>     * null {@link Executor} is provided, a default one will be created using<a name="line.64"></a>
<span class="sourceLineNo">065</span>     * {@link Executors#newCachedThreadPool()}.<a name="line.65"></a>
<span class="sourceLineNo">066</span>     * <a name="line.66"></a>
<span class="sourceLineNo">067</span>     * @see AbstractIoService#AbstractIoService(IoSessionConfig, Executor)<a name="line.67"></a>
<span class="sourceLineNo">068</span>     * <a name="line.68"></a>
<span class="sourceLineNo">069</span>     * @param sessionConfig<a name="line.69"></a>
<span class="sourceLineNo">070</span>     *            the default configuration for the managed {@link IoSession}<a name="line.70"></a>
<span class="sourceLineNo">071</span>     * @param executor<a name="line.71"></a>
<span class="sourceLineNo">072</span>     *            the {@link Executor} used for handling execution of I/O<a name="line.72"></a>
<span class="sourceLineNo">073</span>     *            events. Can be &lt;code&gt;null&lt;/code&gt;.<a name="line.73"></a>
<span class="sourceLineNo">074</span>     */<a name="line.74"></a>
<span class="sourceLineNo">075</span>    protected AbstractIoAcceptor(IoSessionConfig sessionConfig, Executor executor) {<a name="line.75"></a>
<span class="sourceLineNo">076</span>        super(sessionConfig, executor);<a name="line.76"></a>
<span class="sourceLineNo">077</span>        defaultLocalAddresses.add(null);<a name="line.77"></a>
<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>    /**<a name="line.80"></a>
<span class="sourceLineNo">081</span>     * {@inheritDoc}<a name="line.81"></a>
<span class="sourceLineNo">082</span>     */<a name="line.82"></a>
<span class="sourceLineNo">083</span>    public SocketAddress getLocalAddress() {<a name="line.83"></a>
<span class="sourceLineNo">084</span>        Set&lt;SocketAddress&gt; localAddresses = getLocalAddresses();<a name="line.84"></a>
<span class="sourceLineNo">085</span>        if (localAddresses.isEmpty()) {<a name="line.85"></a>
<span class="sourceLineNo">086</span>            return null;<a name="line.86"></a>
<span class="sourceLineNo">087</span>        }<a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88"></a>
<span class="sourceLineNo">089</span>        return localAddresses.iterator().next();<a name="line.89"></a>
<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
<span class="sourceLineNo">091</span><a name="line.91"></a>
<span class="sourceLineNo">092</span>    /**<a name="line.92"></a>
<span class="sourceLineNo">093</span>     * {@inheritDoc}<a name="line.93"></a>
<span class="sourceLineNo">094</span>     */<a name="line.94"></a>
<span class="sourceLineNo">095</span>    public final Set&lt;SocketAddress&gt; getLocalAddresses() {<a name="line.95"></a>
<span class="sourceLineNo">096</span>        Set&lt;SocketAddress&gt; localAddresses = new HashSet&lt;SocketAddress&gt;();<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>        synchronized (boundAddresses) {<a name="line.98"></a>
<span class="sourceLineNo">099</span>            localAddresses.addAll(boundAddresses);<a name="line.99"></a>
<span class="sourceLineNo">100</span>        }<a name="line.100"></a>
<span class="sourceLineNo">101</span><a name="line.101"></a>
<span class="sourceLineNo">102</span>        return localAddresses;<a name="line.102"></a>
<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span>    /**<a name="line.105"></a>
<span class="sourceLineNo">106</span>     * {@inheritDoc}<a name="line.106"></a>
<span class="sourceLineNo">107</span>     */<a name="line.107"></a>
<span class="sourceLineNo">108</span>    public SocketAddress getDefaultLocalAddress() {<a name="line.108"></a>
<span class="sourceLineNo">109</span>        if (defaultLocalAddresses.isEmpty()) {<a name="line.109"></a>
<span class="sourceLineNo">110</span>            return null;<a name="line.110"></a>
<span class="sourceLineNo">111</span>        }<a name="line.111"></a>
<span class="sourceLineNo">112</span>        return defaultLocalAddresses.iterator().next();<a name="line.112"></a>
<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>    /**<a name="line.115"></a>
<span class="sourceLineNo">116</span>     * {@inheritDoc}<a name="line.116"></a>
<span class="sourceLineNo">117</span>     */<a name="line.117"></a>
<span class="sourceLineNo">118</span>    public final void setDefaultLocalAddress(SocketAddress localAddress) {<a name="line.118"></a>
<span class="sourceLineNo">119</span>        setDefaultLocalAddresses(localAddress);<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 name="line.122"></a>
<span class="sourceLineNo">123</span>     * {@inheritDoc}<a name="line.123"></a>
<span class="sourceLineNo">124</span>     */<a name="line.124"></a>
<span class="sourceLineNo">125</span>    public final List&lt;SocketAddress&gt; getDefaultLocalAddresses() {<a name="line.125"></a>
<span class="sourceLineNo">126</span>        return unmodifiableDefaultLocalAddresses;<a name="line.126"></a>
<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
<span class="sourceLineNo">128</span><a name="line.128"></a>
<span class="sourceLineNo">129</span>    /**<a name="line.129"></a>
<span class="sourceLineNo">130</span>     * {@inheritDoc}<a name="line.130"></a>
<span class="sourceLineNo">131</span>     * @org.apache.xbean.Property nestedType="java.net.SocketAddress"<a name="line.131"></a>
<span class="sourceLineNo">132</span>     */<a name="line.132"></a>
<span class="sourceLineNo">133</span>    public final void setDefaultLocalAddresses(List&lt;? extends SocketAddress&gt; localAddresses) {<a name="line.133"></a>
<span class="sourceLineNo">134</span>        if (localAddresses == null) {<a name="line.134"></a>
<span class="sourceLineNo">135</span>            throw new IllegalArgumentException("localAddresses");<a name="line.135"></a>
<span class="sourceLineNo">136</span>        }<a name="line.136"></a>
<span class="sourceLineNo">137</span>        setDefaultLocalAddresses((Iterable&lt;? extends SocketAddress&gt;) localAddresses);<a name="line.137"></a>
<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
<span class="sourceLineNo">139</span><a name="line.139"></a>
<span class="sourceLineNo">140</span>    /**<a name="line.140"></a>
<span class="sourceLineNo">141</span>     * {@inheritDoc}<a name="line.141"></a>
<span class="sourceLineNo">142</span>     */<a name="line.142"></a>
<span class="sourceLineNo">143</span>    public final void setDefaultLocalAddresses(Iterable&lt;? extends SocketAddress&gt; localAddresses) {<a name="line.143"></a>
<span class="sourceLineNo">144</span>        if (localAddresses == null) {<a name="line.144"></a>
<span class="sourceLineNo">145</span>            throw new IllegalArgumentException("localAddresses");<a name="line.145"></a>
<span class="sourceLineNo">146</span>        }<a name="line.146"></a>
<span class="sourceLineNo">147</span><a name="line.147"></a>
<span class="sourceLineNo">148</span>        synchronized (bindLock) {<a name="line.148"></a>
<span class="sourceLineNo">149</span>            synchronized (boundAddresses) {<a name="line.149"></a>
<span class="sourceLineNo">150</span>                if (!boundAddresses.isEmpty()) {<a name="line.150"></a>
<span class="sourceLineNo">151</span>                    throw new IllegalStateException("localAddress can't be set while the acceptor is bound.");<a name="line.151"></a>
<span class="sourceLineNo">152</span>                }<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
<span class="sourceLineNo">154</span>                Collection&lt;SocketAddress&gt; newLocalAddresses = new ArrayList&lt;SocketAddress&gt;();<a name="line.154"></a>
<span class="sourceLineNo">155</span><a name="line.155"></a>
<span class="sourceLineNo">156</span>                for (SocketAddress a : localAddresses) {<a name="line.156"></a>
<span class="sourceLineNo">157</span>                    checkAddressType(a);<a name="line.157"></a>
<span class="sourceLineNo">158</span>                    newLocalAddresses.add(a);<a name="line.158"></a>
<span class="sourceLineNo">159</span>                }<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>                if (newLocalAddresses.isEmpty()) {<a name="line.161"></a>
<span class="sourceLineNo">162</span>                    throw new IllegalArgumentException("empty localAddresses");<a name="line.162"></a>
<span class="sourceLineNo">163</span>                }<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>                this.defaultLocalAddresses.clear();<a name="line.165"></a>
<span class="sourceLineNo">166</span>                this.defaultLocalAddresses.addAll(newLocalAddresses);<a name="line.166"></a>
<span class="sourceLineNo">167</span>            }<a name="line.167"></a>
<span class="sourceLineNo">168</span>        }<a name="line.168"></a>
<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
<span class="sourceLineNo">170</span><a name="line.170"></a>
<span class="sourceLineNo">171</span>    /**<a name="line.171"></a>
<span class="sourceLineNo">172</span>     * {@inheritDoc}<a name="line.172"></a>
<span class="sourceLineNo">173</span>     * @org.apache.xbean.Property nestedType="java.net.SocketAddress"<a name="line.173"></a>
<span class="sourceLineNo">174</span>     */<a name="line.174"></a>
<span class="sourceLineNo">175</span>    public final void setDefaultLocalAddresses(SocketAddress firstLocalAddress, SocketAddress... otherLocalAddresses) {<a name="line.175"></a>
<span class="sourceLineNo">176</span>        if (otherLocalAddresses == null) {<a name="line.176"></a>
<span class="sourceLineNo">177</span>            otherLocalAddresses = new SocketAddress[0];<a name="line.177"></a>
<span class="sourceLineNo">178</span>        }<a name="line.178"></a>
<span class="sourceLineNo">179</span><a name="line.179"></a>
<span class="sourceLineNo">180</span>        Collection&lt;SocketAddress&gt; newLocalAddresses = new ArrayList&lt;SocketAddress&gt;(otherLocalAddresses.length + 1);<a name="line.180"></a>
<span class="sourceLineNo">181</span><a name="line.181"></a>
<span class="sourceLineNo">182</span>        newLocalAddresses.add(firstLocalAddress);<a name="line.182"></a>
<span class="sourceLineNo">183</span>        for (SocketAddress a : otherLocalAddresses) {<a name="line.183"></a>
<span class="sourceLineNo">184</span>            newLocalAddresses.add(a);<a name="line.184"></a>
<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span>        setDefaultLocalAddresses(newLocalAddresses);<a name="line.187"></a>
<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span>    /**<a name="line.190"></a>
<span class="sourceLineNo">191</span>     * {@inheritDoc}<a name="line.191"></a>
<span class="sourceLineNo">192</span>     */<a name="line.192"></a>
<span class="sourceLineNo">193</span>    public final boolean isCloseOnDeactivation() {<a name="line.193"></a>
<span class="sourceLineNo">194</span>        return disconnectOnUnbind;<a name="line.194"></a>
<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
<span class="sourceLineNo">196</span><a name="line.196"></a>
<span class="sourceLineNo">197</span>    /**<a name="line.197"></a>
<span class="sourceLineNo">198</span>     * {@inheritDoc}<a name="line.198"></a>
<span class="sourceLineNo">199</span>     */<a name="line.199"></a>
<span class="sourceLineNo">200</span>    public final void setCloseOnDeactivation(boolean disconnectClientsOnUnbind) {<a name="line.200"></a>
<span class="sourceLineNo">201</span>        this.disconnectOnUnbind = disconnectClientsOnUnbind;<a name="line.201"></a>
<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span>    /**<a name="line.204"></a>
<span class="sourceLineNo">205</span>     * {@inheritDoc}<a name="line.205"></a>
<span class="sourceLineNo">206</span>     */<a name="line.206"></a>
<span class="sourceLineNo">207</span>    public final void bind() throws IOException {<a name="line.207"></a>
<span class="sourceLineNo">208</span>        bind(getDefaultLocalAddresses());<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>    /**<a name="line.211"></a>
<span class="sourceLineNo">212</span>     * {@inheritDoc}<a name="line.212"></a>
<span class="sourceLineNo">213</span>     */<a name="line.213"></a>
<span class="sourceLineNo">214</span>    public final void bind(SocketAddress localAddress) throws IOException {<a name="line.214"></a>
<span class="sourceLineNo">215</span>        if (localAddress == null) {<a name="line.215"></a>
<span class="sourceLineNo">216</span>            throw new IllegalArgumentException("localAddress");<a name="line.216"></a>
<span class="sourceLineNo">217</span>        }<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span>        List&lt;SocketAddress&gt; localAddresses = new ArrayList&lt;SocketAddress&gt;(1);<a name="line.219"></a>
<span class="sourceLineNo">220</span>        localAddresses.add(localAddress);<a name="line.220"></a>
<span class="sourceLineNo">221</span>        bind(localAddresses);<a name="line.221"></a>
<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
<span class="sourceLineNo">223</span><a name="line.223"></a>
<span class="sourceLineNo">224</span>    /**<a name="line.224"></a>
<span class="sourceLineNo">225</span>     * {@inheritDoc}<a name="line.225"></a>
<span class="sourceLineNo">226</span>     */<a name="line.226"></a>
<span class="sourceLineNo">227</span>    public final void bind(SocketAddress... addresses) throws IOException {<a name="line.227"></a>
<span class="sourceLineNo">228</span>        if ((addresses == null) || (addresses.length == 0)) {<a name="line.228"></a>
<span class="sourceLineNo">229</span>            bind(getDefaultLocalAddresses());<a name="line.229"></a>
<span class="sourceLineNo">230</span>            return;<a name="line.230"></a>
<span class="sourceLineNo">231</span>        }<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>        List&lt;SocketAddress&gt; localAddresses = new ArrayList&lt;SocketAddress&gt;(2);<a name="line.233"></a>
<span class="sourceLineNo">234</span><a name="line.234"></a>
<span class="sourceLineNo">235</span>        for (SocketAddress address : addresses) {<a name="line.235"></a>
<span class="sourceLineNo">236</span>            localAddresses.add(address);<a name="line.236"></a>
<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
<span class="sourceLineNo">238</span><a name="line.238"></a>
<span class="sourceLineNo">239</span>        bind(localAddresses);<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>    /**<a name="line.242"></a>
<span class="sourceLineNo">243</span>     * {@inheritDoc}<a name="line.243"></a>
<span class="sourceLineNo">244</span>     */<a name="line.244"></a>
<span class="sourceLineNo">245</span>    public final void bind(SocketAddress firstLocalAddress, SocketAddress... addresses) throws IOException {<a name="line.245"></a>
<span class="sourceLineNo">246</span>        if (firstLocalAddress == null) {<a name="line.246"></a>
<span class="sourceLineNo">247</span>            bind(getDefaultLocalAddresses());<a name="line.247"></a>
<span class="sourceLineNo">248</span>        }<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>        if ((addresses == null) || (addresses.length == 0)) {<a name="line.250"></a>
<span class="sourceLineNo">251</span>            bind(getDefaultLocalAddresses());<a name="line.251"></a>
<span class="sourceLineNo">252</span>            return;<a name="line.252"></a>
<span class="sourceLineNo">253</span>        }<a name="line.253"></a>
<span class="sourceLineNo">254</span><a name="line.254"></a>
<span class="sourceLineNo">255</span>        List&lt;SocketAddress&gt; localAddresses = new ArrayList&lt;SocketAddress&gt;(2);<a name="line.255"></a>
<span class="sourceLineNo">256</span>        localAddresses.add(firstLocalAddress);<a name="line.256"></a>
<span class="sourceLineNo">257</span><a name="line.257"></a>
<span class="sourceLineNo">258</span>        for (SocketAddress address : addresses) {<a name="line.258"></a>
<span class="sourceLineNo">259</span>            localAddresses.add(address);<a name="line.259"></a>
<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>        bind(localAddresses);<a name="line.262"></a>
<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
<span class="sourceLineNo">264</span><a name="line.264"></a>
<span class="sourceLineNo">265</span>    /**<a name="line.265"></a>
<span class="sourceLineNo">266</span>     * {@inheritDoc}<a name="line.266"></a>
<span class="sourceLineNo">267</span>     */<a name="line.267"></a>
<span class="sourceLineNo">268</span>    public final void bind(Iterable&lt;? extends SocketAddress&gt; localAddresses) throws IOException {<a name="line.268"></a>
<span class="sourceLineNo">269</span>        if (isDisposing()) {<a name="line.269"></a>
<span class="sourceLineNo">270</span>            throw new IllegalStateException("Already disposed.");<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>        if (localAddresses == null) {<a name="line.273"></a>
<span class="sourceLineNo">274</span>            throw new IllegalArgumentException("localAddresses");<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>        List&lt;SocketAddress&gt; localAddressesCopy = new ArrayList&lt;SocketAddress&gt;();<a name="line.277"></a>
<span class="sourceLineNo">278</span><a name="line.278"></a>
<span class="sourceLineNo">279</span>        for (SocketAddress a : localAddresses) {<a name="line.279"></a>
<span class="sourceLineNo">280</span>            checkAddressType(a);<a name="line.280"></a>
<span class="sourceLineNo">281</span>            localAddressesCopy.add(a);<a name="line.281"></a>
<span class="sourceLineNo">282</span>        }<a name="line.282"></a>
<span class="sourceLineNo">283</span><a name="line.283"></a>
<span class="sourceLineNo">284</span>        if (localAddressesCopy.isEmpty()) {<a name="line.284"></a>
<span class="sourceLineNo">285</span>            throw new IllegalArgumentException("localAddresses is empty.");<a name="line.285"></a>
<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>        boolean activate = false;<a name="line.288"></a>
<span class="sourceLineNo">289</span>        synchronized (bindLock) {<a name="line.289"></a>
<span class="sourceLineNo">290</span>            synchronized (boundAddresses) {<a name="line.290"></a>
<span class="sourceLineNo">291</span>                if (boundAddresses.isEmpty()) {<a name="line.291"></a>
<span class="sourceLineNo">292</span>                    activate = true;<a name="line.292"></a>
<span class="sourceLineNo">293</span>                }<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>            if (getHandler() == null) {<a name="line.296"></a>
<span class="sourceLineNo">297</span>                throw new IllegalStateException("handler is not set.");<a name="line.297"></a>
<span class="sourceLineNo">298</span>            }<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>            try {<a name="line.300"></a>
<span class="sourceLineNo">301</span>                Set&lt;SocketAddress&gt; addresses = bindInternal(localAddressesCopy);<a name="line.301"></a>
<span class="sourceLineNo">302</span><a name="line.302"></a>
<span class="sourceLineNo">303</span>                synchronized (boundAddresses) {<a name="line.303"></a>
<span class="sourceLineNo">304</span>                    boundAddresses.addAll(addresses);<a name="line.304"></a>
<span class="sourceLineNo">305</span>                }<a name="line.305"></a>
<span class="sourceLineNo">306</span>            } catch (IOException e) {<a name="line.306"></a>
<span class="sourceLineNo">307</span>                throw e;<a name="line.307"></a>
<span class="sourceLineNo">308</span>            } catch (RuntimeException e) {<a name="line.308"></a>
<span class="sourceLineNo">309</span>                throw e;<a name="line.309"></a>
<span class="sourceLineNo">310</span>            } catch (Exception e) {<a name="line.310"></a>
<span class="sourceLineNo">311</span>                throw new RuntimeIoException("Failed to bind to: " + getLocalAddresses(), e);<a name="line.311"></a>
<span class="sourceLineNo">312</span>            }<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>        if (activate) {<a name="line.315"></a>
<span class="sourceLineNo">316</span>            getListeners().fireServiceActivated();<a name="line.316"></a>
<span class="sourceLineNo">317</span>        }<a name="line.317"></a>
<span class="sourceLineNo">318</span>    }<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>     * {@inheritDoc}<a name="line.321"></a>
<span class="sourceLineNo">322</span>     */<a name="line.322"></a>
<span class="sourceLineNo">323</span>    public final void unbind() {<a name="line.323"></a>
<span class="sourceLineNo">324</span>        unbind(getLocalAddresses());<a name="line.324"></a>
<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
<span class="sourceLineNo">326</span><a name="line.326"></a>
<span class="sourceLineNo">327</span>    /**<a name="line.327"></a>
<span class="sourceLineNo">328</span>     * {@inheritDoc}<a name="line.328"></a>
<span class="sourceLineNo">329</span>     */<a name="line.329"></a>
<span class="sourceLineNo">330</span>    public final void unbind(SocketAddress localAddress) {<a name="line.330"></a>
<span class="sourceLineNo">331</span>        if (localAddress == null) {<a name="line.331"></a>
<span class="sourceLineNo">332</span>            throw new IllegalArgumentException("localAddress");<a name="line.332"></a>
<span class="sourceLineNo">333</span>        }<a name="line.333"></a>
<span class="sourceLineNo">334</span><a name="line.334"></a>
<span class="sourceLineNo">335</span>        List&lt;SocketAddress&gt; localAddresses = new ArrayList&lt;SocketAddress&gt;(1);<a name="line.335"></a>
<span class="sourceLineNo">336</span>        localAddresses.add(localAddress);<a name="line.336"></a>
<span class="sourceLineNo">337</span>        unbind(localAddresses);<a name="line.337"></a>
<span class="sourceLineNo">338</span>    }<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>     * {@inheritDoc}<a name="line.341"></a>
<span class="sourceLineNo">342</span>     */<a name="line.342"></a>
<span class="sourceLineNo">343</span>    public final void unbind(SocketAddress firstLocalAddress, SocketAddress... otherLocalAddresses) {<a name="line.343"></a>
<span class="sourceLineNo">344</span>        if (firstLocalAddress == null) {<a name="line.344"></a>
<span class="sourceLineNo">345</span>            throw new IllegalArgumentException("firstLocalAddress");<a name="line.345"></a>
<span class="sourceLineNo">346</span>        }<a name="line.346"></a>
<span class="sourceLineNo">347</span>        if (otherLocalAddresses == null) {<a name="line.347"></a>
<span class="sourceLineNo">348</span>            throw new IllegalArgumentException("otherLocalAddresses");<a name="line.348"></a>
<span class="sourceLineNo">349</span>        }<a name="line.349"></a>
<span class="sourceLineNo">350</span><a name="line.350"></a>
<span class="sourceLineNo">351</span>        List&lt;SocketAddress&gt; localAddresses = new ArrayList&lt;SocketAddress&gt;();<a name="line.351"></a>
<span class="sourceLineNo">352</span>        localAddresses.add(firstLocalAddress);<a name="line.352"></a>
<span class="sourceLineNo">353</span>        Collections.addAll(localAddresses, otherLocalAddresses);<a name="line.353"></a>
<span class="sourceLineNo">354</span>        unbind(localAddresses);<a name="line.354"></a>
<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
<span class="sourceLineNo">357</span>    /**<a name="line.357"></a>
<span class="sourceLineNo">358</span>     * {@inheritDoc}<a name="line.358"></a>
<span class="sourceLineNo">359</span>     */<a name="line.359"></a>
<span class="sourceLineNo">360</span>    public final void unbind(Iterable&lt;? extends SocketAddress&gt; localAddresses) {<a name="line.360"></a>
<span class="sourceLineNo">361</span>        if (localAddresses == null) {<a name="line.361"></a>
<span class="sourceLineNo">362</span>            throw new IllegalArgumentException("localAddresses");<a name="line.362"></a>
<span class="sourceLineNo">363</span>        }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
<span class="sourceLineNo">365</span>        boolean deactivate = false;<a name="line.365"></a>
<span class="sourceLineNo">366</span>        synchronized (bindLock) {<a name="line.366"></a>
<span class="sourceLineNo">367</span>            synchronized (boundAddresses) {<a name="line.367"></a>
<span class="sourceLineNo">368</span>                if (boundAddresses.isEmpty()) {<a name="line.368"></a>
<span class="sourceLineNo">369</span>                    return;<a name="line.369"></a>
<span class="sourceLineNo">370</span>                }<a name="line.370"></a>
<span class="sourceLineNo">371</span><a name="line.371"></a>
<span class="sourceLineNo">372</span>                List&lt;SocketAddress&gt; localAddressesCopy = new ArrayList&lt;SocketAddress&gt;();<a name="line.372"></a>
<span class="sourceLineNo">373</span>                int specifiedAddressCount = 0;<a name="line.373"></a>
<span class="sourceLineNo">374</span><a name="line.374"></a>
<span class="sourceLineNo">375</span>                for (SocketAddress a : localAddresses) {<a name="line.375"></a>
<span class="sourceLineNo">376</span>                    specifiedAddressCount++;<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>                    if ((a != null) &amp;&amp; boundAddresses.contains(a)) {<a name="line.378"></a>
<span class="sourceLineNo">379</span>                        localAddressesCopy.add(a);<a name="line.379"></a>
<span class="sourceLineNo">380</span>                    }<a name="line.380"></a>
<span class="sourceLineNo">381</span>                }<a name="line.381"></a>
<span class="sourceLineNo">382</span><a name="line.382"></a>
<span class="sourceLineNo">383</span>                if (specifiedAddressCount == 0) {<a name="line.383"></a>
<span class="sourceLineNo">384</span>                    throw new IllegalArgumentException("localAddresses is empty.");<a name="line.384"></a>
<span class="sourceLineNo">385</span>                }<a name="line.385"></a>
<span class="sourceLineNo">386</span><a name="line.386"></a>
<span class="sourceLineNo">387</span>                if (!localAddressesCopy.isEmpty()) {<a name="line.387"></a>
<span class="sourceLineNo">388</span>                    try {<a name="line.388"></a>
<span class="sourceLineNo">389</span>                        unbind0(localAddressesCopy);<a name="line.389"></a>
<span class="sourceLineNo">390</span>                    } catch (RuntimeException e) {<a name="line.390"></a>
<span class="sourceLineNo">391</span>                        throw e;<a name="line.391"></a>
<span class="sourceLineNo">392</span>                    } catch (Exception e) {<a name="line.392"></a>
<span class="sourceLineNo">393</span>                        throw new RuntimeIoException("Failed to unbind from: " + getLocalAddresses(), e);<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>                    boundAddresses.removeAll(localAddressesCopy);<a name="line.396"></a>
<span class="sourceLineNo">397</span><a name="line.397"></a>
<span class="sourceLineNo">398</span>                    if (boundAddresses.isEmpty()) {<a name="line.398"></a>
<span class="sourceLineNo">399</span>                        deactivate = true;<a name="line.399"></a>
<span class="sourceLineNo">400</span>                    }<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><a name="line.404"></a>
<span class="sourceLineNo">405</span>        if (deactivate) {<a name="line.405"></a>
<span class="sourceLineNo">406</span>            getListeners().fireServiceDeactivated();<a name="line.406"></a>
<span class="sourceLineNo">407</span>        }<a name="line.407"></a>
<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
<span class="sourceLineNo">409</span><a name="line.409"></a>
<span class="sourceLineNo">410</span>    /**<a name="line.410"></a>
<span class="sourceLineNo">411</span>     * Starts the acceptor, and register the given addresses<a name="line.411"></a>
<span class="sourceLineNo">412</span>     * @return the {@link Set} of the local addresses which is bound actually<a name="line.412"></a>
<span class="sourceLineNo">413</span>     */<a name="line.413"></a>
<span class="sourceLineNo">414</span>    protected abstract Set&lt;SocketAddress&gt; bindInternal(List&lt;? extends SocketAddress&gt; localAddresses) throws Exception;<a name="line.414"></a>
<span class="sourceLineNo">415</span><a name="line.415"></a>
<span class="sourceLineNo">416</span>    /**<a name="line.416"></a>
<span class="sourceLineNo">417</span>     * Implement this method to perform the actual unbind operation.<a name="line.417"></a>
<span class="sourceLineNo">418</span>     */<a name="line.418"></a>
<span class="sourceLineNo">419</span>    protected abstract void unbind0(List&lt;? extends SocketAddress&gt; localAddresses) throws Exception;<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
<span class="sourceLineNo">421</span>    @Override<a name="line.421"></a>
<span class="sourceLineNo">422</span>    public String toString() {<a name="line.422"></a>
<span class="sourceLineNo">423</span>        TransportMetadata m = getTransportMetadata();<a name="line.423"></a>
<span class="sourceLineNo">424</span>        return '('<a name="line.424"></a>
<span class="sourceLineNo">425</span>                + m.getProviderName()<a name="line.425"></a>
<span class="sourceLineNo">426</span>                + ' '<a name="line.426"></a>
<span class="sourceLineNo">427</span>                + m.getName()<a name="line.427"></a>
<span class="sourceLineNo">428</span>                + " acceptor: "<a name="line.428"></a>
<span class="sourceLineNo">429</span>                + (isActive() ? "localAddress(es): " + getLocalAddresses() + ", managedSessionCount: "<a name="line.429"></a>
<span class="sourceLineNo">430</span>                        + getManagedSessionCount() : "not bound") + ')';<a name="line.430"></a>
<span class="sourceLineNo">431</span>    }<a name="line.431"></a>
<span class="sourceLineNo">432</span><a name="line.432"></a>
<span class="sourceLineNo">433</span>    private void checkAddressType(SocketAddress a) {<a name="line.433"></a>
<span class="sourceLineNo">434</span>        if (a != null &amp;&amp; !getTransportMetadata().getAddressType().isAssignableFrom(a.getClass())) {<a name="line.434"></a>
<span class="sourceLineNo">435</span>            throw new IllegalArgumentException("localAddress type: " + a.getClass().getSimpleName() + " (expected: "<a name="line.435"></a>
<span class="sourceLineNo">436</span>                    + getTransportMetadata().getAddressType().getSimpleName() + ")");<a name="line.436"></a>
<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
<span class="sourceLineNo">439</span><a name="line.439"></a>
<span class="sourceLineNo">440</span>    public static class AcceptorOperationFuture extends ServiceOperationFuture {<a name="line.440"></a>
<span class="sourceLineNo">441</span>        private final List&lt;SocketAddress&gt; localAddresses;<a name="line.441"></a>
<span class="sourceLineNo">442</span><a name="line.442"></a>
<span class="sourceLineNo">443</span>        public AcceptorOperationFuture(List&lt;? extends SocketAddress&gt; localAddresses) {<a name="line.443"></a>
<span class="sourceLineNo">444</span>            this.localAddresses = new ArrayList&lt;SocketAddress&gt;(localAddresses);<a name="line.444"></a>
<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
<span class="sourceLineNo">446</span><a name="line.446"></a>
<span class="sourceLineNo">447</span>        public final List&lt;SocketAddress&gt; getLocalAddresses() {<a name="line.447"></a>
<span class="sourceLineNo">448</span>            return Collections.unmodifiableList(localAddresses);<a name="line.448"></a>
<span class="sourceLineNo">449</span>        }<a name="line.449"></a>
<span class="sourceLineNo">450</span><a name="line.450"></a>
<span class="sourceLineNo">451</span>        /**<a name="line.451"></a>
<span class="sourceLineNo">452</span>         * @see Object#toString()<a name="line.452"></a>
<span class="sourceLineNo">453</span>         */<a name="line.453"></a>
<span class="sourceLineNo">454</span>        public String toString() {<a name="line.454"></a>
<span class="sourceLineNo">455</span>            StringBuilder sb = new StringBuilder();<a name="line.455"></a>
<span class="sourceLineNo">456</span><a name="line.456"></a>
<span class="sourceLineNo">457</span>            sb.append("Acceptor operation : ");<a name="line.457"></a>
<span class="sourceLineNo">458</span><a name="line.458"></a>
<span class="sourceLineNo">459</span>            if (localAddresses != null) {<a name="line.459"></a>
<span class="sourceLineNo">460</span>                boolean isFirst = true;<a name="line.460"></a>
<span class="sourceLineNo">461</span><a name="line.461"></a>
<span class="sourceLineNo">462</span>                for (SocketAddress address : localAddresses) {<a name="line.462"></a>
<span class="sourceLineNo">463</span>                    if (isFirst) {<a name="line.463"></a>
<span class="sourceLineNo">464</span>                        isFirst = false;<a name="line.464"></a>
<span class="sourceLineNo">465</span>                    } else {<a name="line.465"></a>
<span class="sourceLineNo">466</span>                        sb.append(", ");<a name="line.466"></a>
<span class="sourceLineNo">467</span>                    }<a name="line.467"></a>
<span class="sourceLineNo">468</span><a name="line.468"></a>
<span class="sourceLineNo">469</span>                    sb.append(address);<a name="line.469"></a>
<span class="sourceLineNo">470</span>                }<a name="line.470"></a>
<span class="sourceLineNo">471</span>            }<a name="line.471"></a>
<span class="sourceLineNo">472</span>            return sb.toString();<a name="line.472"></a>
<span class="sourceLineNo">473</span>        }<a name="line.473"></a>
<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
<span class="sourceLineNo">475</span>}<a name="line.475"></a>




























































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