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/01/12 09:51:38 UTC

svn commit: r124954 - in incubator/directory/network/trunk/mina/src: examples/org/apache/mina/examples/echoserver examples/org/apache/mina/examples/reverser examples/org/apache/mina/examples/sumup 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 java/org/apache/mina/util test/org/apache/mina/examples/echoserver

Author: trustin
Date: Wed Jan 12 00:51:34 2005
New Revision: 124954

URL: http://svn.apache.org/viewcvs?view=rev&rev=124954
Log:
 * Renamed Acceptor to IoAcceptor
 * Renamed Connector to IoConnector
 * Added ProtocolAcceptor and ProtocolConnector
 * Added IoProtocolAcceptor and IoProtocolConnector which wraps IoAcceptor and IoConnector
 * connect() method of all connectors now returns IoSession(or ProtocolSession)
Added:
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoAcceptor.java
      - copied, changed from r124951, incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Acceptor.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoConnector.java
      - copied, changed from r124951, incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolAcceptor.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolConnector.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoAdapter.java
      - copied, changed from r124951, incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java   (contents, props changed)
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoProtocolConnector.java   (contents, props changed)
Removed:
   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/protocol/IoAdapter.java
Modified:
   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/reverser/Main.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Client.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Server.java
   incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoHandler.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/datagram/DatagramConnector.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketAcceptor.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketConnector.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolProvider.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolViolationException.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java
   incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java
   incubator/directory/network/trunk/mina/src/test/org/apache/mina/examples/echoserver/Test.java

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=124954&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/Main.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/echoserver/Main.java&r2=124954
==============================================================================
--- 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	Wed Jan 12 00:51:34 2005
@@ -20,7 +20,7 @@
 
 import java.net.InetSocketAddress;
 
-import org.apache.mina.io.Acceptor;
+import org.apache.mina.io.IoAcceptor;
 import org.apache.mina.io.datagram.DatagramAcceptor;
 import org.apache.mina.io.filter.IoThreadPoolFilter;
 import org.apache.mina.io.socket.SocketAcceptor;
@@ -42,7 +42,7 @@
         threadPoolFilter.start(); // and start it
 
         // Create a TCP/IP acceptor
-        Acceptor acceptor = new SocketAcceptor();
+        IoAcceptor acceptor = new SocketAcceptor();
 
         // Add thread pool filter
         // MINA runs in a single thread if you don't add this filter.
@@ -53,7 +53,7 @@
                        new EchoProtocolHandler() );
 
         // Create a UDP/IP acceptor
-        Acceptor datagramAcceptor = new DatagramAcceptor();
+        IoAcceptor datagramAcceptor = new DatagramAcceptor();
 
         // Add thread pool filter
         datagramAcceptor.addFilter( Integer.MAX_VALUE, threadPoolFilter );

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=124954&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/Main.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/reverser/Main.java&r2=124954
==============================================================================
--- 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	Wed Jan 12 00:51:34 2005
@@ -20,11 +20,10 @@
 
 import java.net.InetSocketAddress;
 
-import org.apache.mina.io.Acceptor;
 import org.apache.mina.io.filter.IoThreadPoolFilter;
 import org.apache.mina.io.socket.SocketAcceptor;
-import org.apache.mina.protocol.IoAdapter;
 import org.apache.mina.protocol.filter.ProtocolThreadPoolFilter;
