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 2004/12/29 08:55:12 UTC

svn commit: r123602 - in incubator/directory/network/trunk/mina/src: examples/org/apache/mina/examples/echoserver examples/org/apache/mina/examples/netcat examples/org/apache/mina/examples/reverser examples/org/apache/mina/examples/vmpipe java/org/apache/mina/common 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/vmpipe java/org/apache/mina/registry

Author: trustin
Date: Tue Dec 28 23:55:11 2004
New Revision: 123602

URL: http://svn.apache.org/viewcvs?view=rev&rev=123602
Log:
 * Added: in-VM pipe transport type support
 * Fixed: writtenBytes and readBytes properties were not updated.
 * Fixed: idle status of SocketSessions are not cleared.
 * Reformatted source code
Added:
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/Main.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisBall.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisPlayer.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/AnonymousVmPipeAddress.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAddress.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionConfig.java   (contents, props changed)
Modified:
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/Main.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/Main.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/NetCatProtocolHandler.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/Main.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolHandler.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolProvider.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/TransportType.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Acceptor.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/DefaultExceptionMonitor.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/ExceptionMonitor.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolDecoderOutput.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolEncoderOutput.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/registry/ServiceRegistry.java

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/EchoProtocolHandler.java	Tue Dec 28 23:55:11 2004
@@ -59,7 +59,7 @@
 
     public void dataRead( IoSession session, ByteBuffer rb )
     {
-    	// Write the received data back to remote peer
+        // Write the received data back to remote peer
         ByteBuffer wb = ByteBuffer.allocate( rb.remaining() );
         wb.put( rb );
         wb.flip();

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/Main.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/Main.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/Main.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/Main.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/Main.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/Main.java	Tue Dec 28 23:55:11 2004
@@ -40,8 +40,8 @@
         // Create a I/O thread pool filter 
         IoThreadPoolFilter threadPoolFilter = new IoThreadPoolFilter();
         threadPoolFilter.start(); // and start it
-        
-    	// Create a TCP/IP acceptor
+
+        // Create a TCP/IP acceptor
         Acceptor acceptor = new SocketAcceptor();
 
         // Add thread pool filter
@@ -54,10 +54,10 @@
 
         // Create a UDP/IP acceptor
         Acceptor datagramAcceptor = new DatagramAcceptor();
-        
+
         // Add thread pool filter
         datagramAcceptor.addFilter( Integer.MAX_VALUE, threadPoolFilter );
-        
+
         // Bind
         datagramAcceptor.bind( new InetSocketAddress( PORT ),
                                new EchoProtocolHandler() );

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/Main.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/Main.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/Main.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/Main.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/Main.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/Main.java	Tue Dec 28 23:55:11 2004
@@ -43,11 +43,11 @@
 
         // Create TCP/IP connector.
         SocketConnector connector = new SocketConnector();
-        
+
         // 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() );
-        
+
         // Start communication.
         connector.connect( new InetSocketAddress( args[ 0 ], Integer
                 .parseInt( args[ 1 ] ) ), 60, new NetCatProtocolHandler() );

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/NetCatProtocolHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/NetCatProtocolHandler.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/NetCatProtocolHandler.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/NetCatProtocolHandler.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/NetCatProtocolHandler.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/netcat/NetCatProtocolHandler.java	Tue Dec 28 23:55:11 2004
@@ -50,8 +50,8 @@
     public void sessionIdle( IoSession session, IdleStatus status )
     {
         // Close the connection if reader is idle.
-        if ( status == IdleStatus.READER_IDLE )
-    	    session.close();
+        if( status == IdleStatus.READER_IDLE )
+            session.close();
     }
 
     public void dataRead( IoSession session, ByteBuffer buf )

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/Main.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/Main.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/Main.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/Main.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/Main.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/Main.java	Tue Dec 28 23:55:11 2004
@@ -39,19 +39,19 @@
 
     public static void main( String[] args ) throws Exception
     {
-    	// Create I/O and Protocol thread pool filter.
-    	// I/O thread pool performs encoding and decoding of messages.
-    	// Protocol thread pool performs actual protocol flow.
+        // Create I/O and Protocol thread pool filter.
+        // I/O thread pool performs encoding and decoding of messages.
+        // Protocol thread pool performs actual protocol flow.
         IoThreadPoolFilter ioThreadPoolFilter = new IoThreadPoolFilter();
         ProtocolThreadPoolFilter protocolThreadPoolFilter = new ProtocolThreadPoolFilter();
-        
+
         // and start both.
         ioThreadPoolFilter.start();
         protocolThreadPoolFilter.start();
 
         // Create TCP/IP acceptor.
         Acceptor acceptor = new SocketAcceptor();
-        
+
         // Create an I/O adapter to adapt ProtocolProvider to IoHandler.
         IoAdapter ioAdapter = new IoAdapter();
 

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolHandler.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolHandler.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolHandler.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolHandler.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolHandler.java	Tue Dec 28 23:55:11 2004
@@ -51,7 +51,7 @@
     {
         System.out.println( session.getRemoteAddress() + " EXCEPTION" );
         cause.printStackTrace( System.out );
-        
+
         // Close connection when unexpected exception is caught.
         session.close();
     }
@@ -74,7 +74,7 @@
 
     public void messageSent( ProtocolSession session, Object message )
     {
-    	// Invoked the reversed string is actually written to socket channel.
+        // Invoked the reversed string is actually written to socket channel.
         System.out.println( session.getRemoteAddress() + " SENT: " + message );
     }
 }

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolProvider.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolProvider.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolProvider.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolProvider.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolProvider.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/ReverseProtocolProvider.java	Tue Dec 28 23:55:11 2004
@@ -41,13 +41,13 @@
     {
         public ProtocolEncoder newEncoder()
         {
-        	// Create a new encoder.
+            // Create a new encoder.
             return new TextLineEncoder();
         }
 
         public ProtocolDecoder newDecoder()
         {
-        	// Create a new decoder.
+            // Create a new decoder.
             return new TextLineDecoder();
         }
     };

Added: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/Main.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/Main.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/Main.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,43 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.examples.vmpipe;
+
+import java.io.IOException;
+
+import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.filter.ProtocolThreadPoolFilter;
+import org.apache.mina.protocol.vmpipe.VmPipeAcceptor;
+import org.apache.mina.protocol.vmpipe.VmPipeAddress;
+import org.apache.mina.protocol.vmpipe.VmPipeConnector;
+
+/**
+ * TODO Document me.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class Main
+{
+
+    public static void main( String[] args ) throws IOException
+    {
+        VmPipeAddress address = new VmPipeAddress( 8080 );
+
+        // Prepare thread pool
+        ProtocolThreadPoolFilter threadPool = new ProtocolThreadPoolFilter();
+        threadPool.start();
+
+        // set up server
+        VmPipeAcceptor acceptor = new VmPipeAcceptor();
+        acceptor.bind( address, new TennisPlayer() );
+        acceptor.addFilter( 0, threadPool );
+
+        // send ping message
+        VmPipeConnector connector = new VmPipeConnector();
+        ProtocolSession session = connector.connect( address,
+                                                     new TennisPlayer() );
+
+        session.write( new TennisBall( 10 ) );
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisBall.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisBall.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisBall.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,50 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.examples.vmpipe;
+
+/**
+ * TODO Document me.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class TennisBall
+{
+    private final boolean ping;
+
+    private final int ttl;
+
+    public TennisBall( int ttl )
+    {
+        this( ttl, true );
+    }
+
+    private TennisBall( int ttl, boolean ping )
+    {
+        this.ttl = ttl;
+        this.ping = ping;
+    }
+
+    public int getTTL()
+    {
+        return ttl;
+    }
+
+    public TennisBall stroke()
+    {
+        return new TennisBall( ttl - 1, !ping );
+    }
+
+    public String toString()
+    {
+        if( ping )
+        {
+            return "PING (" + ttl + ")";
+        }
+        else
+        {
+            return "PONG (" + ttl + ")";
+        }
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisPlayer.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisPlayer.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/vmpipe/TennisPlayer.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,52 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.examples.vmpipe;
+
+import org.apache.mina.protocol.ProtocolHandlerAdapter;
+import org.apache.mina.protocol.ProtocolSession;
+
+/**
+ * TODO Document me.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class TennisPlayer extends ProtocolHandlerAdapter
+{
+    private static int nextId = 0;
+
+    private final int id = nextId++;
+
+    public void sessionOpened( ProtocolSession session )
+    {
+        System.out.println( "Player-" + id + ": READY" );
+    }
+
+    public void sessionClosed( ProtocolSession session )
+    {
+        System.out.println( "Player-" + id + ": QUIT" );
+    }
+
+    public void messageReceived( ProtocolSession session, Object message )
+    {
+        System.out.println( "Player-" + id + ": RCVD " + message );
+
+        TennisBall ball = ( TennisBall ) message;
+        ball = ball.stroke();
+        if( ball.getTTL() > 0 )
+        {
+            session.write( ball );
+        }
+        else
+        {
+            System.out.println( "Player-" + id + ": LOSE" );
+            session.close();
+        }
+    }
+
+    public void messageSent( ProtocolSession session, Object message )
+    {
+        System.out.println( "Player-" + id + ": SENT " + message );
+    }
+}
\ No newline at end of file

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/ByteBuffer.java	Tue Dec 28 23:55:11 2004
@@ -491,12 +491,12 @@
     {
         return buf.asDoubleBuffer();
     }
-    
+
     /**
      * Returns hexdump of this buffer.
      */
     public String getHexDump()
     {
-        return ByteBufferHexDumper.getHexdump(this);
+        return ByteBufferHexDumper.getHexdump( this );
     }
 }

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/TransportType.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/TransportType.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/TransportType.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/TransportType.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/TransportType.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/common/TransportType.java	Tue Dec 28 23:55:11 2004
@@ -26,20 +26,27 @@
  */
 public class TransportType
 {
-	/**
-	 * Transport type: TCP/IP (<code>SocketChannel</code>)
-	 */
+    /**
+     * Transport type: TCP/IP (<code>SocketChannel</code>)
+     */
     public static final TransportType SOCKET = new TransportType( "SOCKET",
                                                                   false );
 
-	/**
-	 * Transport type: UDP/IP (<code>DatagramChannel</code>)
-	 */
-    public static final TransportType DATAGRAM = new TransportType( "DATAGRAM",
+    /**
+     * Transport type: UDP/IP (<code>DatagramChannel</code>)
+     */
+    public static final TransportType DATAGRAM = new TransportType(
+                                                                    "DATAGRAM",
                                                                     true );
 
+    /**
+     * Transport type: VM pipe (direct message exchange)
+     */
+    public static final TransportType VM_PIPE = new TransportType( "VM_PIPE",
+                                                                   false );
+
     private final String strVal;
-    
+
     private final boolean stateless;
 
     /**
@@ -57,9 +64,9 @@
      */
     public boolean isStateless()
     {
-    	return stateless;
+        return stateless;
     }
-    
+
     public String toString()
     {
         return strVal;

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Acceptor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Acceptor.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Acceptor.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Acceptor.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Acceptor.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Acceptor.java	Tue Dec 28 23:55:11 2004
@@ -21,7 +21,6 @@
 import java.io.IOException;
 import java.net.SocketAddress;
 
-
 /**
  * Accepts incoming connection, communicates with clients, and fires events to
  * {@link IoHandler}s.

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java	Tue Dec 28 23:55:11 2004
@@ -21,7 +21,6 @@
 import java.io.IOException;
 import java.net.SocketAddress;
 
-
 /**
  * Connects to endpoint, communicates with the server, and fires events to
  * {@link IoHandler}s.

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/DefaultExceptionMonitor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/DefaultExceptionMonitor.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/DefaultExceptionMonitor.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/DefaultExceptionMonitor.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/DefaultExceptionMonitor.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/DefaultExceptionMonitor.java	Tue Dec 28 23:55:11 2004
@@ -22,7 +22,6 @@
 import java.text.DateFormat;
 import java.util.Date;
 
-
 /**
  * A default {@link ExceptionMonitor} implementation.  It logs uncaught
  * exceptions using <a href="http://jakarta.apache.org/commons/logging/">Apache

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/ExceptionMonitor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/ExceptionMonitor.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/ExceptionMonitor.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/ExceptionMonitor.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/ExceptionMonitor.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/ExceptionMonitor.java	Tue Dec 28 23:55:11 2004
@@ -18,7 +18,6 @@
  */
 package org.apache.mina.io;
 
-
 /**
  * Monitors uncaught exceptions.  {@link #exceptionCaught(Object, Throwable)} is
  * invoked when there are any uncaught exceptions.

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java	Tue Dec 28 23:55:11 2004
@@ -258,6 +258,7 @@
                 newBuf.put( readBuf );
                 newBuf.flip();
 
+                session.increaseReadBytes( newBuf.remaining() );
                 filterManager.fireDataRead( session, newBuf );
             }
         }
@@ -353,6 +354,8 @@
                     writeBufferQueue.pop();
                     writeMarkerQueue.pop();
                 }
+
+                session.increaseWrittenBytes( writtenBytes );
                 session.getFilterManager().fireDataWritten( session, marker );
             }
         }

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketIoProcessor.java	Tue Dec 28 23:55:11 2004
@@ -250,7 +250,8 @@
             }
 
             session.increaseReadBytes( readBytes );
-
+            session.setIdle( IdleStatus.BOTH_IDLE, false );
+            session.setIdle( IdleStatus.READER_IDLE, false );
             if( ret >= 0 )
             {
                 if( readBytes > 0 )
@@ -337,7 +338,7 @@
         if( idleTime > 0 && !session.isIdle( status )
             && ( currentTime - lastIoTime ) >= idleTime )
         {
-            session.setIdle( status );
+            session.setIdle( status, true );
             session.getFilterManager().fireSessionIdle( session, status );
         }
     }
@@ -419,9 +420,10 @@
                 continue;
             }
 
+            int writtenBytes = 0;
             try
             {
-                ch.write( buf.buf() );
+                writtenBytes = ch.write( buf.buf() );
             }
             finally
             {
@@ -437,6 +439,13 @@
                 {
                     key.interestOps( key.interestOps()
                                      & ( ~SelectionKey.OP_WRITE ) );
+                }
+
+                if( writtenBytes > 0 )
+                {
+                    session.increaseWrittenBytes( writtenBytes );
+                    session.setIdle( IdleStatus.BOTH_IDLE, false );
+                    session.setIdle( IdleStatus.WRITER_IDLE, false );
                 }
             }
         }

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketSession.java	Tue Dec 28 23:55:11 2004
@@ -240,14 +240,14 @@
         throw new IllegalArgumentException( "Unknown idle status: " + status );
     }
 
-    void setIdle( IdleStatus status )
+    void setIdle( IdleStatus status, boolean value )
     {
         if( status == IdleStatus.BOTH_IDLE )
-            idleForBoth = true;
+            idleForBoth = value;
         else if( status == IdleStatus.READER_IDLE )
-            idleForRead = true;
+            idleForRead = value;
         else if( status == IdleStatus.WRITER_IDLE )
-            idleForWrite = true;
+            idleForWrite = value;
         else
             throw new IllegalArgumentException( "Unknown idle status: "
                                                 + status );

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java	Tue Dec 28 23:55:11 2004
@@ -167,10 +167,10 @@
                 }
             }
             catch( ProtocolViolationException pve )
-			{
-            	pve.setBuffer(in);
-            	filterManager.fireExceptionCaught( psession, pve );
-			}
+            {
+                pve.setBuffer( in );
+                filterManager.fireExceptionCaught( psession, pve );
+            }
             catch( Throwable t )
             {
                 filterManager.fireExceptionCaught( psession, t );
@@ -338,15 +338,15 @@
         {
             return session.getLocalAddress();
         }
-        
+
         public long getReadBytes()
         {
-        	return session.getReadBytes();
+            return session.getReadBytes();
         }
 
         public long getWrittenBytes()
         {
-        	return session.getWrittenBytes();
+            return session.getWrittenBytes();
         }
 
         public long getLastIoTime()

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolDecoderOutput.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolDecoderOutput.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolDecoderOutput.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolDecoderOutput.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolDecoderOutput.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolDecoderOutput.java	Tue Dec 28 23:55:11 2004
@@ -28,12 +28,12 @@
  */
 public interface ProtocolDecoderOutput
 {
-	/**
+    /**
      * Callback for {@link ProtocolDecoder} to generate decoded messages.
      * {@link ProtocolDecoder} must call {@link #write(Object)} for each
      * decoded messages.
      * 
      * @param message the decoded message
-	 */
+     */
     void write( Object message );
 }

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolEncoderOutput.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolEncoderOutput.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolEncoderOutput.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolEncoderOutput.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolEncoderOutput.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolEncoderOutput.java	Tue Dec 28 23:55:11 2004
@@ -30,12 +30,12 @@
  */
 public interface ProtocolEncoderOutput
 {
-	/**
-	 * Callback for {@link ProtocolEncoder} to generate encoded
-	 * {@link ByteBuffer}s. {@link ProtocolEncoder} must call
-	 * {@link #write(ByteBuffer)} for each decoded messages.
-	 * 
-	 * @param buf the buffer which contains encoded data
-	 */
+    /**
+     * Callback for {@link ProtocolEncoder} to generate encoded
+     * {@link ByteBuffer}s. {@link ProtocolEncoder} must call
+     * {@link #write(ByteBuffer)} for each decoded messages.
+     * 
+     * @param buf the buffer which contains encoded data
+     */
     void write( ByteBuffer buf );
 }

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolSession.java	Tue Dec 28 23:55:11 2004
@@ -38,9 +38,9 @@
  */
 public interface ProtocolSession
 {
-	/**
-	 * Returns the {@link ProtocolHandler} which handles this session.
-	 */
+    /**
+     * Returns the {@link ProtocolHandler} which handles this session.
+     */
     ProtocolHandler getHandler();
 
     /**

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/AnonymousVmPipeAddress.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/AnonymousVmPipeAddress.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/AnonymousVmPipeAddress.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,48 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.vmpipe;
+
+import java.net.SocketAddress;
+
+/**
+ * A {@link SocketAddress} which represents anonymous in-VM pipe port.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+class AnonymousVmPipeAddress extends SocketAddress implements Comparable
+{
+    static final AnonymousVmPipeAddress INSTANCE = new AnonymousVmPipeAddress();
+
+    /**
+     * Creates a new instance with the specifid port number.
+     */
+    private AnonymousVmPipeAddress()
+    {
+    }
+
+    public int hashCode()
+    {
+        return 1432482932;
+    }
+
+    public boolean equals( Object o )
+    {
+        if( o == null )
+            return false;
+        if( this == o )
+            return true;
+        return o instanceof AnonymousVmPipeAddress;
+    }
+
+    public int compareTo( Object o )
+    {
+        return this.hashCode() - ( ( AnonymousVmPipeAddress ) o ).hashCode();
+    }
+
+    public String toString()
+    {
+        return "vm:anonymous";
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,97 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.vmpipe;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolHandlerFilter;
+import org.apache.mina.util.ProtocolHandlerFilterManager;
+
+/**
+ * Binds the specified {@link ProtocolHandler} to the specified
+ * {@link VmPipeAddress}.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class VmPipeAcceptor
+{
+    static final Map boundHandlers = new HashMap();
+
+    private final ProtocolHandlerFilterManager filterManager = new ProtocolHandlerFilterManager();
+
+    public VmPipeAcceptor()
+    {
+        filterManager.addFilter( Integer.MIN_VALUE, new VmPipeFilter() );
+    }
+
+    public void bind( VmPipeAddress address, ProtocolHandler defaultHandler )
+            throws IOException
+    {
+        if( address == null )
+            throw new NullPointerException( "address" );
+        if( defaultHandler == null )
+            throw new NullPointerException( "defaultHandler" );
+
+        synchronized( boundHandlers )
+        {
+            if( boundHandlers.containsKey( address ) )
+            {
+                throw new IOException( "Address already bound: " + address );
+            }
+
+            boundHandlers.put( address, new Entry( address, filterManager,
+                                                   defaultHandler ) );
+        }
+    }
+
+    public void unbind( VmPipeAddress address )
+    {
+        if( address == null )
+            throw new NullPointerException( "address" );
+
+        synchronized( boundHandlers )
+        {
+            boundHandlers.remove( address );
+        }
+    }
+
+    /**
+     * Adds the specified filter with the specified priority.  Greater priority
+     * value, higher priority, and thus evaluated more earlier.
+     */
+    public void addFilter( int priority, ProtocolHandlerFilter filter )
+    {
+        filterManager.addFilter( priority, filter );
+    }
+
+    /**
+     * Removes the specified filter from the filter list.
+     */
+    public void removeFilter( ProtocolHandlerFilter filter )
+    {
+        filterManager.removeFilter( filter );
+    }
+
+    static class Entry
+    {
+        final VmPipeAddress address;
+
+        final ProtocolHandlerFilterManager filterManager;
+
+        final ProtocolHandler handler;
+
+        private Entry( VmPipeAddress address,
+                      ProtocolHandlerFilterManager filterManager,
+                      ProtocolHandler handler )
+        {
+            this.address = address;
+            this.filterManager = filterManager;
+            this.handler = handler;
+        }
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAddress.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAddress.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAddress.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,63 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.vmpipe;
+
+import java.net.SocketAddress;
+
+/**
+ * A {@link SocketAddress} which represents in-VM pipe port number.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class VmPipeAddress extends SocketAddress implements Comparable
+{
+    private final int port;
+
+    /**
+     * Creates a new instance with the specifid port number.
+     */
+    public VmPipeAddress( int port )
+    {
+        this.port = port;
+    }
+
+    /**
+     * Returns the port number.
+     */
+    public int getPort()
+    {
+        return port;
+    }
+
+    public int hashCode()
+    {
+        return port;
+    }
+
+    public boolean equals( Object o )
+    {
+        if( o == null )
+            return false;
+        if( this == o )
+            return true;
+        if( o instanceof VmPipeAddress )
+        {
+            VmPipeAddress that = ( VmPipeAddress ) o;
+            return this.port == that.port;
+        }
+
+        return false;
+    }
+
+    public int compareTo( Object o )
+    {
+        return this.port - ( ( VmPipeAddress ) o ).port;
+    }
+
+    public String toString()
+    {
+        return "vm:" + port;
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,53 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.vmpipe;
+
+import java.io.IOException;
+
+import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.vmpipe.VmPipeAcceptor.Entry;
+import org.apache.mina.util.ProtocolHandlerFilterManager;
+
+/**
+ * Connects to {@link ProtocolHandler}s which is bound on the specified
+ * {@link VmPipeAddress}.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class VmPipeConnector
+{
+    private final ProtocolHandlerFilterManager filterManager = new ProtocolHandlerFilterManager();
+
+    public VmPipeConnector()
+    {
+        filterManager.addFilter( Integer.MIN_VALUE, new VmPipeFilter() );
+    }
+
+    public ProtocolSession connect( VmPipeAddress address,
+                                   ProtocolHandler defaultHandler )
+            throws IOException
+    {
+        if( address == null )
+            throw new NullPointerException( "address" );
+        if( defaultHandler == null )
+            throw new NullPointerException( "defaultHandler" );
+
+        Entry entry = ( Entry ) VmPipeAcceptor.boundHandlers.get( address );
+        if( entry == null )
+            throw new IOException( "Endpoint unavailable: " + address );
+
+        VmPipeSession session = new VmPipeSession(
+                                                   new Object(), // lock
+                                                   AnonymousVmPipeAddress.INSTANCE,
+                                                   entry.address,
+                                                   filterManager,
+                                                   defaultHandler,
+                                                   entry.filterManager,
+                                                   entry.handler );
+        VmPipeIdleStatusChecker.INSTANCE.addSession( session );
+        return session;
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeFilter.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,52 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.vmpipe;
+
+import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolHandlerFilterAdapter;
+import org.apache.mina.protocol.ProtocolSession;
+
+/**
+ * Sets last(Read|Write)Time for {@link VmPipeSession}s. 
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+class VmPipeFilter extends ProtocolHandlerFilterAdapter
+{
+    public void messageReceived( ProtocolHandler nextHandler,
+                                ProtocolSession session, Object message )
+    {
+        VmPipeSession vps = ( VmPipeSession ) session;
+
+        vps.bothIdle = vps.readerIdle = false;
+        vps.lastReadTime = System.currentTimeMillis();
+
+        // fire messageSent event first
+        vps.remoteFilterManager.fireMessageSent( vps.remoteSession, message );
+
+        // and then messageReceived
+        nextHandler.messageReceived( session, message );
+    }
+
+    public void messageSent( ProtocolHandler nextHandler,
+                            ProtocolSession session, Object message )
+    {
+        VmPipeSession vps = ( VmPipeSession ) session;
+        vps.bothIdle = vps.writerIdle = false;
+        vps.lastWriteTime = System.currentTimeMillis();
+
+        nextHandler.messageSent( session, message );
+    }
+
+    public void sessionClosed( ProtocolHandler nextHandler,
+                              ProtocolSession session )
+    {
+        VmPipeSession vps = ( VmPipeSession ) session;
+        nextHandler.sessionClosed( session );
+
+        if( vps.remoteSession.isConnected() )
+            vps.remoteFilterManager.fireSessionClosed( vps.remoteSession );
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeIdleStatusChecker.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,116 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.vmpipe;
+
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.SessionConfig;
+
+/**
+ * TODO Document me.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+class VmPipeIdleStatusChecker
+{
+    static final VmPipeIdleStatusChecker INSTANCE = new VmPipeIdleStatusChecker();
+
+    private final Map sessions = new IdentityHashMap(); // will use as a set
+
+    private final Worker worker = new Worker();
+
+    private VmPipeIdleStatusChecker()
+    {
+        worker.start();
+    }
+
+    void addSession( VmPipeSession session )
+    {
+        synchronized( sessions )
+        {
+            sessions.put( session, session );
+        }
+    }
+
+    private class Worker extends Thread
+    {
+
+        public void run()
+        {
+            for( ;; )
+            {
+                try
+                {
+                    Thread.sleep( 1000 );
+                }
+                catch( InterruptedException e )
+                {
+                }
+
+                long currentTime = System.currentTimeMillis();
+
+                synchronized( sessions )
+                {
+                    Iterator it = sessions.keySet().iterator();
+                    while( it.hasNext() )
+                    {
+                        VmPipeSession session = ( VmPipeSession ) it.next();
+                        if( !session.isConnected() )
+                        {
+                            it.remove();
+                        }
+                        else
+                        {
+                            long idleTime;
+                            SessionConfig config = session.getConfig();
+
+                            if( !session.bothIdle )
+                            {
+                                idleTime = config
+                                        .getIdleTimeInMillis( IdleStatus.BOTH_IDLE );
+                                session.bothIdle = idleTime > 0L
+                                                   && ( currentTime - session.lastReadTime ) > idleTime;
+                                if( session.bothIdle )
+                                    session.localFilterManager
+                                            .fireSessionIdle(
+                                                              session,
+                                                              IdleStatus.BOTH_IDLE );
+                            }
+
+                            if( !session.readerIdle )
+                            {
+                                idleTime = config
+                                        .getIdleTimeInMillis( IdleStatus.READER_IDLE );
+                                session.readerIdle = idleTime > 0L
+                                                     && ( currentTime - session.lastReadTime ) > idleTime;
+                                if( session.readerIdle )
+                                    session.localFilterManager
+                                            .fireSessionIdle(
+                                                              session,
+                                                              IdleStatus.READER_IDLE );
+                            }
+
+                            if( !session.writerIdle )
+                            {
+                                idleTime = config
+                                        .getIdleTimeInMillis( IdleStatus.WRITER_IDLE );
+                                session.writerIdle = idleTime > 0L
+                                                     && ( currentTime - session.lastReadTime ) > idleTime;
+                                if( session.writerIdle )
+                                    session.localFilterManager
+                                            .fireSessionIdle(
+                                                              session,
+                                                              IdleStatus.WRITER_IDLE );
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSession.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,203 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.vmpipe;
+
+import java.net.SocketAddress;
+
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.SessionConfig;
+import org.apache.mina.common.TransportType;
+import org.apache.mina.protocol.ProtocolDecoder;
+import org.apache.mina.protocol.ProtocolEncoder;
+import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.util.ProtocolHandlerFilterManager;
+
+/**
+ * TODO Document me.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+class VmPipeSession implements ProtocolSession
+{
+    private final Object lock;
+
+    private final SocketAddress localAddress;
+
+    private final SocketAddress remoteAddress;
+
+    private final ProtocolHandler localHandler;
+
+    final ProtocolHandlerFilterManager localFilterManager;
+
+    final ProtocolHandlerFilterManager remoteFilterManager;
+
+    final VmPipeSession remoteSession;
+
+    private final VmPipeSessionConfig config = new VmPipeSessionConfig();
+
+    private Object attachment;
+
+    boolean closed;
+
+    long lastReadTime;
+
+    long lastWriteTime;
+
+    boolean bothIdle;
+
+    boolean readerIdle;
+
+    boolean writerIdle;
+
+    /**
+     * Constructor for client-side session.
+     */
+    VmPipeSession( Object lock, SocketAddress localAddress,
+                  SocketAddress remoteAddress,
+                  ProtocolHandlerFilterManager localFilterManager,
+                  ProtocolHandler localHandler,
+                  ProtocolHandlerFilterManager remoteFilterManager,
+                  ProtocolHandler remoteHandler )
+    {
+        this.lock = lock;
+        this.localAddress = localAddress;
+        this.localHandler = localHandler;
+        this.localFilterManager = localFilterManager;
+        this.remoteAddress = remoteAddress;
+        this.remoteFilterManager = remoteFilterManager;
+
+        remoteSession = new VmPipeSession( this, remoteHandler );
+
+        remoteFilterManager.fireSessionOpened( remoteSession );
+        localFilterManager.fireSessionOpened( this );
+    }
+
+    /**
+     * Constructor for server-side session.
+     */
+    VmPipeSession( VmPipeSession remoteSession, ProtocolHandler localHandler )
+    {
+        this.lock = remoteSession.lock;
+        this.localAddress = remoteSession.remoteAddress;
+        this.localHandler = localHandler;
+        this.localFilterManager = remoteSession.remoteFilterManager;
+        this.remoteAddress = remoteSession.localAddress;
+        this.remoteFilterManager = remoteSession.localFilterManager;
+
+        this.remoteSession = remoteSession;
+    }
+
+    public ProtocolHandler getHandler()
+    {
+        return localHandler;
+    }
+
+    public ProtocolEncoder getEncoder()
+    {
+        return null;
+    }
+
+    public ProtocolDecoder getDecoder()
+    {
+        return null;
+    }
+
+    public void close()
+    {
+        synchronized( lock )
+        {
+            if( remoteSession.closed )
+                return;
+            remoteSession.closed = true;
+            remoteFilterManager.fireSessionClosed( remoteSession );
+        }
+    }
+
+    public Object getAttachment()
+    {
+        return attachment;
+    }
+
+    public void setAttachment( Object attachment )
+    {
+        this.attachment = attachment;
+    }
+
+    public void write( Object message )
+    {
+        synchronized( lock )
+        {
+            if( closed )
+                throw new IllegalStateException( "Session is closed." );
+            remoteFilterManager.fireMessageReceived( remoteSession, message );
+        }
+    }
+
+    public TransportType getTransportType()
+    {
+        return TransportType.VM_PIPE;
+    }
+
+    public boolean isConnected()
+    {
+        return !closed;
+    }
+
+    public SessionConfig getConfig()
+    {
+        return config;
+    }
+
+    public SocketAddress getRemoteAddress()
+    {
+        return remoteAddress;
+    }
+
+    public SocketAddress getLocalAddress()
+    {
+        return localAddress;
+    }
+
+    public long getReadBytes()
+    {
+        return 0;
+    }
+
+    public long getWrittenBytes()
+    {
+        return 0;
+    }
+
+    public long getLastIoTime()
+    {
+        return Math.max( lastReadTime, lastWriteTime );
+    }
+
+    public long getLastReadTime()
+    {
+        return lastReadTime;
+    }
+
+    public long getLastWriteTime()
+    {
+        return lastWriteTime;
+    }
+
+    public boolean isIdle( IdleStatus status )
+    {
+        if( status == null )
+            throw new NullPointerException( "status" );
+
+        if( status == IdleStatus.BOTH_IDLE )
+            return bothIdle;
+        if( status == IdleStatus.READER_IDLE )
+            return readerIdle;
+        if( status == IdleStatus.WRITER_IDLE )
+            return writerIdle;
+
+        throw new IllegalArgumentException( "Illegal statue: " + status );
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionConfig.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionConfig.java?view=auto&rev=123602
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeSessionConfig.java	Tue Dec 28 23:55:11 2004
@@ -0,0 +1,17 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.vmpipe;
+
+import org.apache.mina.common.SessionConfig;
+import org.apache.mina.util.BasicSessionConfig;
+
+/**
+ * A {@link SessionConfig} for in-VM pipe transport.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class VmPipeSessionConfig extends BasicSessionConfig
+{
+}
\ No newline at end of file

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/registry/ServiceRegistry.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/registry/ServiceRegistry.java?view=diff&rev=123602&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/registry/ServiceRegistry.java&r1=123601&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/registry/ServiceRegistry.java&r2=123602
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/registry/ServiceRegistry.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/registry/ServiceRegistry.java	Tue Dec 28 23:55:11 2004
@@ -43,18 +43,17 @@
             throws IOException;
 
     void unbind( Service service );
-    
+
     void addFilter( int priority, IoHandlerFilter filter );
-    
+
     void addFilter( int priority, ProtocolHandlerFilter filter );
-    
+
     void addFilter( Service service, int priority, IoHandlerFilter filter );
 
-    void addFilter( Service service, int priority,
-                   ProtocolHandlerFilter filter );
-    
+    void addFilter( Service service, int priority, ProtocolHandlerFilter filter );
+
     void removeFilter( IoHandlerFilter filter );
-    
+
     void removeFilter( ProtocolHandlerFilter filter );
 
     Service getByName( String name, TransportType transportType );