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/04/28 13:16:57 UTC
svn commit: r165128 - in /directory/network/trunk/src:
examples/org/apache/mina/examples/tennis/ java/org/apache/mina/io/
java/org/apache/mina/io/datagram/ java/org/apache/mina/io/socket/
java/org/apache/mina/protocol/ java/org/apache/mina/protocol/io/
java/org/apache/mina/protocol/vmpipe/ test/org/apache/mina/io/
test/org/apache/mina/protocol/ test/org/apache/mina/protocol/codec/
Author: trustin
Date: Thu Apr 28 04:16:55 2005
New Revision: 165128
URL: http://svn.apache.org/viewcvs?rev=165128&view=rev
Log:
* Fixed: in-VM pipe implementation is broken
* Added: IoSession and ProtocolSession interface
* Added: getFilterChain() to IoSession and ProtocolSession
* Added: IoSessionManager and ProtocolSessionManager
* Pulled up getFilterChain() from acceptors and connectors to IoSessionManager and ProtocolSessionManager
* Added: IoSessionFilterChain (used by transport type implementations)
* Added: IoSessionManagerFilterChain (used by transport type implementations)
* Added: ProtocolSessionFilterChain (used by transport type implementations)
* Added: ProtocolSessionManagerFilterChain (used by transport type implementations)
Added:
directory/network/trunk/src/java/org/apache/mina/io/IoSessionFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/io/IoSessionManager.java (with props)
directory/network/trunk/src/java/org/apache/mina/io/IoSessionManagerFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManager.java (with props)
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManagerFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionManagerFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManager.java (with props)
directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManagerFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSessionManagerFilterChain.java (with props)
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionManagerFilterChain.java (with props)
Removed:
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramFilterChain.java
directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramProcessor.java
directory/network/trunk/src/java/org/apache/mina/io/socket/SocketFilterChain.java
directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolFilterChain.java
directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilterChain.java
Modified:
directory/network/trunk/src/examples/org/apache/mina/examples/tennis/TennisPlayer.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/IoSession.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/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/ProtocolSession.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/io/IoProtocolSession.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/test/org/apache/mina/io/IoHandlerFilterChainTest.java
directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java
directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java
Modified: directory/network/trunk/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java Thu Apr 28 04:16:55 2005
@@ -17,7 +17,7 @@
*/
public class TennisPlayer implements ProtocolProvider
{
- private static final ProtocolHandler HANDLER = new TennisPlayerHandler();
+ private final ProtocolHandler HANDLER = new TennisPlayerHandler();
public ProtocolCodecFactory getCodecFactory()
{
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?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoAcceptor.java Thu Apr 28 04:16:55 2005
@@ -22,7 +22,6 @@
import java.net.SocketAddress;
import org.apache.mina.common.SessionInitializer;
-import org.apache.mina.common.SessionManager;
/**
* Accepts incoming connection, communicates with clients, and fires events to
@@ -39,16 +38,13 @@
* Threads accept incoming connections start automatically when
* {@link #bind(SocketAddress, IoHandler)} is invoked, and stop when all
* addresses are unbound.
- * <p>
- * {@link IoHandlerFilter}s can be added and removed at any time to filter
- * events just like Servlet filters and they are effective immediately.
*
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*
* @see SessionInitializer
*/
-public interface IoAcceptor extends SessionManager
+public interface IoAcceptor extends IoSessionManager
{
/**
* Binds to the specified <code>address</code> and handles incoming
@@ -70,6 +66,4 @@
* Unbinds from the specified <code>address</code>.
*/
void unbind( SocketAddress address );
-
- IoHandlerFilterChain getFilterChain();
}
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?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoConnector.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoConnector.java Thu Apr 28 04:16:55 2005
@@ -22,7 +22,6 @@
import java.net.SocketAddress;
import org.apache.mina.common.SessionInitializer;
-import org.apache.mina.common.SessionManager;
/**
* Connects to endpoint, communicates with the server, and fires events to
@@ -39,16 +38,13 @@
* Threads connect to endpoint start automatically when
* {@link #connect(SocketAddress, IoHandler)} is invoked, and stop when all
* connection attempts are finished.
- * <p>
- * {@link IoHandlerFilter}s can be added and removed at any time to filter
- * events just like Servlet filters and they are effective immediately.
*
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*
* @see SessionInitializer
*/
-public interface IoConnector extends SessionManager
+public interface IoConnector extends IoSessionManager
{
/**
* Connects to the specified <code>address</code>. If communication starts
@@ -134,6 +130,4 @@
IoSession connect( SocketAddress address, SocketAddress localAddress,
int timeout, IoHandler handler,
SessionInitializer initializer ) throws IOException;
-
- IoHandlerFilterChain getFilterChain();
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/IoSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoSession.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoSession.java Thu Apr 28 04:16:55 2005
@@ -36,6 +36,11 @@
* Returns the event handler for this session.
*/
IoHandler getHandler();
+
+ /**
+ * Returns the filter chain that only affects this session.
+ */
+ IoHandlerFilterChain getFilterChain();
/**
* Writes the content of the specified <code>buf</code>.
Added: directory/network/trunk/src/java/org/apache/mina/io/IoSessionFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoSessionFilterChain.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoSessionFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoSessionFilterChain.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,23 @@
+package org.apache.mina.io;
+
+import org.apache.mina.common.ByteBuffer;
+
+/**
+ * An {@link IoHandlerFilterChain} for datagram transport (UDP/IP).
+ *
+ * @author The Apache Directory Project
+ */
+public class IoSessionFilterChain extends AbstractIoHandlerFilterChain {
+
+ private final IoSessionManagerFilterChain prevChain;
+
+ public IoSessionFilterChain( IoSessionManagerFilterChain prevChain )
+ {
+ this.prevChain = prevChain;
+ }
+
+ protected void doWrite( IoSession session, ByteBuffer buf, Object marker )
+ {
+ prevChain.filterWrite( session, buf, marker );
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/io/IoSessionFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Added: directory/network/trunk/src/java/org/apache/mina/io/IoSessionManager.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoSessionManager.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoSessionManager.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoSessionManager.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,16 @@
+package org.apache.mina.io;
+
+import org.apache.mina.common.SessionManager;
+/**
+ * TODO document me
+ *
+ * {@link IoHandlerFilter}s can be added and removed at any time to filter
+ * events just like Servlet filters and they are effective immediately.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public interface IoSessionManager extends SessionManager {
+ IoHandlerFilterChain getFilterChain();
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/io/IoSessionManager.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Added: directory/network/trunk/src/java/org/apache/mina/io/IoSessionManagerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/IoSessionManagerFilterChain.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/IoSessionManagerFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/IoSessionManagerFilterChain.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,70 @@
+package org.apache.mina.io;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IdleStatus;
+
+/**
+ * An {@link IoHandlerFilterChain} for datagram transport (UDP/IP).
+ *
+ * @author The Apache Directory Project
+ */
+public abstract class IoSessionManagerFilterChain extends AbstractIoHandlerFilterChain {
+
+ private final IoSessionManager manager;
+
+ protected IoSessionManagerFilterChain( IoSessionManager manager )
+ {
+ this.manager = manager;
+ }
+
+ public IoSessionManager getManager()
+ {
+ return manager;
+ }
+
+ protected IoHandlerFilter createTailFilter()
+ {
+ return new IoHandlerFilter()
+ {
+ public void sessionOpened( NextFilter nextFilter, IoSession session )
+ {
+ ( ( IoSessionFilterChain ) session.getFilterChain() ).sessionOpened( session );
+ }
+
+ public void sessionClosed( NextFilter nextFilter, IoSession session )
+ {
+ ( ( IoSessionFilterChain ) session.getFilterChain() ).sessionClosed( session );
+ }
+
+ public void sessionIdle( NextFilter nextFilter, IoSession session,
+ IdleStatus status )
+ {
+ ( ( IoSessionFilterChain ) session.getFilterChain() ).sessionIdle( session, status );
+ }
+
+ public void exceptionCaught( NextFilter nextFilter,
+ IoSession session, Throwable cause )
+ {
+ ( ( IoSessionFilterChain ) session.getFilterChain() ).exceptionCaught( session, cause );
+ }
+
+ public void dataRead( NextFilter nextFilter, IoSession session,
+ ByteBuffer buf )
+ {
+ ( ( IoSessionFilterChain ) session.getFilterChain() ).dataRead( session, buf );
+ }
+
+ public void dataWritten( NextFilter nextFilter, IoSession session,
+ Object marker )
+ {
+ ( ( IoSessionFilterChain ) session.getFilterChain() ).dataWritten( session, marker );
+ }
+
+ public void filterWrite( NextFilter nextFilter,
+ IoSession session, ByteBuffer buf, Object marker )
+ {
+ nextFilter.filterWrite( session, buf, marker );
+ }
+ };
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/io/IoSessionManagerFilterChain.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?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- 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 Thu Apr 28 04:16:55 2005
@@ -34,6 +34,7 @@
import org.apache.mina.io.IoAcceptor;
import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoHandlerFilterChain;
+import org.apache.mina.io.IoSessionManagerFilterChain;
import org.apache.mina.util.ExceptionUtil;
import org.apache.mina.util.Queue;
@@ -43,11 +44,12 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*/
-public class DatagramAcceptor extends DatagramProcessor implements IoAcceptor
+public class DatagramAcceptor extends DatagramSessionManager implements IoAcceptor
{
private static volatile int nextId = 0;
- private final DatagramFilterChain filters = new DatagramFilterChain( this );
+ private final IoSessionManagerFilterChain filters =
+ new DatagramSessionManagerFilterChain( this );
private final int id = nextId ++ ;
@@ -339,7 +341,7 @@
}
catch( IOException e )
{
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
}
}
@@ -379,10 +381,10 @@
}
catch( IllegalStateException e )
{
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
- session.getFilters().dataWritten( session, marker );
+ session.getManagerFilterChain().dataWritten( session, marker );
continue;
}
@@ -408,7 +410,7 @@
}
session.increaseWrittenBytes( writtenBytes );
- session.getFilters().dataWritten( session, marker );
+ session.getManagerFilterChain().dataWritten( session, marker );
}
}
}
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?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- 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 Thu Apr 28 04:16:55 2005
@@ -33,6 +33,7 @@
import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoHandlerFilterChain;
import org.apache.mina.io.IoSession;
+import org.apache.mina.io.IoSessionManagerFilterChain;
import org.apache.mina.util.ExceptionUtil;
import org.apache.mina.util.Queue;
@@ -42,11 +43,12 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*/
-public class DatagramConnector extends DatagramProcessor implements IoConnector
+public class DatagramConnector extends DatagramSessionManager implements IoConnector
{
private static volatile int nextId = 0;
- private final DatagramFilterChain filters = new DatagramFilterChain( this );
+ private final IoSessionManagerFilterChain filters =
+ new DatagramSessionManagerFilterChain( this );
private final int id = nextId ++ ;
@@ -349,7 +351,7 @@
}
catch( IOException e )
{
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
}
}
@@ -389,10 +391,10 @@
}
catch( IllegalStateException e )
{
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
- session.getFilters().dataWritten( session, marker );
+ session.getManagerFilterChain().dataWritten( session, marker );
continue;
}
@@ -415,7 +417,7 @@
writeBufferQueue.pop();
writeMarkerQueue.pop();
}
- session.getFilters().dataWritten( session, marker );
+ session.getManagerFilterChain().dataWritten( session, marker );
}
}
}
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?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- 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 Thu Apr 28 04:16:55 2005
@@ -27,7 +27,11 @@
import org.apache.mina.common.SessionConfig;
import org.apache.mina.common.TransportType;
import org.apache.mina.io.IoHandler;
+import org.apache.mina.io.IoHandlerFilterChain;
import org.apache.mina.io.IoSession;
+import org.apache.mina.io.IoSessionFilterChain;
+import org.apache.mina.io.IoSessionManager;
+import org.apache.mina.io.IoSessionManagerFilterChain;
import org.apache.mina.util.Queue;
/**
@@ -38,7 +42,9 @@
*/
class DatagramSession extends BaseSession implements IoSession
{
- private final DatagramFilterChain filters;
+ private final IoSessionManagerFilterChain managerFilterChain;
+
+ private final IoSessionFilterChain filterChain;
private final DatagramChannel ch;
@@ -61,10 +67,11 @@
/**
* Creates a new instance.
*/
- DatagramSession( DatagramFilterChain filters, DatagramChannel ch,
- IoHandler defaultHandler )
+ DatagramSession( IoSessionManagerFilterChain managerFilterChain,
+ DatagramChannel ch, IoHandler defaultHandler )
{
- this.filters = filters;
+ this.managerFilterChain = managerFilterChain;
+ this.filterChain = new IoSessionFilterChain( managerFilterChain );
this.ch = ch;
this.config = new DatagramSessionConfig( ch );
this.writeBufferQueue = new Queue();
@@ -74,9 +81,14 @@
this.localAddress = ch.socket().getLocalSocketAddress();
}
- DatagramFilterChain getFilters()
+ IoSessionManagerFilterChain getManagerFilterChain()
+ {
+ return managerFilterChain;
+ }
+
+ public IoHandlerFilterChain getFilterChain()
{
- return filters;
+ return filterChain;
}
DatagramChannel getChannel()
@@ -115,9 +127,10 @@
return;
}
- if( filters.processor instanceof DatagramConnector )
+ IoSessionManager manager = managerFilterChain.getManager();
+ if( manager instanceof DatagramConnector )
{
- filters.processor.closeSession( this );
+ ( ( DatagramConnector ) manager ).closeSession( this );
if( wait )
{
while( disposed )
@@ -146,7 +159,7 @@
public void write( ByteBuffer buf, Object marker )
{
- filters.filterWrite( this, buf, marker );
+ filterChain.filterWrite( this, buf, marker );
}
public TransportType getTransportType()
Added: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManager.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManager.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManager.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManager.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,45 @@
+/*
+ * @(#) $Id$
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.mina.io.datagram;
+
+import org.apache.mina.common.BaseSessionManager;
+import org.apache.mina.io.IoSessionManager;
+
+/**
+ * A base class for {@link DatagramAcceptor} and {@link DatagramConnector}.
+ * Session interacts with this abstract class instead of those two concrete
+ * classes.
+ *
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+abstract class DatagramSessionManager extends BaseSessionManager implements IoSessionManager
+{
+ /**
+ * Requests this processor to flush the write buffer of the specified
+ * session. This method is invoked by MINA internally.
+ */
+ abstract void flushSession( DatagramSession session );
+
+ /**
+ * Requests this processor to close the specified session.
+ * This method is invoked by MINA internally.
+ */
+ abstract void closeSession( DatagramSession session );
+}
\ No newline at end of file
Propchange: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManager.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Added: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManagerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManagerFilterChain.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManagerFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManagerFilterChain.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,35 @@
+package org.apache.mina.io.datagram;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.io.IoHandlerFilterChain;
+import org.apache.mina.io.IoSession;
+import org.apache.mina.io.IoSessionManagerFilterChain;
+import org.apache.mina.util.Queue;
+
+/**
+ * An {@link IoHandlerFilterChain} for datagram transport (UDP/IP).
+ *
+ * @author The Apache Directory Project
+ */
+class DatagramSessionManagerFilterChain extends IoSessionManagerFilterChain {
+
+ DatagramSessionManagerFilterChain( DatagramSessionManager processor )
+ {
+ super( 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 );
+ }
+
+ ( ( DatagramSessionManager ) getManager() ).flushSession( s );
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/io/datagram/DatagramSessionManagerFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
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?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- 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 Thu Apr 28 04:16:55 2005
@@ -35,6 +35,7 @@
import org.apache.mina.io.IoAcceptor;
import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoHandlerFilterChain;
+import org.apache.mina.io.IoSessionManagerFilterChain;
import org.apache.mina.util.Queue;
/**
@@ -47,7 +48,7 @@
{
private static volatile int nextId = 0;
- private final SocketFilterChain filters = new SocketFilterChain();
+ private final IoSessionManagerFilterChain filters = new SocketSessionManagerFilterChain( this );
private final int id = nextId ++ ;
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?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- 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 Thu Apr 28 04:16:55 2005
@@ -34,6 +34,7 @@
import org.apache.mina.io.IoHandler;
import org.apache.mina.io.IoHandlerFilterChain;
import org.apache.mina.io.IoSession;
+import org.apache.mina.io.IoSessionManagerFilterChain;
import org.apache.mina.util.Queue;
/**
@@ -48,7 +49,7 @@
private final int id = nextId++;
- private final SocketFilterChain filters = new SocketFilterChain();
+ private final IoSessionManagerFilterChain filters = new SocketSessionManagerFilterChain( this );
private final Selector selector;
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?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- 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 Thu Apr 28 04:16:55 2005
@@ -161,12 +161,12 @@
catch( IOException e )
{
registered = false;
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
if( registered )
{
- session.getFilters().sessionOpened( session );
+ session.getManagerFilterChain().sessionOpened( session );
}
}
}
@@ -202,13 +202,13 @@
}
catch( IOException e )
{
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
finally
{
releaseWriteBuffers( session );
- session.getFilters().sessionClosed( session );
+ session.getManagerFilterChain().sessionClosed( session );
session.notifyClose();
}
}
@@ -271,7 +271,7 @@
ByteBuffer newBuf = ByteBuffer.allocate( readBytes );
newBuf.put( buf );
newBuf.flip();
- session.getFilters().dataRead( session, newBuf );
+ session.getManagerFilterChain().dataRead( session, newBuf );
}
if( ret < 0 )
{
@@ -282,7 +282,7 @@
{
if( e instanceof IOException )
scheduleRemove( session );
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
finally
{
@@ -356,7 +356,7 @@
&& ( currentTime - lastIoTime ) >= idleTime )
{
session.setIdle( status, true );
- session.getFilters().sessionIdle( session, status );
+ session.getManagerFilterChain().sessionIdle( session, status );
}
}
@@ -369,7 +369,7 @@
&& ( session.getSelectionKey().interestOps() & SelectionKey.OP_WRITE ) != 0 )
{
session
- .getFilters()
+ .getManagerFilterChain()
.exceptionCaught( session, new WriteTimeoutException() );
}
}
@@ -404,7 +404,7 @@
catch( IOException e )
{
scheduleRemove( session );
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
}
}
@@ -423,7 +423,7 @@
}
catch( IllegalStateException e )
{
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
}
}
@@ -461,10 +461,10 @@
}
catch( IllegalStateException e )
{
- session.getFilters().exceptionCaught( session, e );
+ session.getManagerFilterChain().exceptionCaught( session, e );
}
- session.getFilters().dataWritten( session, marker );
+ session.getManagerFilterChain().dataWritten( session, marker );
continue;
}
Modified: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSession.java Thu Apr 28 04:16:55 2005
@@ -27,7 +27,10 @@
import org.apache.mina.common.SessionConfig;
import org.apache.mina.common.TransportType;
import org.apache.mina.io.IoHandler;
+import org.apache.mina.io.IoHandlerFilterChain;
import org.apache.mina.io.IoSession;
+import org.apache.mina.io.IoSessionFilterChain;
+import org.apache.mina.io.IoSessionManagerFilterChain;
import org.apache.mina.util.Queue;
/**
@@ -38,7 +41,9 @@
*/
class SocketSession extends BaseSession implements IoSession
{
- private final SocketFilterChain filters;
+ private final IoSessionManagerFilterChain managerFilterChain;
+
+ private final IoSessionFilterChain filterChain;
private final SocketChannel ch;
@@ -61,10 +66,11 @@
/**
* Creates a new instance.
*/
- SocketSession( SocketFilterChain filters, SocketChannel ch,
- IoHandler defaultHandler )
+ SocketSession( IoSessionManagerFilterChain managerFilterChain,
+ SocketChannel ch, IoHandler defaultHandler )
{
- this.filters = filters;
+ this.managerFilterChain = managerFilterChain;
+ this.filterChain = new IoSessionFilterChain( managerFilterChain );
this.ch = ch;
this.config = new SocketSessionConfig( this );
this.writeBufferQueue = new Queue();
@@ -74,9 +80,14 @@
this.localAddress = ch.socket().getLocalSocketAddress();
}
- SocketFilterChain getFilters()
+ IoSessionManagerFilterChain getManagerFilterChain()
+ {
+ return managerFilterChain;
+ }
+
+ public IoHandlerFilterChain getFilterChain()
{
- return filters;
+ return filterChain;
}
SocketChannel getChannel()
@@ -144,7 +155,7 @@
public void write( ByteBuffer buf, Object marker )
{
- filters.filterWrite( this, buf, marker );
+ filterChain.filterWrite( this, buf, marker );
}
public TransportType getTransportType()
Added: directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionManagerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionManagerFilterChain.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionManagerFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/io/socket/SocketSessionManagerFilterChain.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,36 @@
+package org.apache.mina.io.socket;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.io.IoHandlerFilterChain;
+import org.apache.mina.io.IoSession;
+import org.apache.mina.io.IoSessionManager;
+import org.apache.mina.io.IoSessionManagerFilterChain;
+import org.apache.mina.util.Queue;
+
+/**
+ * An {@link IoHandlerFilterChain} for socket transport (TCP/IP).
+ *
+ * @author The Apache Directory Project
+ */
+class SocketSessionManagerFilterChain extends IoSessionManagerFilterChain {
+
+ SocketSessionManagerFilterChain( IoSessionManager manager )
+ {
+ super( manager );
+ }
+
+ 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/SocketSessionManagerFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolAcceptor.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolAcceptor.java Thu Apr 28 04:16:55 2005
@@ -22,7 +22,6 @@
import java.net.SocketAddress;
import org.apache.mina.common.SessionInitializer;
-import org.apache.mina.common.SessionManager;
/**
* Accepts incoming connection, communicates with clients, and fires events to
@@ -39,16 +38,13 @@
* Threads accept incoming connections start automatically when
* {@link #bind(SocketAddress, ProtocolProvider)} is invoked, and stop when all
* addresses are unbound.
- * <p>
- * {@link ProtocolHandlerFilter}s can be added and removed at any time to filter
- * events just like Servlet filters and they are effective immediately.
*
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*
* @see SessionInitializer
*/
-public interface ProtocolAcceptor extends SessionManager
+public interface ProtocolAcceptor extends ProtocolSessionManager
{
/**
* Binds to the specified <code>address</code> and handles incoming
@@ -72,6 +68,4 @@
* Unbinds from the specified <code>address</code>.
*/
void unbind( SocketAddress address );
-
- ProtocolHandlerFilterChain getFilterChain();
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolConnector.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolConnector.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolConnector.java Thu Apr 28 04:16:55 2005
@@ -22,7 +22,6 @@
import java.net.SocketAddress;
import org.apache.mina.common.SessionInitializer;
-import org.apache.mina.common.SessionManager;
/**
* Connects to endpoint, communicates with the server, and fires events to
@@ -39,16 +38,13 @@
* Threads connect to endpoint start automatically when
* {@link #connect(SocketAddress, ProtocolProvider)} is invoked, and stop when
* all connection attempts are finished.
- * <p>
- * {@link ProtocolHandlerFilter}s can be added and removed at any time to filter
- * events just like Servlet filters and they are effective immediately.
*
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*
* @see SessionInitializer
*/
-public interface ProtocolConnector extends SessionManager
+public interface ProtocolConnector extends ProtocolSessionManager
{
/**
* Connects to the specified <code>address</code>. If communication starts
@@ -137,6 +133,4 @@
ProtocolSession connect( SocketAddress address, SocketAddress localAddress,
int timeout, ProtocolProvider protocolProvider,
SessionInitializer initializer ) throws IOException;
-
- ProtocolHandlerFilterChain getFilterChain();
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSession.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSession.java Thu Apr 28 04:16:55 2005
@@ -37,6 +37,12 @@
ProtocolHandler getHandler();
/**
+ * Returns the filter chain that only affects this session.
+ */
+ ProtocolHandlerFilterChain getFilterChain();
+
+
+ /**
* Returns the {@link ProtocolEncoder} for this session.
*/
ProtocolEncoder getEncoder();
Added: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionFilterChain.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionFilterChain.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,19 @@
+package org.apache.mina.protocol;
+
+/**
+ * TODO document me
+ */
+public class ProtocolSessionFilterChain extends AbstractProtocolHandlerFilterChain {
+
+ private final ProtocolSessionManagerFilterChain prevChain;
+
+ public ProtocolSessionFilterChain( ProtocolSessionManagerFilterChain prevChain )
+ {
+ this.prevChain = prevChain;
+ }
+
+ protected void doWrite( ProtocolSession session, Object message )
+ {
+ prevChain.filterWrite( session, message );
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Added: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManager.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManager.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManager.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManager.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,18 @@
+package org.apache.mina.protocol;
+
+import org.apache.mina.common.SessionManager;
+
+/**
+ * TODO document me.
+ * <p>
+ * {@link ProtocolHandlerFilter}s can be added and removed at any time to filter
+ * events just like Servlet filters and they are effective immediately.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ *
+ */
+public interface ProtocolSessionManager extends SessionManager {
+ ProtocolHandlerFilterChain getFilterChain();
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManager.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Added: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManagerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManagerFilterChain.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManagerFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManagerFilterChain.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,69 @@
+package org.apache.mina.protocol;
+
+import org.apache.mina.common.IdleStatus;
+
+/**
+ * TODO document me
+ *
+ * @author The Apache Directory Project
+ */
+public abstract class ProtocolSessionManagerFilterChain extends AbstractProtocolHandlerFilterChain {
+
+ private final ProtocolSessionManager manager;
+
+ protected ProtocolSessionManagerFilterChain( ProtocolSessionManager manager )
+ {
+ this.manager = manager;
+ }
+
+ public ProtocolSessionManager getManager()
+ {
+ return manager;
+ }
+
+ protected ProtocolHandlerFilter createTailFilter()
+ {
+ return new ProtocolHandlerFilter()
+ {
+ public void sessionOpened( NextFilter nextFilter, ProtocolSession session )
+ {
+ ( ( ProtocolSessionFilterChain ) session.getFilterChain() ).sessionOpened( session );
+ }
+
+ public void sessionClosed( NextFilter nextFilter, ProtocolSession session )
+ {
+ ( ( ProtocolSessionFilterChain ) session.getFilterChain() ).sessionClosed( session );
+ }
+
+ public void sessionIdle( NextFilter nextFilter, ProtocolSession session,
+ IdleStatus status )
+ {
+ ( ( ProtocolSessionFilterChain ) session.getFilterChain() ).sessionIdle( session, status );
+ }
+
+ public void exceptionCaught( NextFilter nextFilter,
+ ProtocolSession session, Throwable cause )
+ {
+ ( ( ProtocolSessionFilterChain ) session.getFilterChain() ).exceptionCaught( session, cause );
+ }
+
+ public void messageReceived( NextFilter nextFilter, ProtocolSession session,
+ Object message )
+ {
+ ( ( ProtocolSessionFilterChain ) session.getFilterChain() ).messageReceived( session, message );
+ }
+
+ public void messageSent( NextFilter nextFilter, ProtocolSession session,
+ Object message )
+ {
+ ( ( ProtocolSessionFilterChain ) session.getFilterChain() ).messageSent( session, message );
+ }
+
+ public void filterWrite( NextFilter nextFilter,
+ ProtocolSession session, Object message )
+ {
+ nextFilter.filterWrite( session, message );
+ }
+ };
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/protocol/ProtocolSessionManagerFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/io/IoAdapter.java Thu Apr 28 04:16:55 2005
@@ -49,15 +49,16 @@
{
private static final String KEY = "IoAdapter.ProtocolSession";
- final IoProtocolFilterChain filters = new IoProtocolFilterChain();
+ private final IoProtocolSessionManagerFilterChain managerFilterChain;
- IoAdapter()
+ IoAdapter( IoProtocolSessionManagerFilterChain filters )
{
+ this.managerFilterChain = filters;
}
public ProtocolHandlerFilterChain getFilterChain()
{
- return filters;
+ return managerFilterChain;
}
/**
@@ -101,22 +102,22 @@
public void sessionOpened( IoSession session )
{
- filters.sessionOpened( getProtocolSession( session ) );
+ managerFilterChain.sessionOpened( getProtocolSession( session ) );
}
public void sessionClosed( IoSession session )
{
- filters.sessionClosed( getProtocolSession( session ) );
+ managerFilterChain.sessionClosed( getProtocolSession( session ) );
}
public void sessionIdle( IoSession session, IdleStatus status )
{
- filters.sessionIdle( getProtocolSession( session ), status );
+ managerFilterChain.sessionIdle( getProtocolSession( session ), status );
}
public void exceptionCaught( IoSession session, Throwable cause )
{
- filters.exceptionCaught( getProtocolSession( session ), cause );
+ managerFilterChain.exceptionCaught( getProtocolSession( session ), cause );
}
public void dataRead( IoSession session, ByteBuffer in )
@@ -137,7 +138,7 @@
{
do
{
- filters.messageReceived( psession, queue.pop() );
+ managerFilterChain.messageReceived( psession, queue.pop() );
}
while( !queue.isEmpty() );
}
@@ -146,11 +147,11 @@
catch( ProtocolViolationException pve )
{
pve.setBuffer( in );
- filters.exceptionCaught( psession, pve );
+ managerFilterChain.exceptionCaught( psession, pve );
}
catch( Throwable t )
{
- filters.exceptionCaught( psession, t );
+ managerFilterChain.exceptionCaught( psession, t );
}
}
@@ -158,7 +159,7 @@
{
if( marker == null )
return;
- filters.messageSent( getProtocolSession( session ),
+ managerFilterChain.messageSent( getProtocolSession( session ),
marker );
}
@@ -199,7 +200,7 @@
}
catch( Throwable t )
{
- filters.exceptionCaught( psession, t );
+ managerFilterChain.exceptionCaught( psession, t );
}
}
@@ -215,7 +216,8 @@
( IoProtocolSession ) session.getAttribute( KEY );
if( psession == null )
{
- psession = new IoProtocolSession( IoAdapter.this, session, this );
+ psession = new IoProtocolSession(
+ IoAdapter.this.managerFilterChain, session, this );
session.setAttribute( KEY, psession );
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java Thu Apr 28 04:16:55 2005
@@ -29,7 +29,7 @@
{
private final IoAcceptor acceptor;
- private final IoAdapter adapter = new IoAdapter();
+ private final IoAdapter adapter = new IoAdapter( new IoProtocolSessionManagerFilterChain( this ) );
/**
* Creates a new instance with the specified {@link IoAcceptor}.
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolConnector.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolConnector.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolConnector.java Thu Apr 28 04:16:55 2005
@@ -29,7 +29,7 @@
{
private final IoConnector connector;
- private final IoAdapter adapter = new IoAdapter();
+ private final IoAdapter adapter = new IoAdapter( new IoProtocolSessionManagerFilterChain( this ) );
/**
* Creates a new instance with the specified {@link IoConnector}.
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSession.java Thu Apr 28 04:16:55 2005
@@ -13,7 +13,10 @@
import org.apache.mina.protocol.ProtocolDecoder;
import org.apache.mina.protocol.ProtocolEncoder;
import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolHandlerFilterChain;
import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.ProtocolSessionFilterChain;
+import org.apache.mina.protocol.ProtocolSessionManagerFilterChain;
import org.apache.mina.protocol.SimpleProtocolDecoderOutput;
import org.apache.mina.protocol.SimpleProtocolEncoderOutput;
import org.apache.mina.protocol.io.IoAdapter.SessionHandlerAdapter;
@@ -27,7 +30,7 @@
*/
public class IoProtocolSession implements ProtocolSession
{
- private final IoAdapter ioAdapter;
+ private final ProtocolSessionFilterChain filterChain;
final IoSession session;
@@ -43,10 +46,10 @@
final SimpleProtocolDecoderOutput decOut;
- IoProtocolSession( IoAdapter ioAdapter, IoSession session,
- SessionHandlerAdapter shAdapter )
+ IoProtocolSession( ProtocolSessionManagerFilterChain managerFilterChain,
+ IoSession session, SessionHandlerAdapter shAdapter )
{
- this.ioAdapter = ioAdapter;
+ this.filterChain = new ProtocolSessionFilterChain( managerFilterChain );
this.session = session;
this.shAdapter = shAdapter;
this.encoder = shAdapter.codecFactory.newEncoder();
@@ -62,6 +65,11 @@
{
return session;
}
+
+ public ProtocolHandlerFilterChain getFilterChain()
+ {
+ return filterChain;
+ }
public ProtocolHandler getHandler()
{
@@ -120,7 +128,7 @@
public void write( Object message )
{
- this.ioAdapter.filters.filterWrite( this, message );
+ filterChain.filterWrite( this, message );
}
public TransportType getTransportType()
Added: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSessionManagerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSessionManagerFilterChain.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSessionManagerFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSessionManagerFilterChain.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,26 @@
+package org.apache.mina.protocol.io;
+
+import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.ProtocolSessionManager;
+import org.apache.mina.protocol.ProtocolSessionManagerFilterChain;
+import org.apache.mina.util.Queue;
+
+class IoProtocolSessionManagerFilterChain extends ProtocolSessionManagerFilterChain {
+
+ IoProtocolSessionManagerFilterChain( ProtocolSessionManager manager )
+ {
+ super( manager );
+ }
+
+ protected void doWrite( ProtocolSession session, Object message )
+ {
+ IoProtocolSession s = ( IoProtocolSession ) session;
+ Queue writeQueue = s.writeQueue;
+ synchronized( writeQueue )
+ {
+ writeQueue.push( message );
+ }
+
+ s.shAdapter.doWrite( s.session );
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/protocol/io/IoProtocolSessionManagerFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java Thu Apr 28 04:16:55 2005
@@ -26,14 +26,15 @@
{
static final Map boundHandlers = new HashMap();
- private final VmPipeFilterChain filters = new VmPipeFilterChain();
+ private final VmPipeSessionManagerFilterChain filterChain =
+ new VmPipeSessionManagerFilterChain( this );
/**
* Creates a new instance.
*/
public VmPipeAcceptor()
{
- filters.addLast( "VMPipe", new VmPipeFilter() );
+ filterChain.addFirst( "VMPipe", new VmPipeFilter() );
}
public void bind( SocketAddress address, ProtocolProvider protocolProvider ) throws IOException
@@ -66,7 +67,7 @@
boundHandlers.put( address,
new Entry( this,
( VmPipeAddress ) address,
- filters,
+ filterChain,
protocolProvider.getHandler(),
initializer ) );
}
@@ -85,7 +86,7 @@
public ProtocolHandlerFilterChain getFilterChain()
{
- return filters;
+ return filterChain;
}
static class Entry
@@ -94,7 +95,7 @@
final VmPipeAddress address;
- final VmPipeFilterChain filters;
+ final VmPipeSessionManagerFilterChain managerFilterChain;
final ProtocolHandler handler;
@@ -102,13 +103,13 @@
private Entry( VmPipeAcceptor acceptor,
VmPipeAddress address,
- VmPipeFilterChain filters,
+ VmPipeSessionManagerFilterChain managerFilterChain,
ProtocolHandler handler,
SessionInitializer initializer )
{
this.acceptor = acceptor;
this.address = address;
- this.filters = filters;
+ this.managerFilterChain = managerFilterChain;
this.handler = handler;
this.initializer = initializer;
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java Thu Apr 28 04:16:55 2005
@@ -23,19 +23,20 @@
*/
public class VmPipeConnector extends BaseSessionManager implements ProtocolConnector
{
- private final VmPipeFilterChain filters = new VmPipeFilterChain();
+ private final VmPipeSessionManagerFilterChain filterChain =
+ new VmPipeSessionManagerFilterChain( this );
/**
* Creates a new instance.
*/
public VmPipeConnector()
{
- filters.addLast( "VMPipe", new VmPipeFilter() );
+ filterChain.addFirst( "VMPipe", new VmPipeFilter() );
}
public ProtocolHandlerFilterChain getFilterChain()
{
- return filters;
+ return filterChain;
}
public ProtocolSession connect( SocketAddress address, ProtocolProvider protocolProvider ) throws IOException
@@ -70,13 +71,6 @@
public ProtocolSession connect( SocketAddress address, SocketAddress localAddress, int timeout, ProtocolProvider protocolProvider, SessionInitializer initializer ) throws IOException
{
- return connect( address, localAddress, timeout, protocolProvider, initializer );
- }
-
- public ProtocolSession connect( SocketAddress address,
- ProtocolProvider protocolProvider,
- SessionInitializer initializer ) throws IOException
- {
if( address == null )
throw new NullPointerException( "address" );
if( protocolProvider == null )
@@ -96,12 +90,19 @@
VmPipeSession session = new VmPipeSession( new Object(), // lock
AnonymousVmPipeAddress.INSTANCE,
- filters,
+ filterChain,
protocolProvider.getHandler(),
initializer,
entry );
VmPipeIdleStatusChecker.INSTANCE.addSession( session );
return session;
+ }
+
+ public ProtocolSession connect( SocketAddress address,
+ ProtocolProvider protocolProvider,
+ SessionInitializer initializer ) throws IOException
+ {
+ return connect( address, null, Integer.MAX_VALUE, protocolProvider, initializer);
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java Thu Apr 28 04:16:55 2005
@@ -16,20 +16,20 @@
*/
class VmPipeFilter extends ProtocolHandlerFilterAdapter
{
- public void messageReceived( ProtocolHandler nextHandler,
+ public void messageReceived( NextFilter nextFilter,
ProtocolSession session, Object message )
{
VmPipeSession vps = ( VmPipeSession ) session;
vps.setIdle( IdleStatus.BOTH_IDLE, false );
vps.setIdle( IdleStatus.READER_IDLE, false );
- vps.increaseReadBytes( 0 );
+ vps.increaseReadBytes( 1 );
// fire messageSent event first
- vps.remoteFilters.messageSent( vps.remoteSession, message );
+ vps.remoteSession.getManagerFilterChain().messageSent( vps.remoteSession, message );
// and then messageReceived
- nextHandler.messageReceived( session, message );
+ nextFilter.messageReceived( session, message );
}
public void messageSent( ProtocolHandler nextHandler,
@@ -38,7 +38,7 @@
VmPipeSession vps = ( VmPipeSession ) session;
vps.setIdle( IdleStatus.BOTH_IDLE, false );
vps.setIdle( IdleStatus.WRITER_IDLE, false );
- vps.increaseWrittenBytes( 0 );
+ vps.increaseWrittenBytes( 1 );
nextHandler.messageSent( session, message );
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java Thu Apr 28 04:16:55 2005
@@ -82,7 +82,7 @@
idleTime > 0L
&& ( currentTime - session.getLastIoTime() ) > idleTime );
if( session.isIdle( IdleStatus.BOTH_IDLE ) )
- session.localFilters
+ session.getManagerFilterChain()
.sessionIdle( session,
IdleStatus.BOTH_IDLE );
}
@@ -95,7 +95,7 @@
idleTime > 0L
&& ( currentTime - session.getLastReadTime() ) > idleTime );
if( session.isIdle( IdleStatus.READER_IDLE ) )
- session.localFilters
+ session.getManagerFilterChain()
.sessionIdle( session,
IdleStatus.READER_IDLE );
}
@@ -108,7 +108,7 @@
idleTime > 0L
&& ( currentTime - session.getLastWriteTime() ) > idleTime );
if( session.isIdle( IdleStatus.WRITER_IDLE ) )
- session.localFilters
+ session.getManagerFilterChain()
.sessionIdle( session,
IdleStatus.WRITER_IDLE );
}
Modified: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java Thu Apr 28 04:16:55 2005
@@ -13,7 +13,9 @@
import org.apache.mina.protocol.ProtocolDecoder;
import org.apache.mina.protocol.ProtocolEncoder;
import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolHandlerFilterChain;
import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.ProtocolSessionFilterChain;
import org.apache.mina.protocol.vmpipe.VmPipeAcceptor.Entry;
/**
@@ -28,13 +30,13 @@
private final SocketAddress remoteAddress;
- private final ProtocolHandler localHandler;
+ private final ProtocolHandler handler;
private final VmPipeSessionConfig config = new VmPipeSessionConfig();
- final VmPipeFilterChain localFilters;
-
- final VmPipeFilterChain remoteFilters;
+ private final ProtocolSessionFilterChain filterChain;
+
+ private final VmPipeSessionManagerFilterChain managerFilterChain;
final VmPipeSession remoteSession;
@@ -46,19 +48,19 @@
* Constructor for client-side session.
*/
VmPipeSession( Object lock, SocketAddress localAddress,
- VmPipeFilterChain localFilters,
- ProtocolHandler localHandler,
+ VmPipeSessionManagerFilterChain managerFilterChain,
+ ProtocolHandler handler,
SessionInitializer initializer,
Entry remoteEntry ) throws IOException
{
this.lock = lock;
this.localAddress = localAddress;
- this.localHandler = localHandler;
- this.localFilters = localFilters;
this.remoteAddress = remoteEntry.address;
- this.remoteFilters = remoteEntry.filters;
+ this.handler = handler;
+ this.filterChain = new ProtocolSessionFilterChain( managerFilterChain );
+ this.managerFilterChain = managerFilterChain;
- remoteSession = new VmPipeSession( this, remoteEntry.handler );
+ remoteSession = new VmPipeSession( this, remoteEntry );
// initialize remote session
try
@@ -76,28 +78,37 @@
// initialize client session
initializer.initializeSession( this );
- remoteEntry.filters.sessionOpened( remoteSession );
- localFilters.sessionOpened( this );
+ remoteEntry.managerFilterChain.sessionOpened( remoteSession );
+ managerFilterChain.sessionOpened( this );
}
/**
* Constructor for server-side session.
*/
- VmPipeSession( VmPipeSession remoteSession, ProtocolHandler localHandler )
+ VmPipeSession( VmPipeSession remoteSession, Entry entry )
{
this.lock = remoteSession.lock;
this.localAddress = remoteSession.remoteAddress;
- this.localHandler = localHandler;
- this.localFilters = remoteSession.remoteFilters;
this.remoteAddress = remoteSession.localAddress;
- this.remoteFilters = remoteSession.localFilters;
-
+ this.handler = entry.handler;
+ this.managerFilterChain = entry.managerFilterChain;
+ this.filterChain = new ProtocolSessionFilterChain( entry.managerFilterChain );
this.remoteSession = remoteSession;
}
+
+ VmPipeSessionManagerFilterChain getManagerFilterChain()
+ {
+ return managerFilterChain;
+ }
+
+ public ProtocolHandlerFilterChain getFilterChain()
+ {
+ return filterChain;
+ }
public ProtocolHandler getHandler()
{
- return localHandler;
+ return handler;
}
public ProtocolEncoder getEncoder()
@@ -118,14 +129,14 @@
return;
closed = remoteSession.closed = true;
- localFilters.sessionClosed( this );
- remoteFilters.sessionClosed( remoteSession );
+ managerFilterChain.sessionClosed( this );
+ remoteSession.getManagerFilterChain().sessionClosed( remoteSession );
}
}
public void write( Object message )
{
- localFilters.filterWrite( this, message );
+ this.filterChain.filterWrite( this, message );
}
public TransportType getTransportType()
Added: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionManagerFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionManagerFilterChain.java?rev=165128&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionManagerFilterChain.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionManagerFilterChain.java Thu Apr 28 04:16:55 2005
@@ -0,0 +1,25 @@
+package org.apache.mina.protocol.vmpipe;
+
+import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.ProtocolSessionManager;
+import org.apache.mina.protocol.ProtocolSessionManagerFilterChain;
+
+class VmPipeSessionManagerFilterChain extends ProtocolSessionManagerFilterChain {
+
+ VmPipeSessionManagerFilterChain( ProtocolSessionManager manager )
+ {
+ super( manager );
+ }
+
+ protected void doWrite( ProtocolSession session, Object message )
+ {
+ VmPipeSession s = ( VmPipeSession ) session;
+
+ synchronized( s.lock )
+ {
+ if( s.closed )
+ throw new IllegalStateException( "Session is closed." );
+ s.remoteSession.getManagerFilterChain().messageReceived( s.remoteSession, message );
+ }
+ }
+}
Propchange: directory/network/trunk/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionManagerFilterChain.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: directory/network/trunk/src/test/org/apache/mina/io/IoHandlerFilterChainTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/io/IoHandlerFilterChainTest.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/io/IoHandlerFilterChainTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/io/IoHandlerFilterChainTest.java Thu Apr 28 04:16:55 2005
@@ -172,6 +172,11 @@
{
return null;
}
+
+ public IoHandlerFilterChain getFilterChain()
+ {
+ return null;
+ }
}
private class TestFilter implements IoHandlerFilter
Modified: directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/protocol/ProtocolHandlerFilterChainTest.java Thu Apr 28 04:16:55 2005
@@ -171,6 +171,11 @@
public SocketAddress getLocalAddress() {
return null;
}
+
+ public ProtocolHandlerFilterChain getFilterChain()
+ {
+ return null;
+ }
}
private class TestFilter implements ProtocolHandlerFilter
Modified: directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java?rev=165128&r1=165127&r2=165128&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/protocol/codec/CumulativeProtocolDecoderTest.java Thu Apr 28 04:16:55 2005
@@ -33,6 +33,7 @@
import org.apache.mina.protocol.ProtocolDecoderOutput;
import org.apache.mina.protocol.ProtocolEncoder;
import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolHandlerFilterChain;
import org.apache.mina.protocol.ProtocolSession;
import org.apache.mina.protocol.ProtocolViolationException;
@@ -209,6 +210,11 @@
}
public SocketAddress getLocalAddress() {
+ return null;
+ }
+
+ public ProtocolHandlerFilterChain getFilterChain()
+ {
return null;
}
}