1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 * 19 */ 20 package org.apache.mina.common; 21 22 import java.net.SocketAddress; 23 import java.util.Set; 24 25 /** 26 * Base interface for all {@link IoAcceptor}s and {@link IoConnector}s 27 * that provide I/O service and manage {@link IoSession}s. 28 * 29 * @author The Apache Directory Project (mina-dev@directory.apache.org) 30 * @version $Rev: 555855 $, $Date: 2007-07-13 12:19:00 +0900 (Fri, 13 Jul 2007) $ 31 */ 32 public interface IoService { 33 /** 34 * Adds an {@link IoServiceListener} that listens any events related with 35 * this service. 36 */ 37 void addListener(IoServiceListener listener); 38 39 /** 40 * Removed an existing {@link IoServiceListener} that listens any events 41 * related with this service. 42 */ 43 void removeListener(IoServiceListener listener); 44 45 /** 46 * Returns all {@link SocketAddress}es this service is managing. 47 * If this service is an {@link IoAcceptor}, a set of bind addresses will 48 * be returned. If this service is an {@link IoConnector}, a set of remote 49 * addresses will be returned. 50 */ 51 Set<SocketAddress> getManagedServiceAddresses(); 52 53 /** 54 * Returns <tt>true</tt> if this service is managing the specified <tt>serviceAddress</tt>. 55 * If this service is an {@link IoAcceptor}, <tt>serviceAddress</tt> is a bind address. 56 * If this service is an {@link IoConnector}, <tt>serviceAddress</tt> is a remote address. 57 */ 58 boolean isManaged(SocketAddress serviceAddress); 59 60 /** 61 * Returns all sessions with the specified remote or local address, 62 * which are currently managed by this service. 63 * {@link IoAcceptor} will assume the specified <tt>address</tt> is a local 64 * address, and {@link IoConnector} will assume it's a remote address. 65 * 66 * @param serviceAddress the address to return all sessions for. 67 * @return the sessions. An empty collection if there's no session. 68 * @throws IllegalArgumentException if the specified <tt>address</tt> has 69 * not been bound. 70 * @throws UnsupportedOperationException if this operation isn't supported 71 * for the particular transport type implemented by this {@link IoService}. 72 */ 73 Set<IoSession> getManagedSessions(SocketAddress serviceAddress); 74 75 /** 76 * Returns the default configuration which is used when you didn't specify 77 * any configuration. 78 */ 79 IoServiceConfig getDefaultConfig(); 80 81 /** 82 * Returns the global {@link IoFilterChainBuilder} which will modify the 83 * {@link IoFilterChain} of all {@link IoSession}s which is managed 84 * by this service. 85 * The default value is an empty {@link DefaultIoFilterChainBuilder}. 86 */ 87 IoFilterChainBuilder getFilterChainBuilder(); 88 89 /** 90 * Sets the global {@link IoFilterChainBuilder} which will modify the 91 * {@link IoFilterChain} of all {@link IoSession}s which is managed 92 * by this service. 93 * If you specify <tt>null</tt> this property will be set to 94 * an empty {@link DefaultIoFilterChainBuilder}. 95 */ 96 void setFilterChainBuilder(IoFilterChainBuilder builder); 97 98 /** 99 * A shortcut for <tt>( ( DefaultIoFilterChainBuilder ) </tt>{@link #getFilterChainBuilder()}<tt> )</tt>. 100 * Please note that the returned object is not a <b>real</b> {@link IoFilterChain} 101 * but a {@link DefaultIoFilterChainBuilder}. Modifying the returned builder 102 * won't affect the existing {@link IoSession}s at all, because 103 * {@link IoFilterChainBuilder}s affect only newly created {@link IoSession}s. 104 * 105 * @throws IllegalStateException if the current {@link IoFilterChainBuilder} is 106 * not a {@link DefaultIoFilterChainBuilder} 107 */ 108 DefaultIoFilterChainBuilder getFilterChain(); 109 }