+import org.apache.mina.protocol.io.IoProtocolAcceptor;
 
 /**
  * (<b>Entry point</b>) Reverser server which reverses all text lines from
@@ -49,19 +48,18 @@
         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();
+        // Create a TCP/IP acceptor.
+        IoProtocolAcceptor acceptor = new IoProtocolAcceptor(
+                                                              new SocketAcceptor() );
 
         // Add both thread pool filters.
-        acceptor.addFilter( Integer.MAX_VALUE, ioThreadPoolFilter );
-        ioAdapter.addFilter( Integer.MAX_VALUE, protocolThreadPoolFilter );
+        acceptor.getIoAcceptor().addFilter( Integer.MAX_VALUE,
+                                            ioThreadPoolFilter );
+        acceptor.addFilter( Integer.MAX_VALUE, protocolThreadPoolFilter );
 
         // Bind
-        acceptor.bind( new InetSocketAddress( PORT ), ioAdapter
-                .adapt( new ReverseProtocolProvider() ) );
+        acceptor.bind( new InetSocketAddress( PORT ),
+                       new ReverseProtocolProvider() );
 
         System.out.println( "Listening on port " + PORT );
     }

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Client.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Client.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Client.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Client.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Client.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Client.java	Wed Jan 12 00:51:34 2005
@@ -6,12 +6,12 @@
 import java.io.IOException;
 import java.net.InetSocketAddress;
 
-import org.apache.mina.io.Connector;
 import org.apache.mina.io.filter.IoThreadPoolFilter;
 import org.apache.mina.io.socket.SocketConnector;
-import org.apache.mina.protocol.IoAdapter;
 import org.apache.mina.protocol.ProtocolProvider;
+import org.apache.mina.protocol.ProtocolSession;
 import org.apache.mina.protocol.filter.ProtocolThreadPoolFilter;
+import org.apache.mina.protocol.io.IoProtocolConnector;
 
 /**
  * (<strong>Entry Point</strong>) Starts SumUp client.
@@ -52,20 +52,21 @@
         ioThreadPoolFilter.start();
         protocolThreadPoolFilter.start();
 
-        Connector connector = new SocketConnector();
-        IoAdapter adapter = new IoAdapter();
-
-        connector.addFilter( Integer.MAX_VALUE, ioThreadPoolFilter );
-        adapter.addFilter( Integer.MAX_VALUE, protocolThreadPoolFilter );
+        IoProtocolConnector connector = new IoProtocolConnector(
+                                                                 new SocketConnector() );
+        connector.getIoConnector().addFilter( Integer.MAX_VALUE,
+                                              ioThreadPoolFilter );
+        connector.addFilter( Integer.MAX_VALUE, protocolThreadPoolFilter );
 
         ProtocolProvider protocolProvider = new ClientProtocolProvider( values );
+        ProtocolSession session;
         for( ;; )
         {
             try
             {
-                connector.connect( new InetSocketAddress( HOSTNAME, PORT ),
-                                   CONNECT_TIMEOUT, adapter
-                                           .adapt( protocolProvider ) );
+                session = connector
+                        .connect( new InetSocketAddress( HOSTNAME, PORT ),
+                                  CONNECT_TIMEOUT, protocolProvider );
                 break;
             }
             catch( IOException e )
@@ -77,9 +78,7 @@
         }
 
         // wait until the summation is done
-        ClientSessionHandler sessionHandler = ( ClientSessionHandler ) protocolProvider
-                .getHandler();
-        while( sessionHandler.isFinished() )
+        while( session.isConnected() )
         {
             Thread.sleep( 100 );
         }

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Server.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Server.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Server.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Server.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Server.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/sumup/Server.java	Wed Jan 12 00:51:34 2005
@@ -5,11 +5,10 @@
 
 import java.net.InetSocketAddress;
 
-import org.apache.mina.io.Acceptor;
 import org.apache.mina.io.filter.IoThreadPoolFilter;
 import org.apache.mina.io.socket.SocketAcceptor;
-import org.apache.mina.protocol.IoAdapter;
 import org.apache.mina.protocol.filter.ProtocolThreadPoolFilter;
+import org.apache.mina.protocol.io.IoProtocolAcceptor;
 
 /**
  * (<strong>Entry Point</strong>) Starts SumUp server.
@@ -33,14 +32,15 @@
         ioThreadPoolFilter.start();
         protocolThreadPoolFilter.start();
 
-        Acceptor acceptor = new SocketAcceptor();
-        IoAdapter adapter = new IoAdapter();
+        IoProtocolAcceptor acceptor = new IoProtocolAcceptor(
+                                                              new SocketAcceptor() );
 
-        acceptor.addFilter( Integer.MAX_VALUE, ioThreadPoolFilter );
-        adapter.addFilter( Integer.MAX_VALUE, protocolThreadPoolFilter );
+        acceptor.getIoAcceptor().addFilter( Integer.MAX_VALUE,
+                                            ioThreadPoolFilter );
+        acceptor.addFilter( Integer.MAX_VALUE, protocolThreadPoolFilter );
 
-        acceptor.bind( new InetSocketAddress( SERVER_PORT ), adapter
-                .adapt( new ServerProtocolProvider() ) );
+        acceptor.bind( new InetSocketAddress( SERVER_PORT ),
+                       new ServerProtocolProvider() );
         System.out.println( "Listening on port " + SERVER_PORT );
     }
 }

Modified: incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java	(original)
+++ incubator/directory/network/trunk/mina/src/examples/org/apache/mina/examples/tennis/TennisPlayer.java	Wed Jan 12 00:51:34 2005
@@ -3,8 +3,10 @@
  */
 package org.apache.mina.examples.tennis;
 
+import org.apache.mina.protocol.ProtocolCodecFactory;
 import org.apache.mina.protocol.ProtocolHandler;
 import org.apache.mina.protocol.ProtocolHandlerAdapter;
+import org.apache.mina.protocol.ProtocolProvider;
 import org.apache.mina.protocol.ProtocolSession;
 
 /**
@@ -13,47 +15,62 @@
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public class TennisPlayer extends ProtocolHandlerAdapter
+public class TennisPlayer implements ProtocolProvider
 {
-    private static int nextId = 0;
-
-    /** Player ID **/
-    private final int id = nextId++;
-
-    public void sessionOpened( ProtocolSession session )
+    private static final ProtocolHandler HANDLER = new TennisPlayerHandler();
+    
+    public ProtocolCodecFactory getCodecFactory()
     {
-        System.out.println( "Player-" + id + ": READY" );
+        throw new UnsupportedOperationException();
     }
 
-    public void sessionClosed( ProtocolSession session )
+    public ProtocolHandler getHandler()
     {
-        System.out.println( "Player-" + id + ": QUIT" );
+        return HANDLER;
     }
 
-    public void messageReceived( ProtocolSession session, Object message )
+    private static class TennisPlayerHandler extends ProtocolHandlerAdapter
     {
-        System.out.println( "Player-" + id + ": RCVD " + message );
+        private static int nextId = 0;
 
-        TennisBall ball = ( TennisBall ) message;
+        /** Player ID **/
+        private final int id = nextId++;
 
-        // Stroke: TTL decreases and PING/PONG state changes.
-        ball = ball.stroke();
+        public void sessionOpened( ProtocolSession session )
+        {
+            System.out.println( "Player-" + id + ": READY" );
+        }
 
-        if( ball.getTTL() > 0 )
+        public void sessionClosed( ProtocolSession session )
         {
-            // If the ball is still alive, pass it back to peer.
-            session.write( ball );
+            System.out.println( "Player-" + id + ": QUIT" );
         }
-        else
+
+        public void messageReceived( ProtocolSession session, Object message )
         {
-            // If the ball is dead, this player loses.
-            System.out.println( "Player-" + id + ": LOSE" );
-            session.close();
+            System.out.println( "Player-" + id + ": RCVD " + message );
+
+            TennisBall ball = ( TennisBall ) message;
+
+            // Stroke: TTL decreases and PING/PONG state changes.
+            ball = ball.stroke();
+
+            if( ball.getTTL() > 0 )
+            {
+                // If the ball is still alive, pass it back to peer.
+                session.write( ball );
+            }
+            else
+            {
+                // If the ball is dead, this player loses.
+                System.out.println( "Player-" + id + ": LOSE" );
+                session.close();
+            }
         }
-    }
 
