Modified: mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java?rev=712028&r1=712027&r2=712028&view=diff ============================================================================== --- mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java (original) +++ mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java Thu Nov 6 17:03:23 2008 @@ -41,47 +41,47 @@ protected abstract void filter(IoFilterEvent event) throws Exception; @Override - public final void sessionCreated(NextFilter nextFilter, IoSession session) throws Exception { - filter(new IoFilterEvent(nextFilter, IoEventType.SESSION_CREATED, session, null)); + public final void sessionCreated(int index, IoSession session) throws Exception { + filter(new IoFilterEvent(index+1, IoEventType.SESSION_CREATED, session, null)); } @Override - public final void sessionOpened(NextFilter nextFilter, IoSession session) throws Exception { - filter(new IoFilterEvent(nextFilter, IoEventType.SESSION_OPENED, session, null)); + public final void sessionOpened(int index, IoSession session) throws Exception { + filter(new IoFilterEvent(index+1, IoEventType.SESSION_OPENED, session, null)); } @Override - public final void sessionClosed(NextFilter nextFilter, IoSession session) throws Exception { - filter(new IoFilterEvent(nextFilter, IoEventType.SESSION_CLOSED, session, null)); + public final void sessionClosed(int index, IoSession session) throws Exception { + filter(new IoFilterEvent(index+1, IoEventType.SESSION_CLOSED, session, null)); } @Override - public final void sessionIdle(NextFilter nextFilter, IoSession session, IdleStatus status) throws Exception { - filter(new IoFilterEvent(nextFilter, IoEventType.SESSION_IDLE, session, status)); + public final void sessionIdle(int index, IoSession session, IdleStatus status) throws Exception { + filter(new IoFilterEvent(index+1, IoEventType.SESSION_IDLE, session, status)); } @Override - public final void exceptionCaught(NextFilter nextFilter, IoSession session, Throwable cause) throws Exception { - filter(new IoFilterEvent(nextFilter, IoEventType.EXCEPTION_CAUGHT, session, cause)); + public final void exceptionCaught(int index, IoSession session, Throwable cause) throws Exception { + filter(new IoFilterEvent(index+1, IoEventType.EXCEPTION_CAUGHT, session, cause)); } @Override - public final void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception { - filter(new IoFilterEvent(nextFilter, IoEventType.MESSAGE_RECEIVED, session, message)); + public final void messageReceived(int index, IoSession session, Object message) throws Exception { + filter(new IoFilterEvent(index+1, IoEventType.MESSAGE_RECEIVED, session, message)); } @Override - public final void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { - filter(new IoFilterEvent(nextFilter, IoEventType.MESSAGE_SENT, session, writeRequest)); + public final void messageSent(int index, IoSession session, WriteRequest writeRequest) throws Exception { + filter(new IoFilterEvent(index+1, IoEventType.MESSAGE_SENT, session, writeRequest)); } @Override - public final void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { - filter(new IoFilterEvent(nextFilter, IoEventType.WRITE, session, writeRequest)); + public final void filterWrite(int index, IoSession session, WriteRequest writeRequest) throws Exception { + filter(new IoFilterEvent(index+1, IoEventType.WRITE, session, writeRequest)); } @Override - public final void filterClose(NextFilter nextFilter, IoSession session) throws Exception { - filter(new IoFilterEvent(nextFilter, IoEventType.CLOSE, session, null)); + public final void filterClose(int index, IoSession session) throws Exception { + filter(new IoFilterEvent(index, IoEventType.CLOSE, session, null)); } }
Modified: mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramSession.java URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramSession.java?rev=712028&r1=712027&r2=712028&view=diff ============================================================================== --- mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramSession.java (original) +++ mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramSession.java Thu Nov 6 17:03:23 2008 @@ -25,8 +25,6 @@ import java.nio.channels.SelectionKey; import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.filterchain.DefaultIoFilterChain; -import org.apache.mina.core.filterchain.IoFilterChain; import org.apache.mina.core.service.DefaultTransportMetadata; import org.apache.mina.core.service.IoHandler; import org.apache.mina.core.service.IoProcessor; @@ -51,7 +49,6 @@ private final IoService service; private final DatagramSessionConfig config; - private final IoFilterChain filterChain = new DefaultIoFilterChain(this); private final DatagramChannel ch; private final IoHandler handler; private final InetSocketAddress localAddress; @@ -96,10 +93,6 @@ return config; } - public IoFilterChain getFilterChain() { - return filterChain; - } - @Override DatagramChannel getChannel() { return ch; Modified: mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioSession.java URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioSession.java?rev=712028&r1=712027&r2=712028&view=diff ============================================================================== --- mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioSession.java (original) +++ mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioSession.java Thu Nov 6 17:03:23 2008 @@ -21,7 +21,10 @@ import java.nio.channels.ByteChannel; import java.nio.channels.SelectionKey; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import org.apache.mina.core.filterchain.IoFilter; import org.apache.mina.core.session.AbstractIoSession; /** @@ -31,6 +34,27 @@ * @version $Rev$, $Date$ */ public abstract class NioSession extends AbstractIoSession { + private final List<IoFilter> filterChain = new CopyOnWriteArrayList<IoFilter>(); + + public List<IoFilter> getFilterChain() { + return filterChain; + } + + public void setFilterChain(List<IoFilter> filters) { + if (filters == null) { + return; + } + + filterChain.addAll(filters); + } + + /** + * [EMAIL PROTECTED] + */ + public IoFilter getFilter(int index) { + return filterChain.get(index); + } + abstract ByteChannel getChannel(); abstract SelectionKey getSelectionKey(); abstract void setSelectionKey(SelectionKey key); Modified: mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketSession.java URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketSession.java?rev=712028&r1=712027&r2=712028&view=diff ============================================================================== --- mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketSession.java (original) +++ mina/branches/mina-new-chain2/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketSession.java Thu Nov 6 17:03:23 2008 @@ -23,12 +23,13 @@ import java.net.SocketException; import java.nio.channels.SelectionKey; import java.nio.channels.SocketChannel; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import org.apache.mina.core.RuntimeIoException; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.file.FileRegion; -import org.apache.mina.core.filterchain.DefaultIoFilterChain; -import org.apache.mina.core.filterchain.IoFilterChain; +import org.apache.mina.core.filterchain.IoFilter; import org.apache.mina.core.service.DefaultTransportMetadata; import org.apache.mina.core.service.IoHandler; import org.apache.mina.core.service.IoProcessor; @@ -60,8 +61,6 @@ private final IoProcessor<NioSession> processor; - private final IoFilterChain filterChain = new DefaultIoFilterChain(this); - private final SocketChannel ch; private final IoHandler handler; @@ -83,6 +82,8 @@ this.ch = ch; this.handler = service.getHandler(); this.config.setAll(service.getSessionConfig()); + service.getFilterChain().add(service.getTailFilter()); + setFilterChain(service.getFilterChain()); } public IoService getService() { @@ -98,10 +99,6 @@ return processor; } - public IoFilterChain getFilterChain() { - return filterChain; - } - public TransportMetadata getTransportMetadata() { return METADATA; } Modified: mina/branches/mina-new-chain2/example/src/main/java/org/apache/mina/example/chat/Main.java URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain2/example/src/main/java/org/apache/mina/example/chat/Main.java?rev=712028&r1=712027&r2=712028&view=diff ============================================================================== --- mina/branches/mina-new-chain2/example/src/main/java/org/apache/mina/example/chat/Main.java (original) +++ mina/branches/mina-new-chain2/example/src/main/java/org/apache/mina/example/chat/Main.java Thu Nov 6 17:03:23 2008 @@ -20,8 +20,9 @@ package org.apache.mina.example.chat; import java.net.InetSocketAddress; +import java.util.List; -import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; +import org.apache.mina.core.filterchain.IoFilter; import org.apache.mina.example.echoserver.ssl.BogusSslContextFactory; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; @@ -45,17 +46,17 @@ public static void main(String[] args) throws Exception { NioSocketAcceptor acceptor = new NioSocketAcceptor(); - DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); + List<IoFilter> chain = acceptor.getFilterChain(); MdcInjectionFilter mdcInjectionFilter = new MdcInjectionFilter(); - chain.addLast("mdc", mdcInjectionFilter); + chain.add(mdcInjectionFilter); // Add SSL filter if SSL is enabled. if (USE_SSL) { addSSLSupport(chain); } - chain.addLast("codec", new ProtocolCodecFilter( + chain.add(new ProtocolCodecFilter( new TextLineCodecFactory())); addLogger(chain); @@ -67,17 +68,17 @@ System.out.println("Listening on port " + PORT); } - private static void addSSLSupport(DefaultIoFilterChainBuilder chain) + private static void addSSLSupport(List<IoFilter> chain) throws Exception { SslFilter sslFilter = new SslFilter(BogusSslContextFactory .getInstance(true)); - chain.addLast("sslFilter", sslFilter); + chain.add(sslFilter); System.out.println("SSL ON"); } - private static void addLogger(DefaultIoFilterChainBuilder chain) + private static void addLogger(List<IoFilter> chain) throws Exception { - chain.addLast("logger", new LoggingFilter()); + chain.add(new LoggingFilter()); System.out.println("Logging ON"); } } Modified: mina/branches/mina-new-chain2/example/src/main/java/org/apache/mina/example/chat/client/ChatClientSupport.java URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain2/example/src/main/java/org/apache/mina/example/chat/client/ChatClientSupport.java?rev=712028&r1=712027&r2=712028&view=diff ============================================================================== --- mina/branches/mina-new-chain2/example/src/main/java/org/apache/mina/example/chat/client/ChatClientSupport.java (original) +++ mina/branches/mina-new-chain2/example/src/main/java/org/apache/mina/example/chat/client/ChatClientSupport.java Thu Nov 6 17:03:23 2008 @@ -69,16 +69,16 @@ IoFilter CODEC_FILTER = new ProtocolCodecFilter( new TextLineCodecFactory()); - connector.getFilterChain().addLast("mdc", new MdcInjectionFilter()); - connector.getFilterChain().addLast("codec", CODEC_FILTER); - connector.getFilterChain().addLast("logger", LOGGING_FILTER); + connector.getFilterChain().add(new MdcInjectionFilter()); + connector.getFilterChain().add(CODEC_FILTER); + connector.getFilterChain().add(LOGGING_FILTER); if (useSsl) { SSLContext sslContext = BogusSslContextFactory .getInstance(false); SslFilter sslFilter = new SslFilter(sslContext); sslFilter.setUseClientMode(true); - connector.getFilterChain().addLast("sslFilter", sslFilter); + connector.getFilterChain().add(sslFilter); } connector.setHandler(handler);