You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/03/23 18:21:47 UTC
svn commit: r158802 [1/2] - in directory/network/trunk/src:
examples/org/apache/mina/examples/echoserver/
examples/org/apache/mina/examples/netcat/
examples/org/apache/mina/examples/reverser/
examples/org/apache/mina/examples/sumup/
examples/org/apache/mina/examples/tennis/ java/org/apache/mina/common/
java/org/apache/mina/io/ java/org/apache/mina/io/datagram/
java/org/apache/mina/io/filter/ java/org/apache/mina/io/socket/
java/org/apache/mina/protocol/ java/org/apache/mina/protocol/filter/
java/org/apache/mina/protocol/io/ java/org/apache/mina/protocol/vmpipe/
java/org/apache/mina/registry/ java/org/apache/mina/util/
test/org/apache/mina/examples/echoserver/ test/org/apache/mina/util/
Author: trustin
Date: Wed Mar 23 09:21:35 2005
New Revision: 158802
URL: http://svn.apache.org/viewcvs?view=rev&rev=158802
Log:
=== Revamped filter chain interface ===
Please note that this change will break your MINA application!
JavaDocs are not available for new classes yet.
I'll fill them in soon.
* Removed all filter chain manipulation methods from acceptors and connectors.
* Added newFilterChain(...) and getFilterChain() method to all acceptors and connectors.
* Added IoHandlerFilterChain and ProtocolHandlerFilterChain
* Updated ServiceRegistry and SimpleServiceRegistry following all of the above changes
* IoHandlerFilterManager and ProtocolHandlerFilterManager has been removed.
Added:
directory/network/trunk/src/java/org/apache/mina/common/FilterChainType.java (with props)
directory/network/trunk/src/java/org/apache/mina/io/AbstractIoHandlerFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/io/socket/SocketFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/protocol/AbstractProtocolHandlerFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolHandlerFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilterChain.java (with props)
Removed:
directory/network/trunk/src/java/org/apache/mina/util/IoHandlerFilterManager.java
directory/network/trunk/src/java/org/apache/mina/util/ProtocolHandlerFilterManager.java
directory/network/trunk/src/test/org/apache/mina/util/IoHandlerFilterManagerTest.java
directory/network/trunk/src/test/org/apache/mina/util/ProtocolHandlerFilterManagerTest.java
Modified:
directory/network/trunk/src/examples/org/apache/mina/examples/echoserver/Main.java
directory/network/trunk/src/examples/org/apache/mina/examples/netcat/Main.java
directory/network/trunk/src/examples/org/apache/mina/examples/reverser/Main.java
directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java
directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java
directory/network/trunk/src/examples/org/apache/mina/examples/tennis/Main.java
directory/network/trunk/src/java/org/apache/mina/io/IoAcceptor.java
directory/network/trunk/src/java/org/apache/mina/io/IoConnector.java
directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilter.java
directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterAdapter.java
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramConnector.java
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java
directory/network/trunk/src/java/org/apache/mina/io/filter/BlacklistFilter.java
directory/network/trunk/src/java/org/apache/mina/io/filter/IoThreadPoolFilter.java
directory/network/trunk/src/java/org/apache/mina/io/filter/SSLFilter.java
directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java
directory/network/trunk/src/java/org/apache/mina/io/socket/SocketConnector.java
directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java
directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolAcceptor.java
directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolConnector.java
directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolHandlerFilter.java
directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolHandlerFilterAdapter.java
directory/network/trunk/src/java/org/apache/mina/protocol/filter/ProtocolThreadPoolFilter.java
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolConnector.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java
directory/network/trunk/src/java/org/apache/mina/registry/ServiceRegistry.java
directory/network/trunk/src/java/org/apache/mina/registry/SimpleServiceRegistry.java
directory/network/trunk/src/test/org/apache/mina/examples/echoserver/AbstractTest.java
directory/network/trunk/src/test/org/apache/mina/examples/echoserver/AcceptorTest.java
directory/network/trunk/src/test/org/apache/mina/examples/echoserver/ConnectorTest.java
Modified: directory/network/trunk/src/examples/org/apache/mina/examples/echoserver/Main.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/echoserver/Main.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/echoserver/Main.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/echoserver/Main.java Wed Mar 23 09:21:35 2005
@@ -52,7 +52,7 @@
// Add thread pool filter
// MINA runs in a single thread if you don't add this filter.
- acceptor.addFilter( Integer.MAX_VALUE, threadPoolFilter );
+ acceptor.getFilterChain().addFirst( "threadPool", threadPoolFilter );
// Add SSL filter if SSL is enabled.
if( USE_SSL )
@@ -60,7 +60,7 @@
System.out.println( "SSL is enabled." );
SSLFilter sslFilter = new SSLFilter( BogusSSLContextFactory
.getInstance( true ) );
- acceptor.addFilter( Integer.MAX_VALUE - 1, sslFilter );
+ acceptor.getFilterChain().addLast( "sslFilter", sslFilter );
}
// Bind
@@ -71,7 +71,7 @@
IoAcceptor datagramAcceptor = new DatagramAcceptor();
// Add thread pool filter
- datagramAcceptor.addFilter( Integer.MAX_VALUE, threadPoolFilter );
+ datagramAcceptor.getFilterChain().addFirst( "threadPool", threadPoolFilter );
// Bind
datagramAcceptor.bind( new InetSocketAddress( PORT ),
Modified: directory/network/trunk/src/examples/org/apache/mina/examples/netcat/Main.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/netcat/Main.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/netcat/Main.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/netcat/Main.java Wed Mar 23 09:21:35 2005
@@ -46,7 +46,8 @@
// Add I/O thread pool filter.
// MINA runs in a single thread if you don't add this filter.
- connector.addFilter( Integer.MAX_VALUE, new IoThreadPoolFilter() );
+ connector.getFilterChain().addFirst(
+ "threadPool", new IoThreadPoolFilter() );
// Start communication.
connector.connect( new InetSocketAddress( args[ 0 ], Integer
Modified: directory/network/trunk/src/examples/org/apache/mina/examples/reverser/Main.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/reverser/Main.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/reverser/Main.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/reverser/Main.java Wed Mar 23 09:21:35 2005
@@ -53,8 +53,10 @@
new SocketAcceptor() );
// Add both thread pool filters.
- acceptor.getIoAcceptor().addFilter( Integer.MAX_VALUE, ioThreadPoolFilter );
- acceptor.addFilter( Integer.MAX_VALUE, protocolThreadPoolFilter );
+ acceptor.getIoAcceptor().getFilterChain().addFirst(
+ "threadPool", ioThreadPoolFilter );
+ acceptor.getFilterChain().addFirst(
+ "threadPool", protocolThreadPoolFilter );
// Bind
acceptor.bind( new InetSocketAddress( PORT ),
Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java Wed Mar 23 09:21:35 2005
@@ -54,8 +54,10 @@
IoProtocolConnector connector = new IoProtocolConnector(
new SocketConnector() );
- connector.getIoConnector().addFilter( Integer.MAX_VALUE, ioThreadPoolFilter );
- connector.addFilter( Integer.MAX_VALUE, protocolThreadPoolFilter );
+ connector.getIoConnector().getFilterChain().addFirst(
+ "threadPool", ioThreadPoolFilter );
+ connector.getFilterChain().addFirst(
+ "threadPool", protocolThreadPoolFilter );
ProtocolProvider protocolProvider = new ClientProtocolProvider(
values );
Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java Wed Mar 23 09:21:35 2005
@@ -35,8 +35,10 @@
IoProtocolAcceptor acceptor = new IoProtocolAcceptor(
new SocketAcceptor() );
- acceptor.getIoAcceptor().addFilter( Integer.MAX_VALUE, ioThreadPoolFilter );
- acceptor.addFilter( Integer.MAX_VALUE, protocolThreadPoolFilter );
+ acceptor.getIoAcceptor().getFilterChain().addFirst(
+ "threadPool", ioThreadPoolFilter );
+ acceptor.getFilterChain().addFirst(
+ "threadPool", protocolThreadPoolFilter );
acceptor.bind( new InetSocketAddress( SERVER_PORT ),
new ServerProtocolProvider() );
Modified: directory/network/trunk/src/examples/org/apache/mina/examples/tennis/Main.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/tennis/Main.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/tennis/Main.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/tennis/Main.java Wed Mar 23 09:21:35 2005
@@ -37,10 +37,11 @@
// Set up server
VmPipeAcceptor acceptor = new VmPipeAcceptor();
acceptor.bind( address, new TennisPlayer() );
- acceptor.addFilter( 0, threadPool );
+ acceptor.getFilterChain().addFirst( "threadPool", threadPool );
// Connect to the server.
VmPipeConnector connector = new VmPipeConnector();
+ connector.getFilterChain().addFirst( "threadPool", threadPool );
ProtocolSession session = connector.connect( address,
new TennisPlayer() );
@@ -56,4 +57,4 @@
// Stop the thread pool
threadPool.stop();
}
-}
\ No newline at end of file
+}
Added: directory/network/trunk/src/java/org/apache/mina/common/FilterChainType.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/FilterChainType.java?view=auto&rev=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/FilterChainType.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/common/FilterChainType.java Wed Mar 23 09:21:35 2005
@@ -0,0 +1,23 @@
+package org.apache.mina.common;
+
+/**
+ * TODO document me
+ */
+public class FilterChainType {
+
+ /**
+ * 'Preprocess chain' passes events to the next filter
+ * of the parent chain after processing its children.
+ */
+ public static final FilterChainType PREPROCESS = new FilterChainType();
+
+ /**
+ * 'Postprocess chain' passes events to the next filter
+ * of the parent chain before processing its children.
+ */
+ public static final FilterChainType POSTPROCESS = new FilterChainType();
+
+ private FilterChainType()
+ {
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/common/FilterChainType.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Added: directory/network/trunk/src/java/org/apache/mina/io/AbstractIoHandlerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/AbstractIoHandlerFilterChain.java?view=auto&rev=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/AbstractIoHandlerFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/AbstractIoHandlerFilterChain.java Wed Mar 23 09:21:35 2005
@@ -0,0 +1,703 @@
+package org.apache.mina.io;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.FilterChainType;
+import org.apache.mina.common.IdleStatus;
+
+public abstract class AbstractIoHandlerFilterChain implements IoHandlerFilterChain
+{
+ private final IoHandlerFilter HEAD_FILTER = new IoHandlerFilter()
+ {
+ public void sessionOpened( NextFilter nextFilter, IoSession session )
+ {
+ nextFilter.sessionOpened( session );
+ }
+
+ public void sessionClosed( NextFilter nextFilter, IoSession session )
+ {
+ nextFilter.sessionClosed( session );
+ }
+
+ public void sessionIdle( NextFilter nextFilter, IoSession session,
+ IdleStatus status )
+ {
+ nextFilter.sessionIdle( session, status );
+ }
+
+ public void exceptionCaught( NextFilter nextFilter,
+ IoSession session, Throwable cause )
+ {
+ nextFilter.exceptionCaught( session, cause );
+ }
+
+ public void dataRead( NextFilter nextFilter, IoSession session,
+ ByteBuffer buf )
+ {
+ nextFilter.dataRead( session, buf );
+ }
+
+ public void dataWritten( NextFilter nextFilter, IoSession session,
+ Object marker )
+ {
+ nextFilter.dataWritten( session, marker );
+ }
+
+ public void filterWrite( NextFilter nextFilter, IoSession session,
+ ByteBuffer buf, Object marker )
+ {
+ if( AbstractIoHandlerFilterChain.this.parent == null )
+ {
+ // write only when root filter chain traversal is finished.
+ doWrite( session, buf, marker );
+ }
+ }
+ };
+
+ private static final IoHandlerFilter TAIL_FILTER = new IoHandlerFilter()
+ {
+ public void sessionOpened( NextFilter nextFilter, IoSession session )
+ {
+ session.getHandler().sessionOpened( session );
+ }
+
+ public void sessionClosed( NextFilter nextFilter, IoSession session )
+ {
+ session.getHandler().sessionClosed( session );
+ }
+
+ public void sessionIdle( NextFilter nextFilter, IoSession session,
+ IdleStatus status )
+ {
+ session.getHandler().sessionIdle( session, status );
+ }
+
+ public void exceptionCaught( NextFilter nextFilter,
+ IoSession session, Throwable cause )
+ {
+ session.getHandler().exceptionCaught( session, cause );
+ }
+
+ public void dataRead( NextFilter nextFilter, IoSession session,
+ ByteBuffer buf )
+ {
+ IoHandler handler = session.getHandler();
+ handler.dataRead( session, buf );
+ buf.release();
+ }
+
+ public void dataWritten( NextFilter nextFilter, IoSession session,
+ Object marker )
+ {
+ session.getHandler().dataWritten( session, marker );
+ }
+
+ public void filterWrite( NextFilter nextFilter,
+ IoSession session, ByteBuffer buf, Object marker )
+ {
+ nextFilter.filterWrite( session, buf, marker );
+ }
+ };
+
+ private AbstractIoHandlerFilterChain parent;
+
+ private final FilterChainType type;
+
+ private final Map name2entry = new HashMap();
+
+ private final Map filter2entry = new IdentityHashMap();
+
+ private final Entry head;
+
+ private final Entry tail;
+
+ protected AbstractIoHandlerFilterChain( FilterChainType type )
+ {
+ if( type == null )
+ {
+ throw new NullPointerException( "type" );
+ }
+
+ this.type = type;
+
+ head = new Entry( null, null, "head", HEAD_FILTER );
+ tail = new Entry( head, null, "tail", TAIL_FILTER );
+ head.nextEntry = tail;
+ }
+
+ public IoHandlerFilterChain getRoot()
+ {
+ AbstractIoHandlerFilterChain current = this;
+ while( current.parent != null )
+ {
+ current = current.parent;
+ }
+ return current;
+ }
+
+ public IoHandlerFilterChain getParent()
+ {
+ return parent;
+ }
+
+ public FilterChainType getType()
+ {
+ return type;
+ }
+
+ public IoHandlerFilter getChild( String name )
+ {
+ Entry e = ( Entry ) name2entry.get( name );
+ if ( e == null )
+ {
+ return null;
+ }
+ return e.filter;
+ }
+
+ /**
+ * Adds the specified interceptor with the specified name at the beginning of this chain.
+ */
+ public synchronized void addFirst( String name,
+ IoHandlerFilter filter )
+ {
+ checkAddable( name, filter );
+ register( head, name, filter );
+ }
+
+
+ /**
+ * Adds the specified interceptor with the specified name at the end of this chain.
+ */
+ public synchronized void addLast( String name,
+ IoHandlerFilter filter )
+ {
+ checkAddable( name, filter );
+ register( tail.prevEntry, name, filter );
+ }
+
+
+ /**
+ * Adds the specified interceptor with the specified name just before the interceptor whose name is
+ * <code>baseName</code> in this chain.
+ */
+ public synchronized void addBefore( String baseName,
+ String name,
+ IoHandlerFilter filter )
+ {
+ Entry baseEntry = checkOldName( baseName );
+ checkAddable( name, filter );
+ register( baseEntry, name, filter );
+ }
+
+
+ /**
+ * Adds the specified interceptor with the specified name just after the interceptor whose name is
+ * <code>baseName</code> in this chain.
+ */
+ public synchronized void addAfter( String baseName,
+ String name,
+ IoHandlerFilter filter )
+ {
+ Entry baseEntry = checkOldName( baseName );
+ checkAddable( name, filter );
+ register( baseEntry.prevEntry, name, filter );
+ }
+
+
+ /**
+ * Removes the interceptor with the specified name from this chain.
+ */
+ public synchronized void remove( String name )
+ {
+ Entry entry = checkOldName( name );
+ Entry prevEntry = entry.prevEntry;
+ Entry nextEntry = entry.nextEntry;
+ prevEntry.nextEntry = nextEntry;
+ nextEntry.prevEntry = prevEntry;
+
+ name2entry.remove( name );
+ IoHandlerFilter filter = entry.filter;
+ filter2entry.remove( filter );
+ if ( filter instanceof AbstractIoHandlerFilterChain )
+ {
+ ( ( AbstractIoHandlerFilterChain ) filter ).parent = null;
+ }
+ }
+
+
+ /**
+ * Removes all interceptors added to this chain.
+ */
+ public synchronized void clear()
+ {
+ Iterator it = new ArrayList( name2entry.keySet() ).iterator();
+ while ( it.hasNext() )
+ {
+ this.remove( ( String ) it.next() );
+ }
+ }
+
+ private void register( Entry prevEntry, String name, IoHandlerFilter filter )
+ {
+ Entry newEntry = new Entry( prevEntry, prevEntry.nextEntry, name, filter );
+ prevEntry.nextEntry.prevEntry = newEntry;
+ prevEntry.nextEntry = newEntry;
+ name2entry.put( name, newEntry );
+ filter2entry.put( filter, newEntry );
+ if ( filter instanceof AbstractIoHandlerFilterChain )
+ {
+ ( ( AbstractIoHandlerFilterChain ) filter ).parent = this;
+ }
+ }
+
+ /**
+ * Throws an exception when the specified interceptor name is not registered in this chain.
+ *
+ * @return An interceptor entry with the specified name.
+ */
+ private Entry checkOldName( String baseName )
+ {
+ Entry e = ( Entry ) name2entry.get( baseName );
+ if ( e == null )
+ {
+ throw new IllegalArgumentException( "Unknown interceptor name:" +
+ baseName );
+ }
+ return e;
+ }
+
+
+ /**
+ * Checks the specified interceptor name is already taken and throws an exception if already taken.
+ */
+ private void checkAddable( String name, IoHandlerFilter filter )
+ {
+ if ( name2entry.containsKey( name ) )
+ {
+ throw new IllegalArgumentException( "Other interceptor is using name '" + name + "'" );
+ }
+
+ if ( filter instanceof AbstractIoHandlerFilterChain )
+ {
+ if ( ( ( AbstractIoHandlerFilterChain ) filter ).parent != null )
+ {
+ throw new IllegalArgumentException( "This interceptor chain has its parent already." );
+ }
+ }
+ }
+
+ public void sessionOpened( NextFilter nextFilter, IoSession session )
+ {
+ Entry head = this.head;
+ callNextSessionOpened(head, nextFilter, session);
+ }
+
+ private void callNextSessionOpened( Entry entry,
+ NextFilter nextFilter, IoSession session)
+ {
+ try
+ {
+ if( nextFilter == null )
+ {
+ entry.filter.sessionOpened( entry.nextFilter, session );
+ }
+ else if ( type == FilterChainType.PREPROCESS )
+ {
+ entry.filter.sessionOpened( entry.nextFilter, session );
+ nextFilter.sessionOpened( session );
+ }
+ else // POSTPROCESS
+ {
+ nextFilter.sessionOpened( session );
+ entry.filter.sessionOpened( entry.nextFilter, session );
+ }
+
+ }
+ catch( Throwable e )
+ {
+ fireExceptionCaught( session, e );
+ }
+ }
+
+ public void sessionClosed( NextFilter nextFilter, IoSession session )
+ {
+ Entry head = this.head;
+ callNextSessionClosed(head, nextFilter, session);
+ }
+
+ private void callNextSessionClosed( Entry entry,
+ NextFilter nextFilter, IoSession session )
+ {
+ try
+ {
+ if( nextFilter == null )
+ {
+ entry.filter.sessionClosed( entry.nextFilter, session );
+ }
+ else if( type == FilterChainType.PREPROCESS )
+ {
+ entry.filter.sessionClosed( entry.nextFilter, session );
+ nextFilter.sessionClosed( session );
+ }
+ else // POSTPROCESS
+ {
+ nextFilter.sessionClosed( session );
+ entry.filter.sessionClosed( entry.nextFilter, session );
+ }
+
+ }
+ catch( Throwable e )
+ {
+ fireExceptionCaught( session, e );
+ }
+ }
+
+ public void sessionIdle( NextFilter nextFilter, IoSession session, IdleStatus status )
+ {
+ Entry head = this.head;
+ callNextSessionIdle(head, nextFilter, session, status);
+ }
+
+ private void callNextSessionIdle( Entry entry,
+ NextFilter nextFilter, IoSession session,
+ IdleStatus status )
+ {
+ try
+ {
+ if( nextFilter == null )
+ {
+ entry.filter.sessionIdle( entry.nextFilter, session, status );
+ }
+ else if( type == FilterChainType.PREPROCESS )
+ {
+ entry.filter.sessionIdle( entry.nextFilter, session, status );
+ nextFilter.sessionIdle( session, status );
+ }
+ else // POSTPROCESS
+ {
+ nextFilter.sessionIdle( session, status );
+ entry.filter.sessionIdle( entry.nextFilter, session, status );
+ }
+ }
+ catch( Throwable e )
+ {
+ fireExceptionCaught( session, e );
+ }
+ }
+
+ public void dataRead( NextFilter nextFilter, IoSession session, ByteBuffer buf )
+ {
+ Entry head = this.head;
+ callNextDataRead(head, nextFilter, session, buf);
+ }
+
+ private void callNextDataRead( Entry entry,
+ NextFilter nextFilter, IoSession session,
+ ByteBuffer buf )
+ {
+ try
+ {
+ if( nextFilter == null )
+ {
+ entry.filter.dataRead( entry.nextFilter, session, buf );
+ }
+ else if( type == FilterChainType.PREPROCESS )
+ {
+ entry.filter.dataRead( entry.nextFilter, session, buf );
+ nextFilter.dataRead( session, buf );
+ }
+ else // POSTPROCESS
+ {
+ nextFilter.dataRead( session, buf );
+ entry.filter.dataRead( entry.nextFilter, session, buf );
+ }
+ }
+ catch( Throwable e )
+ {
+ fireExceptionCaught( session, e );
+ }
+ }
+
+ public void dataWritten( NextFilter nextFilter, IoSession session, Object marker )
+ {
+ Entry head = this.head;
+ callNextDataWritten(head, nextFilter, session, marker);
+ }
+
+ private void callNextDataWritten( Entry entry,
+ NextFilter nextFilter, IoSession session,
+ Object marker )
+ {
+ try
+ {
+ if( nextFilter == null )
+ {
+ entry.filter.dataWritten( entry.nextFilter, session, marker );
+ }
+ else if( type == FilterChainType.PREPROCESS )
+ {
+ entry.filter.dataWritten( entry.nextFilter, session, marker );
+ nextFilter.dataWritten( session, marker );
+ }
+ else // POSTPROCESS
+ {
+ nextFilter.dataWritten( session, marker );
+ entry.filter.dataWritten( entry.nextFilter, session, marker );
+ }
+ }
+ catch( Throwable e )
+ {
+ fireExceptionCaught( session, e );
+ }
+ }
+
+ public void exceptionCaught( NextFilter nextFilter, IoSession session, Throwable cause )
+ {
+ Entry head = this.head;
+ callNextExceptionCaught(head, nextFilter, session, cause);
+ }
+
+ private void callNextExceptionCaught( Entry entry,
+ NextFilter nextFilter, IoSession session,
+ Throwable cause )
+ {
+ try
+ {
+ if( nextFilter == null )
+ {
+ entry.filter.exceptionCaught( entry.nextFilter, session, cause );
+ }
+ else if( type == FilterChainType.PREPROCESS )
+ {
+ entry.filter.exceptionCaught( entry.nextFilter, session, cause );
+ nextFilter.exceptionCaught( session, cause );
+ }
+ else // POSTPROCESS
+ {
+ entry.filter.exceptionCaught( entry.nextFilter, session, cause );
+ nextFilter.exceptionCaught( session, cause );
+ }
+ }
+ catch( Throwable e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+ public void filterWrite( NextFilter nextFilter,
+ IoSession session, ByteBuffer buf, Object marker )
+ {
+ Entry tail = this.tail;
+ callPreviousFilterWrite( tail, nextFilter, session, buf, marker );
+ }
+
+ private void callPreviousFilterWrite( Entry entry,
+ NextFilter prevFilter, IoSession session,
+ ByteBuffer buf, Object marker )
+ {
+ if( buf == null )
+ {
+ return;
+ }
+
+ try
+ {
+ if( prevFilter == null )
+ {
+ entry.filter.filterWrite( entry.prevFilter, session, buf, marker );
+ }
+ else if( type == FilterChainType.PREPROCESS )
+ {
+ entry.filter.filterWrite( entry.prevFilter, session, buf, marker );
+ prevFilter.filterWrite( session, buf, marker );
+ }
+ else // POSTPROCESS
+ {
+ entry.filter.filterWrite( entry.prevFilter, session, buf, marker );
+ prevFilter.filterWrite( session, buf, marker );
+ }
+ }
+ catch( Throwable e )
+ {
+ fireExceptionCaught( session, e );
+ }
+ }
+
+ public List getChildren()
+ {
+ List list = new ArrayList();
+ Entry e = head.nextEntry;
+ while( e != tail )
+ {
+ list.add( e.filter );
+ e = e.nextEntry;
+ }
+
+ return list;
+ }
+
+ public List getChildrenReversed()
+ {
+ List list = new ArrayList();
+ Entry e = tail.prevEntry;
+ while( e != head )
+ {
+ list.add( e.filter );
+ e = e.prevEntry;
+ }
+ while( e != null );
+
+ return list;
+
+ }
+
+ private void fireExceptionCaught( IoSession session, Throwable cause )
+ {
+ try
+ {
+ getRoot().exceptionCaught( null, session, cause );
+ }
+ catch( Throwable t )
+ {
+ t.printStackTrace();
+ }
+ }
+
+ protected abstract void doWrite( IoSession session, ByteBuffer buffer, Object marker );
+
+ private class Entry
+ {
+ private Entry prevEntry;
+
+ private Entry nextEntry;
+
+ private final String name;
+
+ private final IoHandlerFilter filter;
+
+ private final NextFilter nextFilter;
+
+ private final NextFilter prevFilter;
+
+ private Entry( Entry prevEntry, Entry nextEntry,
+ String name, IoHandlerFilter filter )
+ {
+ if( filter == null )
+ {
+ throw new NullPointerException( "filter" );
+ }
+ if( name == null )
+ {
+ throw new NullPointerException( "name" );
+ }
+
+ this.prevEntry = prevEntry;
+ this.nextEntry = nextEntry;
+ this.name = name;
+ this.filter = filter;
+ this.nextFilter = new NextFilter()
+ {
+
+ public void sessionOpened( IoSession session )
+ {
+ Entry nextEntry = Entry.this.nextEntry;
+ callNextSessionOpened( nextEntry, null, session );
+ }
+
+ public void sessionClosed( IoSession session )
+ {
+ Entry nextEntry = Entry.this.nextEntry;
+ callNextSessionClosed( nextEntry, null, session );
+ }
+
+ public void sessionIdle( IoSession session, IdleStatus status )
+ {
+ Entry nextEntry = Entry.this.nextEntry;
+ callNextSessionIdle( nextEntry, null, session, status );
+ }
+
+ public void exceptionCaught( IoSession session,
+ Throwable cause )
+ {
+ Entry nextEntry = Entry.this.nextEntry;
+ callNextExceptionCaught( nextEntry, null, session, cause );
+ }
+
+ public void dataRead( IoSession session, ByteBuffer buf )
+ {
+ Entry nextEntry = Entry.this.nextEntry;
+ callNextDataRead( nextEntry, null, session, buf );
+ }
+
+ public void dataWritten( IoSession session, Object marker )
+ {
+ Entry nextEntry = Entry.this.nextEntry;
+ callNextDataWritten( nextEntry, null, session, marker );
+ }
+
+ public void filterWrite( IoSession session, ByteBuffer buf, Object marker )
+ {
+ throw new IllegalStateException();
+ }
+ };
+
+ this.prevFilter = new NextFilter()
+ {
+
+ public void sessionOpened( IoSession session )
+ {
+ throw new IllegalStateException();
+ }
+
+ public void sessionClosed( IoSession session )
+ {
+ throw new IllegalStateException();
+ }
+
+ public void sessionIdle( IoSession session, IdleStatus status )
+ {
+ throw new IllegalStateException();
+ }
+
+ public void exceptionCaught( IoSession session,
+ Throwable cause )
+ {
+ throw new IllegalStateException();
+ }
+
+ public void dataRead( IoSession session, ByteBuffer buf )
+ {
+ throw new IllegalStateException();
+ }
+
+ public void dataWritten( IoSession session, Object marker )
+ {
+ throw new IllegalStateException();
+ }
+
+ public void filterWrite( IoSession session, ByteBuffer buf, Object marker )
+ {
+ Entry nextEntry = Entry.this.prevEntry;
+ callPreviousFilterWrite( nextEntry, null, session, buf, marker );
+ }
+ };
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public IoHandlerFilter getFilter()
+ {
+ return filter;
+ }
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/io/AbstractIoHandlerFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/java/org/apache/mina/io/IoAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoAcceptor.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoAcceptor.java Wed Mar 23 09:21:35 2005
@@ -20,7 +20,8 @@
import java.io.IOException;
import java.net.SocketAddress;
-import java.util.List;
+
+import org.apache.mina.common.FilterChainType;
/**
* Accepts incoming connection, communicates with clients, and fires events to
@@ -63,29 +64,9 @@
*/
void unbind( SocketAddress address );
- /**
- * Adds the specified filter with the specified priority. Greater priority
- * value, higher priority, and thus evaluated more earlier. Please note
- * that priority value must be unique.
- */
- void addFilter( int priority, IoHandlerFilter filter );
-
- /**
- * Removes the specified filter from the filter list.
- */
- void removeFilter( IoHandlerFilter filter );
-
- /**
- * Removes all filters added to this acceptor.
- */
- void removeAllFilters();
+ IoHandlerFilterChain newFilterChain( FilterChainType type );
- /**
- * Returns the list of all filters ordered by priority (higher first).
- * The returned list is clone of internal filter chain, and thus you
- * cannot add or remove filters using it.
- */
- List getAllFilters();
+ IoHandlerFilterChain getFilterChain();
/**
* Returns the current exception monitor.
Modified: directory/network/trunk/src/java/org/apache/mina/io/IoConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoConnector.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoConnector.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoConnector.java Wed Mar 23 09:21:35 2005
@@ -20,7 +20,8 @@
import java.io.IOException;
import java.net.SocketAddress;
-import java.util.List;
+
+import org.apache.mina.common.FilterChainType;
/**
* Connects to endpoint, communicates with the server, and fires events to
@@ -70,29 +71,9 @@
IoSession connect( SocketAddress address, int timeout, IoHandler handler )
throws IOException;
- /**
- * Adds the specified filter with the specified priority. Greater priority
- * value, higher priority, and thus evaluated more earlier. Please note
- * that priority value must be unique.
- */
- void addFilter( int priority, IoHandlerFilter filter );
-
- /**
- * Removes the specified filter from the filter list.
- */
- void removeFilter( IoHandlerFilter filter );
-
- /**
- * Removes all filters added to this connector.
- */
- void removeAllFilters();
+ IoHandlerFilterChain newFilterChain( FilterChainType type );
- /**
- * Returns the list of all filters ordered by priority (higher first).
- * The returned list is clone of internal filter chain, and thus you
- * cannot add or remove filters using it.
- */
- List getAllFilters();
+ IoHandlerFilterChain getFilterChain();
/**
* Returns the current exception monitor.
Modified: directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilter.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilter.java Wed Mar 23 09:21:35 2005
@@ -51,37 +51,42 @@
/**
* Filters {@link IoHandler#sessionOpened(IoSession)} event.
*/
- void sessionOpened( IoHandler nextHandler, IoSession session );
+ void sessionOpened( NextFilter nextFilter, IoSession session );
/**
* Filters {@link IoHandler#sessionClosed(IoSession)} event.
*/
- void sessionClosed( IoHandler nextHandler, IoSession session );
+ void sessionClosed( NextFilter nextFilter, IoSession session );
/**
* Filters {@link IoHandler#sessionIdle(IoSession, IdleStatus)} event.
*/
- void sessionIdle( IoHandler nextHandler, IoSession session,
- IdleStatus status );
+ void sessionIdle( NextFilter nextFilter, IoSession session,
+ IdleStatus status );
/**
* Filters {@link IoHandler#exceptionCaught(IoSession, Throwable)} event.
*/
- void exceptionCaught( IoHandler nextHandler, IoSession session,
- Throwable cause );
+ void exceptionCaught( NextFilter nextFilter, IoSession session,
+ Throwable cause );
/**
* Filters {@link IoHandler#dataRead(IoSession, ByteBuffer)} event.
*/
- void dataRead( IoHandler nextHandler, IoSession session, ByteBuffer buf );
+ void dataRead( NextFilter nextFilter, IoSession session, ByteBuffer buf );
/**
* Filters {@link IoHandler#dataWritten(IoSession, Object)} event.
*/
- void dataWritten( IoHandler nextHandler, IoSession session, Object marker );
+ void dataWritten( NextFilter nextFilter, IoSession session, Object marker );
/**
* Filters {@link IoSession#write(ByteBuffer, Object)} method invocation.
*/
- ByteBuffer filterWrite( IoSession session, ByteBuffer buf );
+ void filterWrite( NextFilter nextFilter, IoSession session, ByteBuffer buf, Object marker );
+
+ public interface NextFilter extends IoHandler
+ {
+ void filterWrite( IoSession session, ByteBuffer buf, Object marker );
+ }
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterAdapter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterAdapter.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterAdapter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterAdapter.java Wed Mar 23 09:21:35 2005
@@ -35,42 +35,43 @@
*/
public class IoHandlerFilterAdapter implements IoHandlerFilter
{
- public void sessionOpened( IoHandler nextHandler, IoSession session )
+ public void sessionOpened( NextFilter nextFilter, IoSession session )
{
- nextHandler.sessionOpened( session );
+ nextFilter.sessionOpened( session );
}
- public void sessionClosed( IoHandler nextHandler, IoSession session )
+ public void sessionClosed( NextFilter nextFilter, IoSession session )
{
- nextHandler.sessionClosed( session );
+ nextFilter.sessionClosed( session );
}
- public void sessionIdle( IoHandler nextHandler, IoSession session,
+ public void sessionIdle( NextFilter nextFilter, IoSession session,
IdleStatus status )
{
- nextHandler.sessionIdle( session, status );
+ nextFilter.sessionIdle( session, status );
}
- public void exceptionCaught( IoHandler nextHandler, IoSession session,
+ public void exceptionCaught( NextFilter nextFilter, IoSession session,
Throwable cause )
{
- nextHandler.exceptionCaught( session, cause );
+ nextFilter.exceptionCaught( session, cause );
}
- public void dataRead( IoHandler nextHandler, IoSession session,
+ public void dataRead( NextFilter nextFilter, IoSession session,
ByteBuffer buf )
{
- nextHandler.dataRead( session, buf );
+ nextFilter.dataRead( session, buf );
}
- public void dataWritten( IoHandler nextHandler, IoSession session,
+ public void dataWritten( NextFilter nextFilter, IoSession session,
Object marker )
{
- nextHandler.dataWritten( session, marker );
+ nextFilter.dataWritten( session, marker );
}
- public ByteBuffer filterWrite( IoSession session, ByteBuffer buf )
+ public void filterWrite( NextFilter nextFilter, IoSession session,
+ ByteBuffer buf, Object marker )
{
- return buf;
+ nextFilter.filterWrite( session, buf, marker );
}
}
Added: directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterChain.java?view=auto&rev=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterChain.java Wed Mar 23 09:21:35 2005
@@ -0,0 +1,22 @@
+package org.apache.mina.io;
+
+import java.util.List;
+
+import org.apache.mina.common.FilterChainType;
+
+
+public interface IoHandlerFilterChain extends IoHandlerFilter {
+ IoHandlerFilterChain getRoot();
+ IoHandlerFilterChain getParent();
+ FilterChainType getType();
+
+ IoHandlerFilter getChild( String name );
+ List getChildren();
+ List getChildrenReversed();
+ void addFirst( String name, IoHandlerFilter filter );
+ void addLast( String name, IoHandlerFilter filter );
+ void addBefore( String baseName, String name, IoHandlerFilter filter );
+ void addAfter( String baseName, String name, IoHandlerFilter filter );
+ void remove( String name );
+ void clear();
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/io/IoHandlerFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java Wed Mar 23 09:21:35 2005
@@ -26,17 +26,16 @@
import java.nio.channels.Selector;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.FilterChainType;
import org.apache.mina.io.DefaultExceptionMonitor;
import org.apache.mina.io.ExceptionMonitor;
import org.apache.mina.io.IoAcceptor;
import org.apache.mina.io.IoHandler;
-import org.apache.mina.io.IoHandlerFilter;
-import org.apache.mina.util.IoHandlerFilterManager;
+import org.apache.mina.io.IoHandlerFilterChain;
import org.apache.mina.util.Queue;
/**
@@ -49,7 +48,7 @@
{
private static volatile int nextId = 0;
- private final IoHandlerFilterManager filterManager = new IoHandlerFilterManager();
+ private final DatagramFilterChain filters = new DatagramFilterChain( FilterChainType.PREPROCESS, this );
private final int id = nextId ++ ;
@@ -246,7 +245,7 @@
DatagramChannel ch = ( DatagramChannel ) key.channel();
DatagramSession session = new DatagramSession(
- DatagramAcceptor.this, filterManager, ch,
+ DatagramAcceptor.this, filters, ch,
( IoHandler ) key.attachment() );
session.setSelectionKey( key );
@@ -280,12 +279,12 @@
newBuf.flip();
session.increaseReadBytes( newBuf.remaining() );
- filterManager.fireDataRead( session, newBuf );
+ filters.dataRead( null, session, newBuf );
}
}
catch( IOException e )
{
- filterManager.fireExceptionCaught( session, e );
+ filters.exceptionCaught( null, session, e );
}
finally
{
@@ -316,7 +315,7 @@
}
catch( IOException e )
{
- session.getFilterManager().fireExceptionCaught( session, e );
+ session.getFilters().exceptionCaught( null, session, e );
}
}
}
@@ -356,11 +355,11 @@
}
catch( IllegalStateException e )
{
- session.getFilterManager().fireExceptionCaught( session,
+ session.getFilters().exceptionCaught( null, session,
e );
}
- session.getFilterManager().fireDataWritten( session, marker );
+ session.getFilters().dataWritten( null, session, marker );
continue;
}
@@ -386,7 +385,7 @@
}
session.increaseWrittenBytes( writtenBytes );
- session.getFilterManager().fireDataWritten( session, marker );
+ session.getFilters().dataWritten( null, session, marker );
}
}
}
@@ -496,25 +495,15 @@
}
}
}
-
- public void addFilter( int priority, IoHandlerFilter filter )
- {
- filterManager.addFilter( priority, false, filter );
- }
-
- public void removeFilter( IoHandlerFilter filter )
+
+ public IoHandlerFilterChain newFilterChain( FilterChainType type )
{
- filterManager.removeFilter( filter );
+ return new DatagramFilterChain( type, this );
}
-
- public void removeAllFilters()
- {
- filterManager.removeAllFilters();
- }
-
- public List getAllFilters()
+
+ public IoHandlerFilterChain getFilterChain()
{
- return filterManager.getAllFilters();
+ return filters;
}
private static class RegistrationRequest
Modified: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramConnector.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramConnector.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramConnector.java Wed Mar 23 09:21:35 2005
@@ -26,17 +26,16 @@
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.util.Iterator;
-import java.util.List;
import java.util.Set;
import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.FilterChainType;
import org.apache.mina.io.DefaultExceptionMonitor;
import org.apache.mina.io.ExceptionMonitor;
import org.apache.mina.io.IoConnector;
import org.apache.mina.io.IoHandler;
-import org.apache.mina.io.IoHandlerFilter;
+import org.apache.mina.io.IoHandlerFilterChain;
import org.apache.mina.io.IoSession;
-import org.apache.mina.util.IoHandlerFilterManager;
import org.apache.mina.util.Queue;
/**
@@ -50,7 +49,7 @@
{
private static volatile int nextId = 0;
- private final IoHandlerFilterManager filterManager = new IoHandlerFilterManager();
+ private final DatagramFilterChain filters = new DatagramFilterChain( FilterChainType.PREPROCESS, this );
private final int id = nextId ++ ;
@@ -250,12 +249,12 @@
newBuf.put( readBuf );
newBuf.flip();
- filterManager.fireDataRead( session, newBuf );
+ filters.dataRead( null, session, newBuf );
}
}
catch( IOException e )
{
- filterManager.fireExceptionCaught( session, e );
+ filters.exceptionCaught( null, session, e );
}
finally
{
@@ -286,7 +285,7 @@
}
catch( IOException e )
{
- session.getFilterManager().fireExceptionCaught( session, e );
+ session.getFilters().exceptionCaught( null, session, e );
}
}
}
@@ -326,11 +325,11 @@
}
catch( IllegalStateException e )
{
- session.getFilterManager().fireExceptionCaught( session,
+ session.getFilters().exceptionCaught( null, session,
e );
}
- session.getFilterManager().fireDataWritten( session, marker );
+ session.getFilters().dataWritten( null, session, marker );
continue;
}
@@ -353,7 +352,7 @@
writeBufferQueue.pop();
writeMarkerQueue.pop();
}
- session.getFilterManager().fireDataWritten( session, marker );
+ session.getFilters().dataWritten( null, session, marker );
}
}
}
@@ -375,7 +374,7 @@
break;
DatagramSession session = new DatagramSession( this,
- filterManager, req.channel, req.handler );
+ filters, req.channel, req.handler );
SelectionKey key = req.channel.register( selector,
SelectionKey.OP_READ, session );
@@ -421,24 +420,14 @@
}
}
- public void addFilter( int priority, IoHandlerFilter filter )
+ public IoHandlerFilterChain newFilterChain( FilterChainType type )
{
- filterManager.addFilter( priority, false, filter );
+ return new DatagramFilterChain( type, this );
}
-
- public void removeFilter( IoHandlerFilter filter )
- {
- filterManager.removeFilter( filter );
- }
-
- public void removeAllFilters()
- {
- filterManager.removeAllFilters();
- }
-
- public List getAllFilters()
+
+ public IoHandlerFilterChain getFilterChain()
{
- return filterManager.getAllFilters();
+ return filters;
}
private static class RegistrationRequest
Added: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramFilterChain.java?view=auto&rev=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramFilterChain.java Wed Mar 23 09:21:35 2005
@@ -0,0 +1,34 @@
+package org.apache.mina.io.datagram;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.FilterChainType;
+import org.apache.mina.io.AbstractIoHandlerFilterChain;
+import org.apache.mina.io.IoSession;
+import org.apache.mina.util.Queue;
+
+class DatagramFilterChain extends AbstractIoHandlerFilterChain {
+
+ private final DatagramProcessor processor;
+
+ DatagramFilterChain( FilterChainType type, DatagramProcessor processor )
+ {
+ super( type );
+
+ this.processor = processor;
+ }
+
+ protected void doWrite( IoSession session, ByteBuffer buf, Object marker )
+ {
+ DatagramSession s = ( DatagramSession ) session;
+ Queue writeBufferQueue = s.getWriteBufferQueue();
+ Queue writeMarkerQueue = s.getWriteMarkerQueue();
+
+ synchronized( writeBufferQueue )
+ {
+ writeBufferQueue.push( buf );
+ writeMarkerQueue.push( marker );
+ }
+
+ processor.flushSession( s );
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSession.java Wed Mar 23 09:21:35 2005
@@ -28,9 +28,7 @@
import org.apache.mina.common.TransportType;
import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoSession;
-import org.apache.mina.util.IoHandlerFilterManager;
import org.apache.mina.util.Queue;
-import org.apache.mina.util.IoHandlerFilterManager.WriteCommand;
/**
* TODO Insert type comment.
@@ -42,7 +40,7 @@
{
private final DatagramProcessor parent;
- private final IoHandlerFilterManager filterManager;
+ private final DatagramFilterChain filters;
private final DatagramChannel ch;
@@ -56,8 +54,6 @@
private final SocketAddress localAddress;
- private final WriteCommand writeCommand = new WriteCommandImpl();
-
private SocketAddress remoteAddress;
private SelectionKey key;
@@ -82,11 +78,11 @@
* Creates a new instance.
*/
DatagramSession( DatagramProcessor parent,
- IoHandlerFilterManager filterManager, DatagramChannel ch,
+ DatagramFilterChain filters, DatagramChannel ch,
IoHandler defaultHandler )
{
this.parent = parent;
- this.filterManager = filterManager;
+ this.filters = filters;
this.ch = ch;
this.config = new DatagramSessionConfig( ch );
this.writeBufferQueue = new Queue();
@@ -96,9 +92,9 @@
this.localAddress = ch.socket().getLocalSocketAddress();
}
- IoHandlerFilterManager getFilterManager()
+ DatagramFilterChain getFilters()
{
- return filterManager;
+ return filters;
}
DatagramChannel getChannel()
@@ -147,7 +143,7 @@
public void write( ByteBuffer buf, Object marker )
{
- filterManager.write( this, writeCommand, buf, marker );
+ filters.filterWrite( null, this, buf, marker );
}
public TransportType getTransportType()
@@ -242,19 +238,5 @@
else
throw new IllegalArgumentException( "Unknown idle status: "
+ status );
- }
-
- private class WriteCommandImpl implements WriteCommand
- {
- public void execute( ByteBuffer buf, Object marker )
- {
- synchronized( writeBufferQueue )
- {
- writeBufferQueue.push( buf );
- writeMarkerQueue.push( marker );
- }
-
- parent.flushSession( DatagramSession.this );
- }
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/filter/BlacklistFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/filter/BlacklistFilter.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/filter/BlacklistFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/filter/BlacklistFilter.java Wed Mar 23 09:21:35 2005
@@ -25,7 +25,6 @@
import java.util.Set;
import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoHandlerFilter;
import org.apache.mina.io.IoHandlerFilterAdapter;
import org.apache.mina.io.IoSession;
@@ -61,13 +60,13 @@
* Forwards event if and if only the remote address of session is not
* blacklisted.
*/
- public void dataRead( IoHandler nextHandler, IoSession session,
+ public void dataRead( NextFilter nextFilter, IoSession session,
ByteBuffer buf )
{
if( !isBlocked( session ) )
{
// forward if not blocked
- super.dataRead( nextHandler, session, buf );
+ super.dataRead( nextFilter, session, buf );
}
}
@@ -75,7 +74,7 @@
* Close connection immediately if the remote address of session is
* blacklisted.
*/
- public void sessionOpened( IoHandler nextHandler, IoSession session )
+ public void sessionOpened( NextFilter nextFilter, IoSession session )
{
if( isBlocked( session ) )
{
@@ -84,7 +83,7 @@
}
else
{
- super.sessionOpened( nextHandler, session );
+ super.sessionOpened( nextFilter, session );
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/filter/IoThreadPoolFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/filter/IoThreadPoolFilter.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/filter/IoThreadPoolFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/filter/IoThreadPoolFilter.java Wed Mar 23 09:21:35 2005
@@ -197,49 +197,49 @@
}
}
- public void sessionOpened( IoHandler nextHandler, IoSession session )
+ public void sessionOpened( NextFilter nextFilter, IoSession session )
{
- fireEvent( nextHandler, session, EventType.OPENED, null );
+ fireEvent( nextFilter, session, EventType.OPENED, null );
}
- public void sessionClosed( IoHandler nextHandler, IoSession session )
+ public void sessionClosed( NextFilter nextFilter, IoSession session )
{
- fireEvent( nextHandler, session, EventType.CLOSED, null );
+ fireEvent( nextFilter, session, EventType.CLOSED, null );
}
- public void sessionIdle( IoHandler nextHandler, IoSession session,
+ public void sessionIdle( NextFilter nextFilter, IoSession session,
IdleStatus status )
{
- fireEvent( nextHandler, session, EventType.IDLE, status );
+ fireEvent( nextFilter, session, EventType.IDLE, status );
}
- public void exceptionCaught( IoHandler nextHandler, IoSession session,
+ public void exceptionCaught( NextFilter nextFilter, IoSession session,
Throwable cause )
{
- fireEvent( nextHandler, session, EventType.EXCEPTION, cause );
+ fireEvent( nextFilter, session, EventType.EXCEPTION, cause );
}
- public void dataRead( IoHandler nextHandler, IoSession session,
+ public void dataRead( NextFilter nextFilter, IoSession session,
ByteBuffer buf )
{
// MINA will release the buffer if this method returns.
buf.acquire();
- fireEvent( nextHandler, session, EventType.READ, buf );
+ fireEvent( nextFilter, session, EventType.READ, buf );
}
- public void dataWritten( IoHandler nextHandler, IoSession session,
+ public void dataWritten( NextFilter nextFilter, IoSession session,
Object marker )
{
- fireEvent( nextHandler, session, EventType.WRITTEN, marker );
+ fireEvent( nextFilter, session, EventType.WRITTEN, marker );
}
- private void fireEvent( IoHandler nextHandler, IoSession session,
+ private void fireEvent( NextFilter nextFilter, IoSession session,
EventType type, Object data )
{
SessionBuffer buf = getSessionBuffer( session );
synchronized( buf )
{
- buf.nextHandlers.push( nextHandler );
+ buf.nextFilters.push( nextFilter );
buf.eventTypes.push( type );
buf.eventDatum.push( data );
}
@@ -285,7 +285,7 @@
private final IoSession session;
- private final Queue nextHandlers = new Queue();
+ private final Queue nextFilters = new Queue();
private final Queue eventTypes = new Queue();
@@ -388,10 +388,10 @@
buf = ( SessionBuffer ) it.next();
it.remove();
}
- while( buf != null && buf.nextHandlers.isEmpty()
+ while( buf != null && buf.nextFilters.isEmpty()
&& it.hasNext() );
}
- while( buf != null && buf.nextHandlers.isEmpty() );
+ while( buf != null && buf.nextFilters.isEmpty() );
}
return buf;
@@ -402,50 +402,50 @@
IoSession session = buf.session;
for( ;; )
{
- IoHandler nextHandler;
+ NextFilter nextFilter;
EventType type;
Object data;
synchronized( buf )
{
- nextHandler = ( IoHandler ) buf.nextHandlers.pop();
- if( nextHandler == null )
+ nextFilter = ( NextFilter ) buf.nextFilters.pop();
+ if( nextFilter == null )
break;
type = ( EventType ) buf.eventTypes.pop();
data = buf.eventDatum.pop();
}
- processEvent( nextHandler, session, type, data );
+ processEvent( nextFilter, session, type, data );
}
}
- private void processEvent( IoHandler nextHandler, IoSession session,
+ private void processEvent( NextFilter nextFilter, IoSession session,
EventType type, Object data )
{
if( type == EventType.READ )
{
ByteBuffer buf = ( ByteBuffer ) data;
- nextHandler.dataRead( session, buf );
+ nextFilter.dataRead( session, buf );
buf.release();
}
else if( type == EventType.WRITTEN )
{
- nextHandler.dataWritten( session, data );
+ nextFilter.dataWritten( session, data );
}
else if( type == EventType.EXCEPTION )
{
- nextHandler.exceptionCaught( session, ( Throwable ) data );
+ nextFilter.exceptionCaught( session, ( Throwable ) data );
}
else if( type == EventType.IDLE )
{
- nextHandler.sessionIdle( session, ( IdleStatus ) data );
+ nextFilter.sessionIdle( session, ( IdleStatus ) data );
}
else if( type == EventType.OPENED )
{
- nextHandler.sessionOpened( session );
+ nextFilter.sessionOpened( session );
}
else if( type == EventType.CLOSED )
{
- nextHandler.sessionClosed( session );
+ nextFilter.sessionClosed( session );
}
}
@@ -468,7 +468,7 @@
synchronized( readySessionBuffers )
{
busySessionBuffers.remove( buf );
- if( buf.nextHandlers.isEmpty() )
+ if( buf.nextFilters.isEmpty() )
{
removeSessionBuffer( buf );
}
@@ -548,8 +548,8 @@
}
}
- public ByteBuffer filterWrite( IoSession session, ByteBuffer buf )
+ public void filterWrite( NextFilter nextFilter, IoSession session, ByteBuffer buf, Object marker )
{
- return buf;
+ nextFilter.filterWrite( session, buf, marker );
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/filter/SSLFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/filter/SSLFilter.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/filter/SSLFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/filter/SSLFilter.java Wed Mar 23 09:21:35 2005
@@ -31,7 +31,6 @@
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.io.DefaultExceptionMonitor;
-import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoHandlerFilterAdapter;
import org.apache.mina.io.IoSession;
@@ -109,14 +108,14 @@
// IoHandlerFilter impl.
- public void sessionOpened( IoHandler nextHandler, IoSession session )
+ public void sessionOpened( NextFilter nextFilter, IoSession session )
{
- nextHandler.sessionOpened( session );
+ nextFilter.sessionOpened( session );
// Create an SSL handler
createSSLSessionHandler( session );
}
- public void sessionClosed( IoHandler nextHandler, IoSession session )
+ public void sessionClosed( NextFilter nextFilter, IoSession session )
{
SSLHandler sslHandler = getSSLSessionHandler( session );
if( debug != null )
@@ -136,12 +135,12 @@
}
catch( SSLException ssle )
{
- nextHandler.exceptionCaught( session, ssle );
+ nextFilter.exceptionCaught( session, ssle );
}
finally
{
// notify closed session
- nextHandler.sessionClosed( session );
+ nextFilter.sessionClosed( session );
// release buffers
sslHandler.release();
@@ -150,7 +149,7 @@
}
}
- public void dataRead( IoHandler nextHandler, IoSession session,
+ public void dataRead( NextFilter nextFilter, IoSession session,
ByteBuffer buf )
{
SSLHandler sslHandler = getSSLSessionHandler( session );
@@ -169,7 +168,7 @@
sslHandler.dataRead( buf.buf() );
// Handle data to be forwarded to application or written to net
- handleSSLData( nextHandler, session, sslHandler );
+ handleSSLData( nextFilter, session, sslHandler );
if( sslHandler.isClosed() )
{
@@ -191,23 +190,23 @@
ssle = newSSLE;
}
- nextHandler.exceptionCaught( session, ssle );
+ nextFilter.exceptionCaught( session, ssle );
}
}
}
else
{
- nextHandler.dataRead( session, buf );
+ nextFilter.dataRead( session, buf );
}
}
- public void dataWritten( IoHandler nextHandler, IoSession session,
+ public void dataWritten( NextFilter nextFilter, IoSession session,
Object marker )
{
- nextHandler.dataWritten( session, marker );
+ nextFilter.dataWritten( session, marker );
}
- public ByteBuffer filterWrite( IoSession session, ByteBuffer buf )
+ public void filterWrite( NextFilter nextFilter, IoSession session, ByteBuffer buf, Object marker )
{
SSLHandler sslHandler = getSSLSessionHandler( session );
@@ -226,7 +225,8 @@
{
debug.print( " already encrypted: " + buf );
}
- return buf;
+ nextFilter.filterWrite( session, buf, marker );
+ return;
}
if( sslHandler.isInitialHandshakeComplete() )
{
@@ -246,7 +246,9 @@
debug.print( "encrypted data: "
+ encryptedBuffer.getHexDump() );
}
- return encryptedBuffer;
+ buf.release();
+ nextFilter.filterWrite( session, encryptedBuffer, marker );
+ return;
}
catch( SSLException ssle )
{
@@ -256,21 +258,22 @@
}
}
}
- return buf;
+
+ nextFilter.filterWrite( session, buf, marker );
}
// Utiliities
- private void handleSSLData( IoHandler nextHandler, IoSession session,
+ private void handleSSLData( NextFilter nextFilter, IoSession session,
SSLHandler sslHandler ) throws SSLException
{
// First write encrypted data to be written (if any)
writeNetBuffer( session, sslHandler );
// handle app. data read (if any)
- handleAppDataRead( nextHandler, session, sslHandler );
+ handleAppDataRead( nextFilter, session, sslHandler );
}
- private void handleAppDataRead( IoHandler nextHandler, IoSession session,
+ private void handleAppDataRead( NextFilter nextFilter, IoSession session,
SSLHandler sslHandler )
{
if( debug != null )
@@ -285,7 +288,7 @@
{
debug.print( "app data read: " + readBuffer + " (" + readBuffer.getHexDump() + ')' );
}
- nextHandler.dataRead( session, readBuffer );
+ nextFilter.dataRead( session, readBuffer );
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java Wed Mar 23 09:21:35 2005
@@ -27,15 +27,14 @@
import java.nio.channels.SocketChannel;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
+import org.apache.mina.common.FilterChainType;
import org.apache.mina.io.DefaultExceptionMonitor;
import org.apache.mina.io.ExceptionMonitor;
import org.apache.mina.io.IoAcceptor;
import org.apache.mina.io.IoHandler;
-import org.apache.mina.io.IoHandlerFilter;
-import org.apache.mina.util.IoHandlerFilterManager;
+import org.apache.mina.io.IoHandlerFilterChain;
import org.apache.mina.util.Queue;
/**
@@ -48,7 +47,7 @@
{
private static volatile int nextId = 0;
- private final IoHandlerFilterManager filterManager = new IoHandlerFilterManager();
+ private final SocketFilterChain filters = new SocketFilterChain( FilterChainType.PREPROCESS );
private final int id = nextId ++ ;
@@ -225,7 +224,7 @@
continue;
SocketSession session = new SocketSession(
- filterManager, ch, ( IoHandler ) key
+ filters, ch, ( IoHandler ) key
.attachment() );
SocketIoProcessor.getInstance().addSession( session );
}
@@ -352,27 +351,17 @@
}
}
}
-
- public void addFilter( int priority, IoHandlerFilter filter )
+
+ public IoHandlerFilterChain newFilterChain( FilterChainType type )
{
- filterManager.addFilter( priority, false, filter );
+ return new SocketFilterChain( type );
}
-
- public void removeFilter( IoHandlerFilter filter )
- {
- filterManager.removeFilter( filter );
- }
-
- public void removeAllFilters()
+
+ public IoHandlerFilterChain getFilterChain()
{
- filterManager.removeAllFilters();
+ return filters;
}
-
- public List getAllFilters()
- {
- return filterManager.getAllFilters();
- }
-
+
private static class RegistrationRequest
{
private final SocketAddress address;
Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketConnector.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketConnector.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketConnector.java Wed Mar 23 09:21:35 2005
@@ -26,16 +26,15 @@
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
-import java.util.List;
import java.util.Set;
+import org.apache.mina.common.FilterChainType;
import org.apache.mina.io.DefaultExceptionMonitor;
import org.apache.mina.io.ExceptionMonitor;
import org.apache.mina.io.IoConnector;
import org.apache.mina.io.IoHandler;
-import org.apache.mina.io.IoHandlerFilter;
+import org.apache.mina.io.IoHandlerFilterChain;
import org.apache.mina.io.IoSession;
-import org.apache.mina.util.IoHandlerFilterManager;
import org.apache.mina.util.Queue;
/**
@@ -50,7 +49,7 @@
private final int id = nextId++;
- private final IoHandlerFilterManager filterManager = new IoHandlerFilterManager();
+ private final SocketFilterChain filters = new SocketFilterChain( FilterChainType.PREPROCESS );
private final Selector selector;
@@ -247,7 +246,7 @@
private SocketSession newSession( SocketChannel ch, IoHandler handler )
{
- SocketSession session = new SocketSession( filterManager, ch, handler );
+ SocketSession session = new SocketSession( filters, ch, handler );
SocketIoProcessor.getInstance().addSession( session );
return session;
}
@@ -324,25 +323,14 @@
}
}
- public void addFilter( int priority, IoHandlerFilter filter )
+ public IoHandlerFilterChain newFilterChain( FilterChainType type )
{
- filterManager.addFilter( priority, false, filter );
-
+ return new SocketFilterChain( type );
}
-
- public void removeFilter( IoHandlerFilter filter )
- {
- filterManager.removeFilter( filter );
- }
-
- public void removeAllFilters()
- {
- filterManager.removeAllFilters();
- }
-
- public List getAllFilters()
+
+ public IoHandlerFilterChain getFilterChain()
{
- return filterManager.getAllFilters();
+ return filters;
}
public ExceptionMonitor getExceptionMonitor()
Added: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketFilterChain.java?view=auto&rev=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketFilterChain.java Wed Mar 23 09:21:35 2005
@@ -0,0 +1,30 @@
+package org.apache.mina.io.socket;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.FilterChainType;
+import org.apache.mina.io.AbstractIoHandlerFilterChain;
+import org.apache.mina.io.IoSession;
+import org.apache.mina.util.Queue;
+
+class SocketFilterChain extends AbstractIoHandlerFilterChain {
+
+ SocketFilterChain( FilterChainType type )
+ {
+ super( type );
+ }
+
+ protected void doWrite( IoSession session, ByteBuffer buf, Object marker )
+ {
+ SocketSession s = ( SocketSession ) session;
+ Queue writeBufferQueue = s.getWriteBufferQueue();
+ Queue writeMarkerQueue = s.getWriteMarkerQueue();
+
+ synchronized( writeBufferQueue )
+ {
+ writeBufferQueue.push( buf );
+ writeMarkerQueue.push( marker );
+ }
+
+ SocketIoProcessor.getInstance().flushSession( s );
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java?view=diff&r1=158801&r2=158802
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketIoProcessor.java Wed Mar 23 09:21:35 2005
@@ -156,12 +156,12 @@
catch( IOException e )
{
registered = false;
- session.getFilterManager().fireExceptionCaught( session, e );
+ session.getFilters().exceptionCaught( null, session, e );
}
if( registered )
{
- session.getFilterManager().fireSessionOpened( session );
+ session.getFilters().sessionOpened( null, session );
}
}
}
@@ -193,11 +193,11 @@
}
catch( IOException e )
{
- session.getFilterManager().fireExceptionCaught( session, e );
+ session.getFilters().exceptionCaught( null, session, e );
}
finally
{
- session.getFilterManager().fireSessionClosed( session );
+ session.getFilters().sessionClosed( null, session );
}
}
}
@@ -259,7 +259,7 @@
ByteBuffer newBuf = ByteBuffer.allocate( readBytes );
newBuf.put( buf );
newBuf.flip();
- session.getFilterManager().fireDataRead( session, newBuf );
+ session.getFilters().dataRead( null, session, newBuf );
}
}
else
@@ -271,7 +271,7 @@
{
if( e instanceof IOException )
scheduleRemove( session );
- session.getFilterManager().fireExceptionCaught( session, e );
+ session.getFilters().exceptionCaught( null, session, e );
}
}
@@ -341,7 +341,7 @@
&& ( currentTime - lastIoTime ) >= idleTime )
{
session.setIdle( status, true );
- session.getFilterManager().fireSessionIdle( session, status );
+ session.getFilters().sessionIdle( null, session, status );
}
}
@@ -354,8 +354,8 @@
&& ( session.getSelectionKey().interestOps() & SelectionKey.OP_WRITE ) != 0 )
{
session
- .getFilterManager()
- .fireExceptionCaught( session, new WriteTimeoutException() );
+ .getFilters()
+ .exceptionCaught( null, session, new WriteTimeoutException() );
}
}
@@ -386,7 +386,7 @@
catch( IOException e )
{
scheduleRemove( session );
- session.getFilterManager().fireExceptionCaught( session, e );
+ session.getFilters().exceptionCaught( null, session, e );
}
}
}
@@ -424,11 +424,11 @@
}
catch( IllegalStateException e )
{
- session.getFilterManager().fireExceptionCaught( session,
+ session.getFilters().exceptionCaught( null, session,
e );
}
- session.getFilterManager().fireDataWritten( session, marker );
+ session.getFilters().dataWritten( null, session, marker );
continue;
}