-    public void messageSent( ProtocolSession session, Object message )
-    {
-        System.out.println( "Player-" + id + ": SENT " + message );
+        public void messageSent( ProtocolSession session, Object message )
+        {
+            System.out.println( "Player-" + id + ": SENT " + message );
+        }
     }
 }

Deleted: /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=auto&rev=124953
==============================================================================

Deleted: /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=auto&rev=124953
==============================================================================

Copied: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoAcceptor.java (from r124951, 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/IoAcceptor.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Acceptor.java&r1=124951&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoAcceptor.java&r2=124954
==============================================================================
--- 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/IoAcceptor.java	Wed Jan 12 00:51:34 2005
@@ -47,16 +47,15 @@
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public interface Acceptor
+public interface IoAcceptor
 {
     /**
      * Binds to the specified <code>address</code> and handles incoming
-     * connections with the specified <code>defaultHandler</code>.
+     * connections with the specified <code>handler</code>.
      * 
      * @throws IOException if failed to bind
      */
-    void bind( SocketAddress address, IoHandler defaultHandler )
-            throws IOException;
+    void bind( SocketAddress address, IoHandler handler ) throws IOException;
 
     /**
      * Unbinds from the specified <code>address</code>.

Copied: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoConnector.java (from r124951, 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/IoConnector.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/Connector.java&r1=124951&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoConnector.java&r2=124954
==============================================================================
--- 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/IoConnector.java	Wed Jan 12 00:51:34 2005
@@ -47,26 +47,26 @@
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public interface Connector
+public interface IoConnector
 {
     /**
      * Connects to the specified <code>address</code>.  If communication starts
      * successfully, events are fired to the specified
-     * <code>defaultHandler</code>.  This method blocks.
+     * <code>handler</code>.  This method blocks.
      * 
      * @throws IOException if failed to connect
      */
-    void connect( SocketAddress address, IoHandler defaultHandler )
+    IoSession connect( SocketAddress address, IoHandler handler )
             throws IOException;
 
     /**
      * Connects to the specified <code>address</code> with timeout.  If
      * communication starts successfully, events are fired to the specified
-     * <code>defaultHandler</code>.  This method blocks.
+     * <code>handler</code>.  This method blocks.
      * 
      * @throws IOException if failed to connect
      */
-    void connect( SocketAddress address, int timeout, IoHandler defaultHandler )
+    IoSession connect( SocketAddress address, int timeout, IoHandler handler )
             throws IOException;
 
     /**

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoHandler.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoHandler.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoHandler.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoHandler.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/IoHandler.java	Wed Jan 12 00:51:34 2005
@@ -24,7 +24,7 @@
 import org.apache.mina.common.IdleStatus;
 
 /**
- * Handles all I/O events fired by {@link Acceptor} and {@link Connector}.
+ * Handles all I/O events fired by {@link IoAcceptor} and {@link IoConnector}.
  * There are 6 event handler methods, and they are all invoked by MINA
  * automatically.  Most users of MINA I/O package will be OK with this single
  * interface to implement their protocols.

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=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java&r2=124954
==============================================================================
--- 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	Wed Jan 12 00:51:34 2005
@@ -31,7 +31,7 @@
 import java.util.Set;
 
 import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.io.Acceptor;
+import org.apache.mina.io.IoAcceptor;
 import org.apache.mina.io.DefaultExceptionMonitor;
 import org.apache.mina.io.ExceptionMonitor;
 import org.apache.mina.io.IoHandler;
@@ -40,12 +40,12 @@
 import org.apache.mina.util.Queue;
 
 /**
- * {@link Acceptor} for datagram transport (UDP/IP).
+ * {@link IoAcceptor} for datagram transport (UDP/IP).
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public class DatagramAcceptor extends DatagramProcessor implements Acceptor
+public class DatagramAcceptor extends DatagramProcessor implements IoAcceptor
 {
     private static volatile int nextId = 0;
 
@@ -77,13 +77,13 @@
         selector = Selector.open();
     }
 
-    public void bind( SocketAddress address, IoHandler defaultHandler )
+    public void bind( SocketAddress address, IoHandler handler )
             throws IOException
     {
         if( address == null )
             throw new NullPointerException( "address" );
-        if( defaultHandler == null )
-            throw new NullPointerException( "defaultHandler" );
+        if( handler == null )
+            throw new NullPointerException( "handler" );
 
         if( ! ( address instanceof InetSocketAddress ) )
             throw new IllegalArgumentException( "Unexpected address type: "
@@ -97,8 +97,7 @@
         {
             synchronized( registerQueue )
             {
-                registerQueue.push( new RegistrationRequest( ch,
-                                                             defaultHandler ) );
+                registerQueue.push( new RegistrationRequest( ch, handler ) );
             }
             channels.put( address, ch );
 

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/datagram/DatagramConnector.java	Wed Jan 12 00:51:34 2005
@@ -29,21 +29,23 @@
 import java.util.Set;
 
 import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.io.Connector;
 import org.apache.mina.io.DefaultExceptionMonitor;
 import org.apache.mina.io.ExceptionMonitor;
+import org.apache.mina.io.IoConnector;
 import org.apache.mina.io.IoHandler;
 import org.apache.mina.io.IoHandlerFilter;
+import org.apache.mina.io.IoSession;
 import org.apache.mina.util.IoHandlerFilterManager;
 import org.apache.mina.util.Queue;
 
 /**
- * {@link Connector} for datagram transport (UDP/IP).
+ * {@link IoConnector} for datagram transport (UDP/IP).
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public class DatagramConnector extends DatagramProcessor implements Connector
+public class DatagramConnector extends DatagramProcessor implements
+                                                        IoConnector
 {
     private static volatile int nextId = 0;
 
@@ -73,13 +75,13 @@
         selector = Selector.open();
     }
 
-    public void connect( SocketAddress address, IoHandler defaultHandler )
+    public IoSession connect( SocketAddress address, IoHandler handler )
             throws IOException
     {
         if( address == null )
             throw new NullPointerException( "address" );
-        if( defaultHandler == null )
-            throw new NullPointerException( "defaultHandler" );
+        if( handler == null )
+            throw new NullPointerException( "handler" );
 
         if( ! ( address instanceof InetSocketAddress ) )
             throw new IllegalArgumentException( "Unexpected address type: "
@@ -89,8 +91,7 @@
         ch.configureBlocking( false );
         ch.socket().connect( address );
 
-        RegistrationRequest request = new RegistrationRequest( ch,
-                                                               defaultHandler );
+        RegistrationRequest request = new RegistrationRequest( ch, handler );
         synchronized( this )
         {
             synchronized( registerQueue )
@@ -120,12 +121,14 @@
                 }
             }
         }
+
+        return request.session;
     }
 
-    public void connect( SocketAddress address, int timeout,
-                        IoHandler defaultHandler ) throws IOException
+    public IoSession connect( SocketAddress address, int timeout,
+                             IoHandler handler ) throws IOException
     {
-        connect( address, defaultHandler );
+        return connect( address, handler );
     }
 
     public void closeSession( DatagramSession session )

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketAcceptor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketAcceptor.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketAcceptor.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketAcceptor.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketAcceptor.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketAcceptor.java	Wed Jan 12 00:51:34 2005
@@ -30,7 +30,7 @@
 import java.util.Iterator;
 import java.util.Map;
 
-import org.apache.mina.io.Acceptor;
+import org.apache.mina.io.IoAcceptor;
 import org.apache.mina.io.DefaultExceptionMonitor;
 import org.apache.mina.io.ExceptionMonitor;
 import org.apache.mina.io.IoHandler;
@@ -39,12 +39,12 @@
 import org.apache.mina.util.Queue;
 
 /**
- * {@link Acceptor} for socket transport (TCP/IP).
+ * {@link IoAcceptor} for socket transport (TCP/IP).
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public class SocketAcceptor implements Acceptor
+public class SocketAcceptor implements IoAcceptor
 {
     private static volatile int nextId = 0;
 
@@ -74,26 +74,26 @@
         selector = Selector.open();
     }
 
-    public void bind( SocketAddress address, IoHandler defaultHandler )
+    public void bind( SocketAddress address, IoHandler handler )
             throws IOException
     {
-        this.bind( address, 50, defaultHandler );
+        this.bind( address, 50, handler );
     }
 
     /**
      * Binds to the specified <code>address</code> and handles incoming
-     * connections with the specified <code>defaultHandler</code>.
+     * connections with the specified <code>handler</code>.
      *
      * @param backlog the listen backlog length 
      * @throws IOException if failed to bind
      */
-    public void bind( SocketAddress address, int backlog,
-                     IoHandler defaultHandler ) throws IOException
+    public void bind( SocketAddress address, int backlog, IoHandler handler )
+            throws IOException
     {
         if( address == null )
             throw new NullPointerException( "address" );
-        if( defaultHandler == null )
-            throw new NullPointerException( "defaultHandler" );
+        if( handler == null )
+            throw new NullPointerException( "handler" );
 
         if( ! ( address instanceof InetSocketAddress ) )
             throw new IllegalArgumentException( "Unexpected address type: "
@@ -107,8 +107,7 @@
         {
             synchronized( registerQueue )
             {
-                registerQueue.push( new RegistrationRequest( ssc,
-                                                             defaultHandler ) );
+                registerQueue.push( new RegistrationRequest( ssc, handler ) );
             }
             channels.put( address, ssc );
 

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketConnector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketConnector.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketConnector.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketConnector.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketConnector.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/io/socket/SocketConnector.java	Wed Jan 12 00:51:34 2005
@@ -28,20 +28,21 @@
 import java.util.Iterator;
 import java.util.Set;
 
-import org.apache.mina.io.Connector;
 import org.apache.mina.io.DefaultExceptionMonitor;
 import org.apache.mina.io.ExceptionMonitor;
+import org.apache.mina.io.IoConnector;
 import org.apache.mina.io.IoHandler;
 import org.apache.mina.io.IoHandlerFilter;
+import org.apache.mina.io.IoSession;
 import org.apache.mina.util.IoHandlerFilterManager;
 
 /**
- * {@link Connector} for socket transport (TCP/IP).
+ * {@link IoConnector} for socket transport (TCP/IP).
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public class SocketConnector implements Connector
+public class SocketConnector implements IoConnector
 {
     private static volatile int nextId = 0;
 
@@ -65,19 +66,19 @@
         selector = Selector.open();
     }
 
-    public void connect( SocketAddress address, IoHandler defaultHandler )
+    public IoSession connect( SocketAddress address, IoHandler handler )
             throws IOException
     {
-        connect( address, Integer.MAX_VALUE, defaultHandler );
+        return connect( address, Integer.MAX_VALUE, handler );
     }
 
-    public void connect( SocketAddress address, int timeout,
-                        IoHandler defaultHandler ) throws IOException
+    public IoSession connect( SocketAddress address, int timeout,
+                             IoHandler handler ) throws IOException
     {
         if( address == null )
             throw new NullPointerException( "address" );
-        if( defaultHandler == null )
-            throw new NullPointerException( "defaultHandler" );
+        if( handler == null )
+            throw new NullPointerException( "handler" );
 
         if( timeout <= 0 )
             throw new IllegalArgumentException( "Illegal timeout: " + timeout );
@@ -89,13 +90,14 @@
         SocketChannel ch = SocketChannel.open();
         ch.configureBlocking( false );
 
+        IoSession session;
         if( ch.connect( address ) )
         {
-            newSession( ch, defaultHandler );
+            session = newSession( ch, handler );
         }
         else
         {
-            ConnectEntry entry = new ConnectEntry( timeout, defaultHandler );
+            ConnectEntry entry = new ConnectEntry( timeout, handler );
 
             synchronized( this )
             {
@@ -124,7 +126,11 @@
 
             if( entry.exception != null )
                 throw entry.exception;
+
+            session = entry.session;
         }
+
+        return session;
     }
 
     private void processSessions( Set keys )
@@ -144,9 +150,8 @@
             try
             {
                 ch.finishConnect();
-                newSession( ch, entry.handler );
-                //                SocketSession session = newSession( ch, entry.handler );
-                //                entry.session = session;
+                SocketSession session = newSession( ch, entry.handler );
+                entry.session = session;
                 entry.done = true;
 
                 synchronized( entry )
@@ -263,7 +268,7 @@
 
         private final IoHandler handler;
 
-        //        private SocketSession session;
+        private SocketSession session;
 
         private boolean done;
 

Deleted: /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=auto&rev=124953
==============================================================================

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolAcceptor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolAcceptor.java?view=auto&rev=124954
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolAcceptor.java	Wed Jan 12 00:51:34 2005
@@ -0,0 +1,73 @@
+/*
+ *   @(#) $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.protocol;
+
+import java.io.IOException;
+import java.net.SocketAddress;
+
+/**
+ * Accepts incoming connection, communicates with clients, and fires events to
+ * {@link ProtocolHandler}s.
+ * <p>
+ * Please refer to
+ * <a href="../../../../../xref-examples/org/apache/mina/examples/reverser/Main.html">Reverser</a>
+ * example. 
+ * <p>
+ * You should bind to the desired socket address to accept incoming
+ * connections, and then events for incoming connections will be sent to
+ * the specified default {@link ProtocolHandler}.
+ * <p>
+ * Threads accepts 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$
+ */
+public interface ProtocolAcceptor
+{
+    /**
+     * Binds to the specified <code>address</code> and handles incoming
+     * connections with the specified <code>protocolProvider</code>.
+     * 
+     * @throws IOException if failed to bind
+     */
+    void bind( SocketAddress address, ProtocolProvider protocolProvider )
+            throws IOException;
+
+    /**
+     * Unbinds from the specified <code>address</code>.
+     */
+    void unbind( SocketAddress address );
+
+    /**
+     * Adds the specified filter with the specified priority.  Greater priority
+     * value, higher priority, and thus evaluated more earlier.  Please note
+     * that priority value must be unique.
+     */
+    void addFilter( int priority, ProtocolHandlerFilter filter );
+
+    /**
+     * Removes the specified filter from the filter list.
+     */
+    void removeFilter( ProtocolHandlerFilter filter );
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolConnector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolConnector.java?view=auto&rev=124954
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolConnector.java	Wed Jan 12 00:51:34 2005
@@ -0,0 +1,81 @@
+/*
+ *   @(#) $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.protocol;
+
+import java.io.IOException;
+import java.net.SocketAddress;
+
+/**
+ * Connects to endpoint, communicates with the server, and fires events to
+ * {@link ProtocolProvider}s.
+ * <p>
+ * Please refer to
+ * <a href="../../../../../xref-examples/org/apache/mina/examples/sumup/Client.html">SumUp client</a>
+ * example. 
+ * <p>
+ * You should connect to the desired socket address to start communication,
+ * and then events for incoming connections will be sent to the
+ * {@link ProtocolHandler} of the specified {@link ProtocolProvider}.
+ * <p>
+ * Threads connects 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$
+ */
+public interface ProtocolConnector
+{
+    /**
+     * Connects to the specified <code>address</code>.  If communication starts
+     * successfully, events are fired to the specified
+     * <code>protocolProvider</code>.  This method blocks.
+     * 
+     * @throws IOException if failed to connect
+     */
+    ProtocolSession connect( SocketAddress address,
+                            ProtocolProvider protocolProvider )
+            throws IOException;
+
+    /**
+     * Connects to the specified <code>address</code> with timeout.  If
+     * communication starts successfully, events are fired to the specified
+     * <code>protocolProvider</code>.  This method blocks.
+     * 
+     * @throws IOException if failed to connect
+     */
+    ProtocolSession connect( SocketAddress address, int timeout,
+                            ProtocolProvider protocolProvider )
+            throws IOException;
+
+    /**
+     * Adds the specified filter with the specified priority.  Greater priority
+     * value, higher priority, and thus evaluated more earlier.  Please note
+     * that priority value must be unique.
+     */
+    void addFilter( int priority, ProtocolHandlerFilter filter );
+
+    /**
+     * Removes the specified filter from the filter list.
+     */
+    void removeFilter( ProtocolHandlerFilter filter );
+}
\ No newline at end of file

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolProvider.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolProvider.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolProvider.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolProvider.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolProvider.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolProvider.java	Wed Jan 12 00:51:34 2005
@@ -18,7 +18,7 @@
  */
 package org.apache.mina.protocol;
 
-import org.apache.mina.io.IoHandler;
+import java.net.SocketAddress;
 
 /**
  * Provides a required information to implement high-level protocols.
@@ -31,8 +31,8 @@
  * </ul>
  * <p>
  * If once you implement {@link ProtocolProvider} for your protocol, you can
- * adapt it into {@link IoHandler} using {@link IoAdapter} to work with I/O
- * layer which does actual I/O operations.
+ * connect to or bind on {@link SocketAddress} using {@link ProtocolAcceptor}
+ * and {@link ProtocolConnector}.
  * <p>
  * Please refer to
  * <a href="../../../../../xref-examples/org/apache/mina/examples/reverser/ReverseProtocolProvider.html"><code>ReverserProtocolProvider</code></a>

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolViolationException.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolViolationException.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolViolationException.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolViolationException.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolViolationException.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/ProtocolViolationException.java	Wed Jan 12 00:51:34 2005
@@ -99,7 +99,7 @@
     /**
      * Sets unknown message part.
      */
-    void setBuffer( ByteBuffer buffer )
+    public void setBuffer( ByteBuffer buffer )
     {
         this.buffer = buffer;
     }

Copied: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoAdapter.java (from r124951, 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/io/IoAdapter.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/IoAdapter.java&r1=124951&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoAdapter.java&r2=124954
==============================================================================
--- 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/io/IoAdapter.java	Wed Jan 12 00:51:34 2005
@@ -16,7 +16,7 @@
  *   limitations under the License.
  *
  */
-package org.apache.mina.protocol;
+package org.apache.mina.protocol.io;
 
 import java.net.SocketAddress;
 
@@ -24,11 +24,21 @@
 import org.apache.mina.common.IdleStatus;
 import org.apache.mina.common.SessionConfig;
 import org.apache.mina.common.TransportType;
-import org.apache.mina.io.Acceptor;
-import org.apache.mina.io.Connector;
+import org.apache.mina.io.IoAcceptor;
+import org.apache.mina.io.IoConnector;
 import org.apache.mina.io.IoHandler;
 import org.apache.mina.io.IoHandlerFilter;
 import org.apache.mina.io.IoSession;
+import org.apache.mina.protocol.ProtocolCodecFactory;
+import org.apache.mina.protocol.ProtocolDecoder;
+import org.apache.mina.protocol.ProtocolDecoderOutput;
+import org.apache.mina.protocol.ProtocolEncoder;
+import org.apache.mina.protocol.ProtocolEncoderOutput;
+import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolHandlerFilter;
+import org.apache.mina.protocol.ProtocolProvider;
+import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.ProtocolViolationException;
 import org.apache.mina.util.ProtocolHandlerFilterManager;
 import org.apache.mina.util.Queue;
 import org.apache.mina.util.ProtocolHandlerFilterManager.WriteCommand;
@@ -51,8 +61,8 @@
  * <a href="../../../../../xref-examples/org/apache/mina/examples/reverser/Main.html">Reverser</a>
  * example.
  * <p>
- * {@link IoAdapter} supports protocol-level filters like {@link Acceptor}s and
- * {@link Connector}s.  It is the same with {@link IoHandlerFilter} and Servlet
+ * {@link IoAdapter} supports protocol-level filters like {@link IoAcceptor}s and
+ * {@link IoConnector}s.  It is the same with {@link IoHandlerFilter} and Servlet
  * filters and effective immediately.
  * 
  * @author Trustin Lee (trustin@apache.org)
@@ -64,7 +74,7 @@
 
     private final ProtocolHandlerFilterManager filterManager = new ProtocolHandlerFilterManager();
 
-    public IoAdapter()
+    IoAdapter()
     {
     }
 
@@ -95,6 +105,23 @@
     public IoHandler adapt( ProtocolProvider protocolProvider )
     {
         return new SessionHandlerAdapter( protocolProvider );
+    }
+
+    /**
+     * Returns {@link ProtocolSession} of the specified {@link IoSession}.
+     */
+    public ProtocolSession toProtocolSession( IoSession session )
+    {
+        IoHandler handler = session.getHandler();
+        if( handler instanceof SessionHandlerAdapter )
+        {
+            SessionHandlerAdapter sha = ( SessionHandlerAdapter ) handler;
+            return sha.getProtocolSession( session );
+        }
+        else
+        {
+            throw new IllegalArgumentException( "Not adapted from IoAdapter." );
+        }
     }
 
     private class SessionHandlerAdapter implements IoHandler

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java?view=auto&rev=124954
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java	Wed Jan 12 00:51:34 2005
@@ -0,0 +1,67 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.io;
+
+import java.io.IOException;
+import java.net.SocketAddress;
+
+import org.apache.mina.io.IoAcceptor;
+import org.apache.mina.protocol.ProtocolAcceptor;
+import org.apache.mina.protocol.ProtocolHandlerFilter;
+import org.apache.mina.protocol.ProtocolProvider;
+
+/**
+ * A {@link ProtocolAcceptor} which wraps {@link IoAcceptor} to provide
+ * low-level I/O.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class IoProtocolAcceptor implements ProtocolAcceptor
+{
+    private final IoAcceptor acceptor;
+
+    private final IoAdapter adapter = new IoAdapter();
+
+    /**
+     * Creates a new instance with the specified {@link IoAcceptor}.
+     */
+    public IoProtocolAcceptor( IoAcceptor acceptor )
+    {
+        if( acceptor == null )
+            throw new NullPointerException( "acceptor" );
+
+        this.acceptor = acceptor;
+    }
+
+    /**
+     * Returns a underlying {@link IoAcceptor} instance this acceptor is
+     * wrapping.
+     */
+    public IoAcceptor getIoAcceptor()
+    {
+        return acceptor;
+    }
+
+    public void bind( SocketAddress address, ProtocolProvider provider )
+            throws IOException
+    {
+        acceptor.bind( address, adapter.adapt( provider ) );
+    }
+
+    public void unbind( SocketAddress address )
+    {
+        acceptor.unbind( address );
+    }
+
+    public void addFilter( int priority, ProtocolHandlerFilter filter )
+    {
+        adapter.addFilter( priority, filter );
+    }
+
+    public void removeFilter( ProtocolHandlerFilter filter )
+    {
+        adapter.removeFilter( filter );
+    }
+}
\ No newline at end of file

Added: incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoProtocolConnector.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoProtocolConnector.java?view=auto&rev=124954
==============================================================================
--- (empty file)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/io/IoProtocolConnector.java	Wed Jan 12 00:51:34 2005
@@ -0,0 +1,76 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.protocol.io;
+
+import java.io.IOException;
+import java.net.SocketAddress;
+
+import org.apache.mina.io.IoConnector;
+import org.apache.mina.io.IoSession;
+import org.apache.mina.protocol.ProtocolConnector;
+import org.apache.mina.protocol.ProtocolHandlerFilter;
+import org.apache.mina.protocol.ProtocolProvider;
+import org.apache.mina.protocol.ProtocolSession;
+
+/**
+ * A {@link ProtocolConnector} which wraps {@link IoConnector} to provide
+ * low-level I/O.
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$
+ */
+public class IoProtocolConnector implements ProtocolConnector
+{
+    private final IoConnector connector;
+
+    private final IoAdapter adapter = new IoAdapter();
+
+    /**
+     * Creates a new instance with the specified {@link IoConnector}.
+     */
+    public IoProtocolConnector( IoConnector connector )
+    {
+        if( connector == null )
+            throw new NullPointerException( "connector" );
+        this.connector = connector;
+    }
+
+    /**
+     * Returns a underlying {@link IoConnector} instance this acceptor is
+     * wrapping.
+     */
+    public IoConnector getIoConnector()
+    {
+        return connector;
+    }
+
+    public ProtocolSession connect( SocketAddress address,
+                                   ProtocolProvider provider )
+            throws IOException
+    {
+        IoSession session = connector.connect( address, adapter
+                .adapt( provider ) );
+        return adapter.toProtocolSession( session );
+    }
+
+    public ProtocolSession connect( SocketAddress address, int timeout,
+                                   ProtocolProvider provider )
+            throws IOException
+    {
+        IoSession session = connector.connect( address, timeout, adapter
+                .adapt( provider ) );
+        return adapter.toProtocolSession( session );
+    }
+
+    public void addFilter( int priority, ProtocolHandlerFilter filter )
+    {
+        adapter.addFilter( priority, filter );
+    }
+
+    public void removeFilter( ProtocolHandlerFilter filter )
+    {
+        adapter.removeFilter( filter );
+    }
+
+}
\ No newline at end of file

Modified: 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=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java	Wed Jan 12 00:51:34 2005
@@ -4,21 +4,24 @@
 package org.apache.mina.protocol.vmpipe;
 
 import java.io.IOException;
+import java.net.SocketAddress;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.mina.protocol.ProtocolAcceptor;
 import org.apache.mina.protocol.ProtocolHandler;
 import org.apache.mina.protocol.ProtocolHandlerFilter;
+import org.apache.mina.protocol.ProtocolProvider;
 import org.apache.mina.util.ProtocolHandlerFilterManager;
 
 /**
- * Binds the specified {@link ProtocolHandler} to the specified
+ * Binds the specified {@link ProtocolProvider} to the specified
  * {@link VmPipeAddress}.
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public class VmPipeAcceptor
+public class VmPipeAcceptor implements ProtocolAcceptor
 {
     static final Map boundHandlers = new HashMap();
 
@@ -29,22 +32,19 @@
      */
     public VmPipeAcceptor()
     {
-        filterManager.addFilter( Integer.MIN_VALUE, new VmPipeFilter() );
+        filterManager.addFilter( Integer.MIN_VALUE - 1, new VmPipeFilter() );
     }
 
-    /**
-     * Binds to the specified <code>address</code> and handles incoming
-     * connections with the specified <code>defaultHandler</code>.
-     * 
-     * @throws IOException if failed to bind
-     */
-    public void bind( VmPipeAddress address, ProtocolHandler defaultHandler )
+    public void bind( SocketAddress address, ProtocolProvider protocolProvider )
             throws IOException
     {
         if( address == null )
             throw new NullPointerException( "address" );
-        if( defaultHandler == null )
-            throw new NullPointerException( "defaultHandler" );
+        if( protocolProvider == null )
+            throw new NullPointerException( "protocolProvider" );
+        if( ! ( address instanceof VmPipeAddress ) )
+            throw new IllegalArgumentException(
+                                                "address must be VmPipeAddress." );
 
         synchronized( boundHandlers )
         {
@@ -53,15 +53,14 @@
                 throw new IOException( "Address already bound: " + address );
             }
 
-            boundHandlers.put( address, new Entry( address, filterManager,
-                                                   defaultHandler ) );
+            boundHandlers.put( address, new Entry( ( VmPipeAddress ) address,
+                                                   filterManager,
+                                                   protocolProvider
+                                                           .getHandler() ) );
         }
     }
 
-    /**
-     * Unbinds from the specified <code>address</code>.
-     */
-    public void unbind( VmPipeAddress address )
+    public void unbind( SocketAddress address )
     {
         if( address == null )
             throw new NullPointerException( "address" );
@@ -72,18 +71,11 @@
         }
     }
 
-    /**
-     * 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 );

Modified: 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=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/protocol/vmpipe/VmPipeConnector.java	Wed Jan 12 00:51:34 2005
@@ -4,21 +4,23 @@
 package org.apache.mina.protocol.vmpipe;
 
 import java.io.IOException;
+import java.net.SocketAddress;
 
-import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolConnector;
 import org.apache.mina.protocol.ProtocolHandlerFilter;
+import org.apache.mina.protocol.ProtocolProvider;
 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
+ * Connects to {@link ProtocolProvider}s which is bound on the specified
  * {@link VmPipeAddress}.
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public class VmPipeConnector
+public class VmPipeConnector implements ProtocolConnector
 {
     private final ProtocolHandlerFilterManager filterManager = new ProtocolHandlerFilterManager();
 
@@ -27,40 +29,30 @@
      */
     public VmPipeConnector()
     {
-        filterManager.addFilter( Integer.MIN_VALUE, new VmPipeFilter() );
+        filterManager.addFilter( Integer.MIN_VALUE - 1, new VmPipeFilter() );
     }
 
-    /**
-     * Adds the specified filter with the specified priority.  Greater priority
-     * value, higher priority, and thus evaluated more earlier.  Please note
-     * that priority value must be unique.
-     */
     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 );
     }
 
-    /**
-     * Connects to the specified <code>address</code>.  If communication starts
-     * successfully, events are fired to the specified
-     * <code>defaultHandler</code>.  This method blocks.
-     */
-    public ProtocolSession connect( VmPipeAddress address,
-                                   ProtocolHandler defaultHandler )
+    public ProtocolSession connect( SocketAddress address,
+                                   ProtocolProvider protocolProvider )
             throws IOException
     {
         if( address == null )
             throw new NullPointerException( "address" );
-        if( defaultHandler == null )
-            throw new NullPointerException( "defaultHandler" );
+        if( protocolProvider == null )
+            throw new NullPointerException( "protocolProvider" );
+        if( ! ( address instanceof VmPipeAddress ) )
+            throw new IllegalArgumentException(
+                                                "address must be VmPipeAddress." );
 
         Entry entry = ( Entry ) VmPipeAcceptor.boundHandlers.get( address );
         if( entry == null )
@@ -71,10 +63,18 @@
                                                    AnonymousVmPipeAddress.INSTANCE,
                                                    entry.address,
                                                    filterManager,
-                                                   defaultHandler,
+                                                   protocolProvider
+                                                           .getHandler(),
                                                    entry.filterManager,
                                                    entry.handler );
         VmPipeIdleStatusChecker.INSTANCE.addSession( session );
         return session;
+    }
+
+    public ProtocolSession connect( SocketAddress address, int timeout,
+                                   ProtocolProvider protocolProvider )
+            throws IOException
+    {
+        return connect( address, protocolProvider );
     }
 }

Modified: incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java	(original)
+++ incubator/directory/network/trunk/mina/src/java/org/apache/mina/util/IoHandlerFilterManager.java	Wed Jan 12 00:51:34 2005
@@ -26,7 +26,7 @@
 import org.apache.mina.io.IoHandler;
 import org.apache.mina.io.IoHandlerFilter;
 import org.apache.mina.io.IoSession;
-import org.apache.mina.protocol.IoAdapter;
+import org.apache.mina.protocol.io.IoAdapter;
 
 /**
  * Manages the list of {@link IoHandlerFilter}s.

Modified: incubator/directory/network/trunk/mina/src/test/org/apache/mina/examples/echoserver/Test.java
Url: http://svn.apache.org/viewcvs/incubator/directory/network/trunk/mina/src/test/org/apache/mina/examples/echoserver/Test.java?view=diff&rev=124954&p1=incubator/directory/network/trunk/mina/src/test/org/apache/mina/examples/echoserver/Test.java&r1=124953&p2=incubator/directory/network/trunk/mina/src/test/org/apache/mina/examples/echoserver/Test.java&r2=124954
==============================================================================
--- incubator/directory/network/trunk/mina/src/test/org/apache/mina/examples/echoserver/Test.java	(original)
+++ incubator/directory/network/trunk/mina/src/test/org/apache/mina/examples/echoserver/Test.java	Wed Jan 12 00:51:34 2005
@@ -11,7 +11,7 @@
 
 import org.apache.commons.net.EchoTCPClient;
 import org.apache.commons.net.EchoUDPClient;
-import org.apache.mina.io.Acceptor;
+import org.apache.mina.io.IoAcceptor;
 import org.apache.mina.io.datagram.DatagramAcceptor;
 import org.apache.mina.io.filter.IoThreadPoolFilter;
 import org.apache.mina.io.socket.SocketAcceptor;
@@ -26,9 +26,9 @@
 {
     private static final int PORT = 8080;
 
-    private Acceptor acceptor;
+    private IoAcceptor acceptor;
 
-    private Acceptor datagramAcceptor;
+    private IoAcceptor datagramAcceptor;
 
     private IoThreadPoolFilter threadPoolFilter;