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 2006/01/26 06:26:05 UTC

svn commit: r372449 [2/2] - in /directory/sandbox/trustin/dirmina-158/core/src: main/java/org/apache/mina/common/ main/java/org/apache/mina/common/support/ main/java/org/apache/mina/registry/ main/java/org/apache/mina/transport/socket/nio/ main/java/or...

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java Wed Jan 25 21:24:58 2006
@@ -31,10 +31,13 @@
 import org.apache.mina.common.ConnectFuture;
 import org.apache.mina.common.ExceptionMonitor;
 import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoFilterChainBuilder;
+import org.apache.mina.common.IoConnectorConfig;
 import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoServiceConfig;
 import org.apache.mina.common.IoFilter.WriteRequest;
 import org.apache.mina.common.support.BaseIoConnector;
+import org.apache.mina.transport.socket.nio.DatagramConnectorConfig;
+import org.apache.mina.transport.socket.nio.DatagramSessionConfig;
 import org.apache.mina.util.Queue;
 
 /**
@@ -50,11 +53,7 @@
     private final IoConnector wrapper;
     private final int id = nextId ++ ;
     private Selector selector;
-    private boolean broadcast;
-    private boolean reuseAddress;
-    private int receiveBufferSize = -1;
-    private int sendBufferSize = -1;
-    private int trafficClass = -1;
+    private final DatagramConnectorConfig defaultConfig = new DatagramConnectorConfig();
     private final Queue registerQueue = new Queue();
     private final Queue cancelQueue = new Queue();
     private final Queue flushingSessions = new Queue();
@@ -69,13 +68,13 @@
         this.wrapper = wrapper;
     }
 
-    public ConnectFuture connect( SocketAddress address, IoHandler handler, IoFilterChainBuilder filterChainBuilder )
+    public ConnectFuture connect( SocketAddress address, IoHandler handler, IoConnectorConfig config )
     {
-        return connect( address, null, handler, filterChainBuilder );
+        return connect( address, null, handler, config );
     }
 
     public ConnectFuture connect( SocketAddress address, SocketAddress localAddress,
-                                  IoHandler handler, IoFilterChainBuilder filterChainBuilder )
+                                  IoHandler handler, IoConnectorConfig config )
     {
         if( address == null )
             throw new NullPointerException( "address" );
@@ -92,9 +91,9 @@
                                                 + localAddress.getClass() );
         }
         
-        if( filterChainBuilder == null )
+        if( config == null )
         {
-            filterChainBuilder = IoFilterChainBuilder.NOOP;
+            config = ( IoConnectorConfig ) getDefaultConfig();
         }
         
         DatagramChannel ch = null;
@@ -102,20 +101,22 @@
         try
         {
             ch = DatagramChannel.open();
-            ch.socket().setReuseAddress( reuseAddress );
-            ch.socket().setBroadcast( broadcast );
-            if( receiveBufferSize > 0 )
+            DatagramSessionConfig cfg;
+            if( config.getSessionConfig() instanceof DatagramSessionConfig )
             {
-                ch.socket().setReceiveBufferSize( receiveBufferSize );
+                cfg = ( DatagramSessionConfig ) config.getSessionConfig();
             }
-            if( sendBufferSize > 0 )
-            {
-                ch.socket().setSendBufferSize( sendBufferSize );
-            }
-            if( trafficClass > 0 )
+            else
             {
-                ch.socket().setTrafficClass( trafficClass );
+                cfg = ( DatagramSessionConfig ) getDefaultConfig().getSessionConfig();
             }
+            
+            ch.socket().setReuseAddress( cfg.isReuseAddress() );
+            ch.socket().setBroadcast( cfg.isBroadcast() );
+            ch.socket().setReceiveBufferSize( cfg.getReceiveBufferSize() );
+            ch.socket().setSendBufferSize( cfg.getSendBufferSize() );
+            ch.socket().setTrafficClass( cfg.getTrafficClass() );
+
             if( localAddress != null )
             {
                 ch.socket().bind( localAddress );
@@ -144,7 +145,7 @@
             }
         }
 
-        RegistrationRequest request = new RegistrationRequest( ch, handler, filterChainBuilder );
+        RegistrationRequest request = new RegistrationRequest( ch, handler, config );
         synchronized( this )
         {
             try
@@ -176,54 +177,9 @@
         return request;
     }
     
-    public boolean getBroadcast()
-    {
-        return broadcast;
-    }
-    
-    public void setBroadcast( boolean broadcast )
-    {
-        this.broadcast = broadcast;
-    }
-    
-    public boolean getReuseAddress()
-    {
-        return reuseAddress;
-    }
-    
-    public void setReuseAddress( boolean reuseAddress )
-    {
-        this.reuseAddress = reuseAddress;
-    }
-
-    public int getReceiveBufferSize()
-    {
-        return receiveBufferSize;
-    }
-
-    public void setReceiveBufferSize( int receiveBufferSize )
-    {
-        this.receiveBufferSize = receiveBufferSize;
-    }
-
-    public int getSendBufferSize()
-    {
-        return sendBufferSize;
-    }
-
-    public void setSendBufferSize( int sendBufferSize )
-    {
-        this.sendBufferSize = sendBufferSize;
-    }
-
-    public int getTrafficClass()
-    {
-        return trafficClass;
-    }
-
-    public void setTrafficClass( int trafficClass )
+    public IoServiceConfig getDefaultConfig()
     {
-        this.trafficClass = trafficClass;
+        return defaultConfig;
     }
 
     private synchronized void startupWorker() throws IOException
@@ -443,7 +399,7 @@
     private void readSession( DatagramSessionImpl session )
     {
 
-        ByteBuffer readBuf = ByteBuffer.allocate( 2048 );
+        ByteBuffer readBuf = ByteBuffer.allocate( session.getReadBufferSize() );
         try
         {
             int readBytes = session.getChannel().read( readBuf.buf() );
@@ -582,14 +538,15 @@
             if( req == null )
                 break;
 
-            DatagramSessionImpl session =
-                new DatagramSessionImpl( wrapper, this, req.channel, req.handler );
+            DatagramSessionImpl session = new DatagramSessionImpl(
+                    wrapper, this,
+                    ( DatagramSessionConfig ) req.config.getSessionConfig(),
+                    req.channel, req.handler );
 
             boolean success = false;
             try
             {
-                this.filterChainBuilder.buildFilterChain( session.getFilterChain() );
-                req.filterChainBuilder.buildFilterChain( session.getFilterChain() );
+                req.config.getFilterChainBuilder().buildFilterChain( session.getFilterChain() );
                 ( ( DatagramFilterChain ) session.getFilterChain() ).sessionCreated( session );
 
                 SelectionKey key = req.channel.register( selector,
@@ -661,15 +618,15 @@
     {
         private final DatagramChannel channel;
         private final IoHandler handler;
-        private final IoFilterChainBuilder filterChainBuilder;
+        private final IoConnectorConfig config;
 
         private RegistrationRequest( DatagramChannel channel,
                                      IoHandler handler,
-                                     IoFilterChainBuilder filterChainBuilder )
+                                     IoConnectorConfig config )
         {
             this.channel = channel;
             this.handler = handler;
-            this.filterChainBuilder = filterChainBuilder;
+            this.config = config;
         }
     }
 }

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramService.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramService.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramService.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramService.java Wed Jan 25 21:24:58 2006
@@ -25,7 +25,7 @@
  * @author The Apache Directory Project (dev@directory.apache.org)
  * @version $Rev$, $Date$
  */
-interface DatagramService extends org.apache.mina.transport.socket.nio.DatagramService
+interface DatagramService
 {
     /**
      * Requests this processor to flush the write buffer of the specified

Added: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionConfigImpl.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionConfigImpl.java?rev=372449&view=auto
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionConfigImpl.java (added)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionConfigImpl.java Wed Jan 25 21:24:58 2006
@@ -0,0 +1,129 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.transport.socket.nio.support;
+
+import java.net.DatagramSocket;
+import java.net.SocketException;
+
+import org.apache.mina.common.RuntimeIOException;
+import org.apache.mina.transport.socket.nio.DatagramSessionConfig;
+
+public class DatagramSessionConfigImpl implements DatagramSessionConfig
+{
+    private boolean broadcast;
+    private boolean reuseAddress;
+    private int receiveBufferSize;
+    private int sendBufferSize;
+    private int trafficClass;
+
+    /**
+     * Creates a new instance.
+     * 
+     * @throws RuntimeIOException if failed to get the default configuration
+     */
+    public DatagramSessionConfigImpl()
+    {
+        DatagramSocket s = null;
+        try
+        {
+            s = new DatagramSocket();
+            broadcast = s.getBroadcast();
+            reuseAddress = s.getReuseAddress();
+            receiveBufferSize = s.getReceiveBufferSize();
+            sendBufferSize = s.getSendBufferSize();
+            trafficClass = s.getTrafficClass();
+        }
+        catch( SocketException e )
+        {
+            throw new RuntimeIOException( "Failed to get the default configuration.", e );
+        }
+        finally
+        {
+            if( s != null )
+            {
+                s.close();
+            }
+        }
+    }
+
+    /**
+     * @see DatagramSocket#getBroadcast()
+     */
+    public boolean isBroadcast()
+    {
+        return broadcast;
+    }
+    
+    /**
+     * @see DatagramSocket#setBroadcast(boolean)
+     */
+    public void setBroadcast( boolean broadcast )
+    {
+        this.broadcast = broadcast;
+    }
+    
+    /**
+     * @see DatagramSocket#getReuseAddress()
+     */
+    public boolean isReuseAddress()
+    {
+        return reuseAddress;
+    }
+    
+    /**
+     * @see DatagramSocket#setReuseAddress(boolean)
+     */
+    public void setReuseAddress( boolean reuseAddress )
+    {
+        this.reuseAddress = reuseAddress;
+    }
+
+    /**
+     * @see DatagramSocket#getReceiveBufferSize()
+     */
+    public int getReceiveBufferSize()
+    {
+        return receiveBufferSize;
+    }
+
+    /**
+     * @see DatagramSocket#setReceiveBufferSize(int)
+     */
+    public void setReceiveBufferSize( int receiveBufferSize )
+    {
+        this.receiveBufferSize = receiveBufferSize;
+    }
+
+    /**
+     * @see DatagramSocket#getSendBufferSize()
+     */
+    public int getSendBufferSize()
+    {
+        return sendBufferSize;
+    }
+
+    /**
+     * @see DatagramSocket#setSendBufferSize(int)
+     */
+    public void setSendBufferSize( int sendBufferSize )
+    {
+        this.sendBufferSize = sendBufferSize;
+    }
+
+    /**
+     * @see DatagramSocket#getTrafficClass()
+     */
+    public int getTrafficClass()
+    {
+        return trafficClass;
+    }
+
+    /**
+     * @see DatagramSocket#setTrafficClass(int)
+     */
+    public void setTrafficClass( int trafficClass )
+    {
+        this.trafficClass = trafficClass;
+    }
+}
\ No newline at end of file

Propchange: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionConfigImpl.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Wed Jan 25 21:24:58 2006
@@ -26,12 +26,14 @@
 import org.apache.mina.common.CloseFuture;
 import org.apache.mina.common.IoFilterChain;
 import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoService;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.IoSessionConfig;
+import org.apache.mina.common.RuntimeIOException;
 import org.apache.mina.common.TransportType;
 import org.apache.mina.common.IoFilter.WriteRequest;
 import org.apache.mina.common.support.BaseIoSession;
-import org.apache.mina.transport.socket.nio.DatagramSession;
+import org.apache.mina.transport.socket.nio.DatagramSessionConfig;
 import org.apache.mina.util.Queue;
 
 /**
@@ -40,9 +42,10 @@
  * @author The Apache Directory Project (dev@directory.apache.org)
  * @version $Rev$, $Date$
  */
-class DatagramSessionImpl extends BaseIoSession implements DatagramSession
+class DatagramSessionImpl extends BaseIoSession
 {
     private final IoService wrapperManager;
+    private final DatagramSessionConfig config = new DatagramSessionConfigImpl();
     private final DatagramService managerDelegate;
     private final DatagramFilterChain filterChain;
     private final DatagramChannel ch;
@@ -51,12 +54,14 @@
     private final SocketAddress localAddress;
     private SocketAddress remoteAddress;
     private SelectionKey key;
+    private int readBufferSize;
 
     /**
      * Creates a new instance.
      */
     DatagramSessionImpl( IoService wrapperManager,
                          DatagramService managerDelegate,
+                         DatagramSessionConfig config,
                          DatagramChannel ch, IoHandler defaultHandler )
     {
         this.wrapperManager = wrapperManager;
@@ -67,6 +72,14 @@
         this.handler = defaultHandler;
         this.remoteAddress = ch.socket().getRemoteSocketAddress();
         this.localAddress = ch.socket().getLocalSocketAddress();
+        
+        // Apply the initial session settings
+        this.config.setBroadcast( config.isBroadcast() );
+        this.config.setReceiveBufferSize( config.getReceiveBufferSize() );
+        this.readBufferSize = config.getReceiveBufferSize();
+        this.config.setReuseAddress( config.isReuseAddress() );
+        this.config.setSendBufferSize( config.getSendBufferSize() );
+        this.config.setTrafficClass( config.getTrafficClass() );
     }
     
     public IoService getService()
@@ -74,6 +87,11 @@
         return wrapperManager;
     }
     
+    public IoSessionConfig getConfig()
+    {
+        return config;
+    }
+    
     DatagramService getManagerDelegate()
     {
         return managerDelegate;
@@ -147,57 +165,137 @@
         return localAddress;
     }
 
-    public boolean getReuseAddress() throws SocketException
+    protected void updateTrafficMask()
     {
-        return ch.socket().getReuseAddress();
+        managerDelegate.updateTrafficMask( this );
     }
-
-    public void setReuseAddress( boolean on ) throws SocketException
+    
+    int getReadBufferSize()
     {
-        ch.socket().setReuseAddress( on );
+        return readBufferSize;
     }
-
-    public int getTrafficClass() throws SocketException
+    
+    private class DatagramSessionConfigImpl implements DatagramSessionConfig
     {
-        return ch.socket().getTrafficClass();
-    }
+        public int getReceiveBufferSize()
+        {
+            try
+            {
+                return ch.socket().getReceiveBufferSize();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
 
-    public void setTrafficClass( int tc ) throws SocketException
-    {
-        ch.socket().setTrafficClass( tc );
-    }
+        public void setReceiveBufferSize( int receiveBufferSize )
+        {
+            try
+            {
+                ch.socket().setReceiveBufferSize( receiveBufferSize );
+                DatagramSessionImpl.this.readBufferSize = receiveBufferSize;
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
 
-    protected void updateTrafficMask()
-    {
-        managerDelegate.updateTrafficMask( this );
-    }
+        public boolean isBroadcast()
+        {
+            try
+            {
+                return ch.socket().getBroadcast();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
 
-    public int getReceiveBufferSize() throws SocketException {
-        return ch.socket().getReceiveBufferSize();
-    }
+        public void setBroadcast( boolean broadcast )
+        {
+            try
+            {
+                ch.socket().setBroadcast( broadcast );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
 
-    public void setReceiveBufferSize( int receiveBufferSize ) throws SocketException
-    {
-        ch.socket().setReceiveBufferSize( receiveBufferSize );
-    }
+        public int getSendBufferSize()
+        {
+            try
+            {
+                return ch.socket().getSendBufferSize();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
 
-    public boolean getBroadcast() throws SocketException
-    {
-        return ch.socket().getBroadcast();
-    }
+        public void setSendBufferSize( int sendBufferSize )
+        {
+            try
+            {
+                ch.socket().setSendBufferSize( sendBufferSize );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
 
-    public void setBroadcast( boolean broadcast ) throws SocketException
-    {
-        ch.socket().setBroadcast( broadcast );
-    }
+        public boolean isReuseAddress()
+        {
+            try
+            {
+                return ch.socket().getReuseAddress();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
 
-    public int getSendBufferSize() throws SocketException
-    {
-        return ch.socket().getSendBufferSize();
-    }
+        public void setReuseAddress( boolean reuseAddress )
+        {
+            try
+            {
+                ch.socket().setReuseAddress( reuseAddress );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
 
-    public void setSendBufferSize( int sendBufferSize ) throws SocketException
-    {
-        ch.socket().setSendBufferSize( sendBufferSize );
+        public int getTrafficClass()
+        {
+            try
+            {
+                return ch.socket().getTrafficClass();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+
+        public void setTrafficClass( int trafficClass )
+        {
+            try
+            {
+                ch.socket().setTrafficClass( trafficClass );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
     }
 }

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketAcceptorDelegate.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketAcceptorDelegate.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketAcceptorDelegate.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketAcceptorDelegate.java Wed Jan 25 21:24:58 2006
@@ -26,7 +26,6 @@
 import java.nio.channels.ServerSocketChannel;
 import java.nio.channels.SocketChannel;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -37,11 +36,15 @@
 
 import org.apache.mina.common.ExceptionMonitor;
 import org.apache.mina.common.IoAcceptor;
-import org.apache.mina.common.IoFilterChainBuilder;
+import org.apache.mina.common.IoAcceptorConfig;
 import org.apache.mina.common.IoFuture;
 import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoServiceConfig;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.support.BaseIoAcceptor;
+import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
+import org.apache.mina.transport.socket.nio.SocketSessionConfig;
+import org.apache.mina.util.IdentityHashSet;
 import org.apache.mina.util.Queue;
 
 /**
@@ -57,9 +60,7 @@
     private final IoAcceptor wrapper;
     private final int id = nextId ++ ;
     private final String threadName = "SocketAcceptor-" + id;
-    private boolean reuseAddress = false;
-    private int backlog = 50;
-    private int receiveBufferSize = -1;
+    private final IoServiceConfig defaultConfig = new SocketAcceptorConfig();
     private Selector selector;
     private final Map channels = new HashMap();
     private final Hashtable sessions = new Hashtable();
@@ -84,7 +85,7 @@
      *
      * @throws IOException if failed to bind
      */
-    public void bind( SocketAddress address, IoHandler handler, IoFilterChainBuilder filterChainBuilder ) throws IOException
+    public void bind( SocketAddress address, IoHandler handler, IoAcceptorConfig config ) throws IOException
     {
         if( address == null )
         {
@@ -106,12 +107,12 @@
             throw new IllegalArgumentException( "Unsupported port number: 0" );
         }
         
-        if( filterChainBuilder == null )
+        if( config == null )
         {
-            filterChainBuilder = IoFilterChainBuilder.NOOP;
+            config = ( IoAcceptorConfig ) getDefaultConfig();
         }
         
-        RegistrationRequest request = new RegistrationRequest( address, handler, filterChainBuilder );
+        RegistrationRequest request = new RegistrationRequest( address, handler, config );
 
         synchronized( this )
         {
@@ -156,7 +157,7 @@
         }
     }
 
-    public Collection getManagedSessions( SocketAddress address )
+    public Set getManagedSessions( SocketAddress address )
     {
         if( address == null )
         {
@@ -170,7 +171,8 @@
             throw new IllegalArgumentException( "Address not bound: " + address );
         }
         
-        return Collections.unmodifiableCollection( Arrays.asList( managedSessions.toArray() ) );
+        return Collections.unmodifiableSet(
+                new IdentityHashSet( Arrays.asList( managedSessions.toArray() ) ) );
     }
     
     public void unbind( SocketAddress address )
@@ -228,7 +230,8 @@
         
         
         // Disconnect all clients
-        if( isDisconnectClientsOnUnbind() && managedSessions != null )
+        if( request.registrationRequest.config.isDisconnectOnUnbind() &&
+            managedSessions != null )
         {
             IoSession[] tempSessions = ( IoSession[] ) 
                                   managedSessions.toArray( new IoSession[ 0 ] );
@@ -365,10 +368,12 @@
                 try
                 {
                     RegistrationRequest req = ( RegistrationRequest ) key.attachment();
-                    session = new SocketSessionImpl( SocketAcceptorDelegate.this.wrapper, 
-                            ( Set ) sessions.get( req.address ), ch, req.handler );
-                    SocketAcceptorDelegate.this.filterChainBuilder.buildFilterChain( session.getFilterChain() );
-                    req.filterChainBuilder.buildFilterChain( session.getFilterChain() );
+                    session = new SocketSessionImpl(
+                            SocketAcceptorDelegate.this.wrapper,
+                            ( Set ) sessions.get( req.address ),
+                            ( SocketSessionConfig ) req.config.getSessionConfig(),
+                            ch, req.handler );
+                    req.config.getFilterChainBuilder().buildFilterChain( session.getFilterChain() );
                     ( ( SocketFilterChain ) session.getFilterChain() ).sessionCreated( session );
                     session.getManagedSessions().add( session );
                     session.getIoProcessor().addNew( session );
@@ -393,6 +398,10 @@
         }
     }
 
+    public IoServiceConfig getDefaultConfig()
+    {
+        return defaultConfig;
+    }
 
     private void registerNew()
     {
@@ -423,14 +432,22 @@
                 ssc.configureBlocking( false );
                 
                 // Configure the server socket,
-                ssc.socket().setReuseAddress( isReuseAddress() );
-                if( getReceiveBufferSize() > 0 )
+                SocketAcceptorConfig cfg;
+                if( req.config instanceof SocketAcceptorConfig )
+                {
+                    cfg = ( SocketAcceptorConfig ) req.config;
+                }
+                else
                 {
-                    ssc.socket().setReceiveBufferSize( getReceiveBufferSize() );
+                    cfg = ( SocketAcceptorConfig ) getDefaultConfig();
                 }
                 
+                ssc.socket().setReuseAddress( cfg.isReuseAddress() );
+                ssc.socket().setReceiveBufferSize(
+                        ( ( SocketSessionConfig ) cfg.getSessionConfig() ).getReceiveBufferSize() );
+                
                 // and bind.
-                ssc.socket().bind( req.address, getBacklog() );
+                ssc.socket().bind( req.address, cfg.getBacklog() );
                 ssc.register( selector, SelectionKey.OP_ACCEPT, req );
 
                 channels.put( req.address, ssc );
@@ -499,7 +516,7 @@
                 else
                 {
                     SelectionKey key = ssc.keyFor( selector );
-
+                    request.registrationRequest = ( RegistrationRequest ) key.attachment();
                     key.cancel();
 
                     selector.wakeup(); // wake up again to trigger thread death
@@ -516,63 +533,25 @@
                 synchronized( request )
                 {
                     request.done = true;
-
                     request.notify();
                 }
             }
         }
     }
 
-    public int getReceiveBufferSize()
-    {
-        return receiveBufferSize;
-    }
-
-    /**
-     * @param receiveBufferSize <tt>-1</tt> to use the default value.
-     */
-    public void setReceiveBufferSize( int receiveBufferSize )
-    {
-        this.receiveBufferSize = receiveBufferSize;
-    }
-
-    public boolean isReuseAddress()
-    {
-        return reuseAddress;
-    }
-
-    public void setReuseAddress( boolean reuseAddress )
-    {
-        this.reuseAddress = reuseAddress;
-    }
-
-    public int getBacklog()
-    {
-        return backlog;
-    }
-
-    public void setBacklog( int backlog )
-    {
-        if( backlog <= 0 )
-        {
-            throw new IllegalArgumentException( "backlog: " + backlog );
-        }
-        this.backlog = backlog;
-    }
-
     private static class RegistrationRequest
     {
         private final SocketAddress address;
         private final IoHandler handler;
-        private final IoFilterChainBuilder filterChainBuilder;
+        private final IoAcceptorConfig config;
         private IOException exception;
         private boolean done;
         
-        private RegistrationRequest( SocketAddress address, IoHandler handler, IoFilterChainBuilder filterChainBuilder )
+        private RegistrationRequest( SocketAddress address, IoHandler handler, IoAcceptorConfig config )
         {
             this.address = address;
             this.handler = handler;
-            this.filterChainBuilder = filterChainBuilder;
+            this.config = config;
         }
     }
 
@@ -580,9 +559,8 @@
     private static class CancellationRequest
     {
         private final SocketAddress address;
-
         private boolean done;
-
+        private RegistrationRequest registrationRequest;
         private RuntimeException exception;
         
         private CancellationRequest( SocketAddress address )

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketConnectorDelegate.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketConnectorDelegate.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketConnectorDelegate.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketConnectorDelegate.java Wed Jan 25 21:24:58 2006
@@ -33,9 +33,12 @@
 import org.apache.mina.common.ConnectFuture;
 import org.apache.mina.common.ExceptionMonitor;
 import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoFilterChainBuilder;
+import org.apache.mina.common.IoConnectorConfig;
 import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoServiceConfig;
 import org.apache.mina.common.support.BaseIoConnector;
+import org.apache.mina.transport.socket.nio.SocketConnectorConfig;
+import org.apache.mina.transport.socket.nio.SocketSessionConfig;
 import org.apache.mina.util.Queue;
 
 /**
@@ -51,6 +54,7 @@
     private final IoConnector wrapper;
     private final int id = nextId++;
     private final String threadName = "SocketConnector-" + id;
+    private final IoServiceConfig defaultConfig = new SocketConnectorConfig();
     private Selector selector;
     private final Queue connectQueue = new Queue();
     private final Set managedSessions = Collections.synchronizedSet( new HashSet() );
@@ -64,13 +68,13 @@
         this.wrapper = wrapper;
     }
 
-    public ConnectFuture connect( SocketAddress address, IoHandler handler, IoFilterChainBuilder filterChainBuilder )
+    public ConnectFuture connect( SocketAddress address, IoHandler handler, IoConnectorConfig config )
     {
-        return connect( address, null, handler, filterChainBuilder );
+        return connect( address, null, handler, config );
     }
 
     public ConnectFuture connect( SocketAddress address, SocketAddress localAddress,
-                                  IoHandler handler, IoFilterChainBuilder filterChainBuilder )
+                                  IoHandler handler, IoConnectorConfig config )
     {
         if( address == null )
             throw new NullPointerException( "address" );
@@ -85,9 +89,9 @@
             throw new IllegalArgumentException( "Unexpected local address type: "
                                                 + localAddress.getClass() );
 
-        if( filterChainBuilder == null )
+        if( config == null )
         {
-            filterChainBuilder = IoFilterChainBuilder.NOOP;
+            config = ( IoConnectorConfig ) getDefaultConfig();
         }
         
         SocketChannel ch = null;
@@ -105,7 +109,7 @@
 
             if( ch.connect( address ) )
             {
-                SocketSessionImpl session = newSession( ch, handler, filterChainBuilder );
+                SocketSessionImpl session = newSession( ch, handler, config );
                 success = true;
                 ConnectFuture future = new ConnectFuture();
                 future.setSession( session );
@@ -133,7 +137,7 @@
             }
         }
         
-        ConnectionRequest request = new ConnectionRequest( ch, getConnectTimeout(), handler, filterChainBuilder );
+        ConnectionRequest request = new ConnectionRequest( ch, handler, config );
         synchronized( this )
         {
             try
@@ -163,6 +167,11 @@
         return request;
     }
     
+    public IoServiceConfig getDefaultConfig()
+    {
+        return defaultConfig;
+    }
+    
     private synchronized void startupWorker() throws IOException
     {
         if( worker == null )
@@ -219,7 +228,7 @@
             try
             {
                 ch.finishConnect();
-                SocketSessionImpl session = newSession( ch, entry.handler, entry.filterChainBuilder );
+                SocketSessionImpl session = newSession( ch, entry.handler, entry.config );
                 entry.setSession( session );
                 success = true;
             }
@@ -269,13 +278,15 @@
         }
     }
 
-    private SocketSessionImpl newSession( SocketChannel ch, IoHandler handler, IoFilterChainBuilder filterChainBuilder ) throws IOException
+    private SocketSessionImpl newSession( SocketChannel ch, IoHandler handler, IoConnectorConfig config ) throws IOException
     {
-        SocketSessionImpl session = new SocketSessionImpl( wrapper, managedSessions, ch, handler );
+        SocketSessionImpl session = new SocketSessionImpl(
+                wrapper, managedSessions,
+                ( SocketSessionConfig ) config.getSessionConfig(),
+                ch, handler );
         try
         {
-            this.filterChainBuilder.buildFilterChain( session.getFilterChain() );
-            filterChainBuilder.buildFilterChain( session.getFilterChain() );
+            config.getFilterChainBuilder().buildFilterChain( session.getFilterChain() );
             ( ( SocketFilterChain ) session.getFilterChain() ).sessionCreated( session );
         }
         catch( Throwable e )
@@ -357,14 +368,14 @@
         private final SocketChannel channel;
         private final long deadline;
         private final IoHandler handler;
-        private final IoFilterChainBuilder filterChainBuilder;
+        private final IoConnectorConfig config;
 
-        private ConnectionRequest( SocketChannel channel, int timeout, IoHandler handler, IoFilterChainBuilder filterChainBuilder )
+        private ConnectionRequest( SocketChannel channel, IoHandler handler, IoConnectorConfig config )
         {
             this.channel = channel;
-            this.deadline = System.currentTimeMillis() + timeout * 1000L;
+            this.deadline = System.currentTimeMillis() + config.getConnectTimeoutMillis();
             this.handler = handler;
-            this.filterChainBuilder = filterChainBuilder;
+            this.config = config;
         }
     }
 }

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketIoProcessor.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketIoProcessor.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketIoProcessor.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketIoProcessor.java Wed Jan 25 21:24:58 2006
@@ -278,7 +278,7 @@
 
     private void read( SocketSessionImpl session )
     {
-        ByteBuffer buf = ByteBuffer.allocate( session.getSessionReceiveBufferSize() ); 
+        ByteBuffer buf = ByteBuffer.allocate( session.getReadBufferSize() ); 
         SocketChannel ch = session.getChannel();
 
         try

Added: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketSessionConfigImpl.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketSessionConfigImpl.java?rev=372449&view=auto
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketSessionConfigImpl.java (added)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketSessionConfigImpl.java Wed Jan 25 21:24:58 2006
@@ -0,0 +1,167 @@
+/*
+ *   @(#) $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.transport.socket.nio.support;
+
+import java.io.IOException;
+import java.net.Socket;
+import java.net.SocketException;
+
+import org.apache.mina.common.ExceptionMonitor;
+import org.apache.mina.common.IoConnectorConfig;
+import org.apache.mina.common.RuntimeIOException;
+import org.apache.mina.transport.socket.nio.SocketConnector;
+import org.apache.mina.transport.socket.nio.SocketSessionConfig;
+
+/**
+ * An {@link IoConnectorConfig} for {@link SocketConnector}.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class SocketSessionConfigImpl implements SocketSessionConfig
+{
+    private boolean reuseAddress;
+    private int receiveBufferSize;
+    private int sendBufferSize;
+    private int trafficClass;
+    private boolean keepAlive;
+    private boolean oobInline;
+    private int soLinger;
+    private boolean tcpNoDelay;
+
+    /**
+     * Creates a new instance.
+     * 
+     * @throws RuntimeIOException if failed to get the default configuration
+     */
+    public SocketSessionConfigImpl()
+    {
+        Socket s = null;
+        try
+        {
+            s = new Socket();
+            reuseAddress = s.getReuseAddress();
+            receiveBufferSize = s.getReceiveBufferSize();
+            sendBufferSize = s.getSendBufferSize();
+            trafficClass = s.getTrafficClass();
+            keepAlive = s.getKeepAlive();
+            oobInline = s.getOOBInline();
+            soLinger = s.getSoLinger();
+            tcpNoDelay = s.getTcpNoDelay();
+        }
+        catch( SocketException e )
+        {
+            throw new RuntimeIOException( "Failed to get the default configuration.", e );
+        }
+        finally
+        {
+            if( s != null )
+            {
+                try
+                {
+                    s.close();
+                }
+                catch( IOException e )
+                {
+                    ExceptionMonitor.getInstance().exceptionCaught( e );
+                }
+            }
+        }
+    }
+
+    public boolean isReuseAddress()
+    {
+        return reuseAddress;
+    }
+    
+    public void setReuseAddress( boolean reuseAddress )
+    {
+        this.reuseAddress = reuseAddress;
+    }
+
+    public int getReceiveBufferSize()
+    {
+        return receiveBufferSize;
+    }
+
+    public void setReceiveBufferSize( int receiveBufferSize )
+    {
+        this.receiveBufferSize = receiveBufferSize;
+    }
+
+    public int getSendBufferSize()
+    {
+        return sendBufferSize;
+    }
+
+    public void setSendBufferSize( int sendBufferSize )
+    {
+        this.sendBufferSize = sendBufferSize;
+    }
+
+    public int getTrafficClass()
+    {
+        return trafficClass;
+    }
+
+    public void setTrafficClass( int trafficClass )
+    {
+        this.trafficClass = trafficClass;
+    }
+
+    public boolean isKeepAlive()
+    {
+        return keepAlive;
+    }
+
+    public void setKeepAlive( boolean keepAlive )
+    {
+        this.keepAlive = keepAlive;
+    }
+
+    public boolean isOobInline()
+    {
+        return oobInline;
+    }
+
+    public void setOobInline( boolean oobInline )
+    {
+        this.oobInline = oobInline;
+    }
+
+    public int getSoLinger()
+    {
+        return soLinger;
+    }
+
+    public void setSoLinger( int soLinger )
+    {
+        this.soLinger = soLinger;
+    }
+
+    public boolean isTcpNoDelay()
+    {
+        return tcpNoDelay;
+    }
+
+    public void setTcpNoDelay( boolean tcpNoDelay )
+    {
+        this.tcpNoDelay = tcpNoDelay;
+    }
+}

Propchange: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketSessionConfigImpl.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/socket/nio/support/SocketSessionImpl.java Wed Jan 25 21:24:58 2006
@@ -27,12 +27,14 @@
 import org.apache.mina.common.CloseFuture;
 import org.apache.mina.common.IoFilterChain;
 import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoService;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.IoSessionConfig;
+import org.apache.mina.common.RuntimeIOException;
 import org.apache.mina.common.TransportType;
 import org.apache.mina.common.IoFilter.WriteRequest;
 import org.apache.mina.common.support.BaseIoSession;
-import org.apache.mina.transport.socket.nio.SocketSession;
+import org.apache.mina.transport.socket.nio.SocketSessionConfig;
 import org.apache.mina.util.Queue;
 
 /**
@@ -41,11 +43,10 @@
  * @author The Apache Directory Project (dev@directory.apache.org)
  * @version $Rev$, $Date$
  */
-class SocketSessionImpl extends BaseIoSession implements SocketSession
+class SocketSessionImpl extends BaseIoSession
 {
-    private static final int DEFAULT_READ_BUFFER_SIZE = 1024;
-
     private final IoService manager;
+    private final SocketSessionConfig config = new SocketSessionConfigImpl();
     private final SocketIoProcessor ioProcessor;
     private final SocketFilterChain filterChain;
     private final SocketChannel ch;
@@ -55,13 +56,14 @@
     private final SocketAddress localAddress;
     private final Set managedSessions;    
     private SelectionKey key;
-    private int readBufferSize = DEFAULT_READ_BUFFER_SIZE;
+    private int readBufferSize;
 
     /**
      * Creates a new instance.
      */
     public SocketSessionImpl(
             IoService manager, Set managedSessions,
+            SocketSessionConfig config,
             SocketChannel ch, IoHandler defaultHandler )
     {
         this.manager = manager;
@@ -73,6 +75,17 @@
         this.handler = defaultHandler;
         this.remoteAddress = ch.socket().getRemoteSocketAddress();
         this.localAddress = ch.socket().getLocalSocketAddress();
+        
+        // Apply the initial session settings
+        this.config.setKeepAlive( config.isKeepAlive() );
+        this.config.setOobInline( config.isOobInline() );
+        this.config.setReceiveBufferSize( config.getReceiveBufferSize() );
+        this.readBufferSize = config.getReceiveBufferSize();
+        this.config.setReuseAddress( config.isReuseAddress() );
+        this.config.setSendBufferSize( config.getSendBufferSize() );
+        this.config.setSoLinger( config.getSoLinger() );
+        this.config.setTcpNoDelay( config.isTcpNoDelay() );
+        this.config.setTrafficClass( config.getTrafficClass() );
     }
     
     public IoService getService()
@@ -80,6 +93,11 @@
         return manager;
     }
     
+    public IoSessionConfig getConfig()
+    {
+        return config;
+    }
+    
     SocketIoProcessor getIoProcessor()
     {
         return ioProcessor;
@@ -152,104 +170,217 @@
     {
         return localAddress;
     }
-
-    public boolean getKeepAlive() throws SocketException
-    {
-        return ch.socket().getKeepAlive();
-    }
-
-    public void setKeepAlive( boolean on ) throws SocketException
-    {
-        ch.socket().setKeepAlive( on );
-    }
-
-    public boolean getOOBInline() throws SocketException
-    {
-        return ch.socket().getOOBInline();
-    }
-
-    public void setOOBInline( boolean on ) throws SocketException
-    {
-        ch.socket().setOOBInline( on );
-    }
-
-    public boolean getReuseAddress() throws SocketException
-    {
-        return ch.socket().getReuseAddress();
-    }
-
-    public void setReuseAddress( boolean on ) throws SocketException
-    {
-        ch.socket().setReuseAddress( on );
-    }
-
-    public int getSoLinger() throws SocketException
-    {
-        return ch.socket().getSoLinger();
-    }
-
-    public void setSoLinger( boolean on, int linger ) throws SocketException
-    {
-        ch.socket().setSoLinger( on, linger );
-    }
-
-    public boolean getTcpNoDelay() throws SocketException
-    {
-        return ch.socket().getTcpNoDelay();
-    }
-
-    public void setTcpNoDelay( boolean on ) throws SocketException
-    {
-        ch.socket().setTcpNoDelay( on );
-    }
-
-    public int getTrafficClass() throws SocketException
-    {
-        return ch.socket().getTrafficClass();
-    }
-
-    public void setTrafficClass( int tc ) throws SocketException
-    {
-        ch.socket().setTrafficClass( tc );
-    }
-
-    public int getSendBufferSize() throws SocketException
-    {
-        return ch.socket().getSendBufferSize();
-    }
-
-    public void setSendBufferSize( int size ) throws SocketException
+    
+    protected void updateTrafficMask()
     {
-        ch.socket().setSendBufferSize( size );
+        this.ioProcessor.updateTrafficMask( this );
     }
-
-    public int getReceiveBufferSize() throws SocketException
+    
+    int getReadBufferSize()
     {
-        return ch.socket().getReceiveBufferSize();
+        return readBufferSize;
     }
 
-    public void setReceiveBufferSize( int size ) throws SocketException
+    private class SocketSessionConfigImpl implements SocketSessionConfig
     {
-        ch.socket().setReceiveBufferSize( size );
-    }
+        public boolean isKeepAlive()
+        {
+            try
+            {
+                return ch.socket().getKeepAlive();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
     
-    public int getSessionReceiveBufferSize()
-    {
-        return readBufferSize;
-    }
+        public void setKeepAlive( boolean on )
+        {
+            try
+            {
+                ch.socket().setKeepAlive( on );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
     
-    public void setSessionReceiveBufferSize( int size )
-    {
-        if( size <= 0 )
+        public boolean isOobInline()
         {
-            throw new IllegalArgumentException( "Invalid session receive buffer size: " + size );
+            try
+            {
+                return ch.socket().getOOBInline();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public void setOobInline( boolean on )
+        {
+            try
+            {
+                ch.socket().setOOBInline( on );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public boolean isReuseAddress()
+        {
+            try
+            {
+                return ch.socket().getReuseAddress();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public void setReuseAddress( boolean on )
+        {
+            try
+            {
+                ch.socket().setReuseAddress( on );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public int getSoLinger()
+        {
+            try
+            {
+                return ch.socket().getSoLinger();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public void setSoLinger( int linger )
+        {
+            try
+            {
+                if( linger < 0 )
+                {
+                    ch.socket().setSoLinger( false, 0 );
+                }
+                else
+                {
+                    ch.socket().setSoLinger( true, linger );
+                }
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public boolean isTcpNoDelay()
+        {
+            try
+            {
+                return ch.socket().getTcpNoDelay();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public void setTcpNoDelay( boolean on )
+        {
+            try
+            {
+                ch.socket().setTcpNoDelay( on );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public int getTrafficClass()
+        {
+            try
+            {
+                return ch.socket().getTrafficClass();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public void setTrafficClass( int tc )
+        {
+            try
+            {
+                ch.socket().setTrafficClass( tc );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public int getSendBufferSize()
+        {
+            try
+            {
+                return ch.socket().getSendBufferSize();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public void setSendBufferSize( int size )
+        {
+            try
+            {
+                ch.socket().setSendBufferSize( size );
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public int getReceiveBufferSize()
+        {
+            try
+            {
+                return ch.socket().getReceiveBufferSize();
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
+        }
+    
+        public void setReceiveBufferSize( int size )
+        {
+            try
+            {
+                ch.socket().setReceiveBufferSize( size );
+                SocketSessionImpl.this.readBufferSize = size;
+            }
+            catch( SocketException e )
+            {
+                throw new RuntimeIOException( e );
+            }
         }
-        
-        this.readBufferSize = size;
-    }
-
-    protected void updateTrafficMask()
-    {
-        this.ioProcessor.updateTrafficMask( this );
     }
 }

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java Wed Jan 25 21:24:58 2006
@@ -6,18 +6,21 @@
 import java.io.IOException;
 import java.net.SocketAddress;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.mina.common.IoFilterChainBuilder;
+import org.apache.mina.common.IoAcceptorConfig;
 import org.apache.mina.common.IoFuture;
 import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoServiceConfig;
 import org.apache.mina.common.IoSession;
+import org.apache.mina.common.IoSessionConfig;
 import org.apache.mina.common.support.BaseIoAcceptor;
+import org.apache.mina.common.support.BaseIoAcceptorConfig;
 import org.apache.mina.transport.vmpipe.support.VmPipe;
+import org.apache.mina.util.IdentityHashSet;
 
 /**
  * Binds the specified {@link IoHandler} to the specified
@@ -29,8 +32,17 @@
 public class VmPipeAcceptor extends BaseIoAcceptor
 {
     static final Map boundHandlers = new HashMap();
+    
+    private static final IoSessionConfig CONFIG = new IoSessionConfig() {};
+    private final IoServiceConfig defaultConfig = new BaseIoAcceptorConfig()
+    {
+        public IoSessionConfig getSessionConfig()
+        {
+            return CONFIG;
+        }
+    };
 
-    public void bind( SocketAddress address, IoHandler handler, IoFilterChainBuilder filterChainBuilder ) throws IOException
+    public void bind( SocketAddress address, IoHandler handler, IoAcceptorConfig config ) throws IOException
     {
         if( address == null )
             throw new NullPointerException( "address" );
@@ -40,9 +52,9 @@
             throw new IllegalArgumentException(
                     "address must be VmPipeAddress." );
 
-        if( filterChainBuilder == null )
+        if( config == null )
         {
-            filterChainBuilder = IoFilterChainBuilder.NOOP;
+            config = ( IoAcceptorConfig ) getDefaultConfig();
         }
 
         synchronized( boundHandlers )
@@ -55,11 +67,11 @@
             boundHandlers.put( address, 
                                new VmPipe( this,
                                           ( VmPipeAddress ) address,
-                                          handler, filterChainBuilder ) );
+                                          handler, config ) );
         }
     }
 
-    public Collection getManagedSessions( SocketAddress address )
+    public Set getManagedSessions( SocketAddress address )
     {
         if( address == null )
             throw new NullPointerException( "address" );
@@ -75,7 +87,8 @@
         }
         
         Set managedSessions = pipe.getManagedServerSessions();
-        return Collections.unmodifiableCollection( Arrays.asList( managedSessions.toArray() ) );
+        return Collections.unmodifiableSet(
+                new IdentityHashSet( Arrays.asList( managedSessions.toArray() ) ) );
     }
 
     public void unbind( SocketAddress address )
@@ -96,7 +109,7 @@
         
         Set managedSessions = pipe.getManagedServerSessions();
         
-        if( isDisconnectClientsOnUnbind() && managedSessions != null )
+        if( pipe.getConfig().isDisconnectOnUnbind() && managedSessions != null )
         {
             IoSession[] tempSessions = ( IoSession[] ) 
                                   managedSessions.toArray( new IoSession[ 0 ] );
@@ -137,7 +150,11 @@
             {
                 // Ignored
             }
-            
         }                
+    }
+    
+    public IoServiceConfig getDefaultConfig()
+    {
+        return defaultConfig;
     }
 }

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java Wed Jan 25 21:24:58 2006
@@ -7,9 +7,12 @@
 import java.net.SocketAddress;
 
 import org.apache.mina.common.ConnectFuture;
-import org.apache.mina.common.IoFilterChainBuilder;
+import org.apache.mina.common.IoConnectorConfig;
 import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoServiceConfig;
+import org.apache.mina.common.IoSessionConfig;
 import org.apache.mina.common.support.BaseIoConnector;
+import org.apache.mina.common.support.BaseIoConnectorConfig;
 import org.apache.mina.transport.vmpipe.support.VmPipe;
 import org.apache.mina.transport.vmpipe.support.VmPipeSessionImpl;
 import org.apache.mina.util.AnonymousSocketAddress;
@@ -23,12 +26,21 @@
  */
 public class VmPipeConnector extends BaseIoConnector
 {
-    public ConnectFuture connect( SocketAddress address, IoHandler handler, IoFilterChainBuilder filterChainBuilder ) 
+    private static final IoSessionConfig CONFIG = new IoSessionConfig() {};
+    private final IoServiceConfig defaultConfig = new BaseIoConnectorConfig()
     {
-        return connect( address, null, handler, filterChainBuilder );
+        public IoSessionConfig getSessionConfig()
+        {
+            return CONFIG;
+        }
+    };
+
+    public ConnectFuture connect( SocketAddress address, IoHandler handler, IoConnectorConfig config ) 
+    {
+        return connect( address, null, handler, config );
     }
 
-    public ConnectFuture connect( SocketAddress address, SocketAddress localAddress, IoHandler handler, IoFilterChainBuilder filterChainBuilder )
+    public ConnectFuture connect( SocketAddress address, SocketAddress localAddress, IoHandler handler, IoConnectorConfig config )
     {
         if( address == null )
             throw new NullPointerException( "address" );
@@ -38,9 +50,9 @@
             throw new IllegalArgumentException(
                                                 "address must be VmPipeAddress." );
 
-        if( filterChainBuilder == null )
+        if( config == null )
         {
-            filterChainBuilder = IoFilterChainBuilder.NOOP;
+            config = ( IoConnectorConfig ) getDefaultConfig();
         }
 
         VmPipe entry = ( VmPipe ) VmPipeAcceptor.boundHandlers.get( address );
@@ -59,7 +71,7 @@
                         new Object(), // lock
                         AnonymousSocketAddress.INSTANCE,
                         handler,
-                        filterChainBuilder,
+                        config.getFilterChainBuilder(),
                         entry );
             future.setSession( session );
         }
@@ -68,5 +80,10 @@
             future.setException( e );
         }
         return future;
+    }
+    
+    public IoServiceConfig getDefaultConfig()
+    {
+        return defaultConfig;
     }
 }

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipe.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipe.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipe.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipe.java Wed Jan 25 21:24:58 2006
@@ -7,7 +7,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.mina.common.IoFilterChainBuilder;
+import org.apache.mina.common.IoAcceptorConfig;
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.transport.vmpipe.VmPipeAcceptor;
 import org.apache.mina.transport.vmpipe.VmPipeAddress;
@@ -17,19 +17,19 @@
     private final VmPipeAcceptor acceptor;
     private final VmPipeAddress address;
     private final IoHandler handler;
-    private final IoFilterChainBuilder filterChainBuilder;
+    private final IoAcceptorConfig config;
     private final Set managedClientSessions = Collections.synchronizedSet( new HashSet() );
     private final Set managedServerSessions = Collections.synchronizedSet( new HashSet() );
     
     public VmPipe( VmPipeAcceptor acceptor,
                    VmPipeAddress address,
                    IoHandler handler,
-                   IoFilterChainBuilder filterChainBuilder )
+                   IoAcceptorConfig config )
     {
         this.acceptor = acceptor;
         this.address = address;
         this.handler = handler;
-        this.filterChainBuilder = filterChainBuilder;
+        this.config = config;
     }
 
     public VmPipeAcceptor getAcceptor()
@@ -47,9 +47,9 @@
         return handler;
     }
     
-    public IoFilterChainBuilder getFilterChainBuilder()
+    public IoAcceptorConfig getConfig()
     {
-        return filterChainBuilder;
+        return config;
     }
 
     public Set getManagedClientSessions()

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/transport/vmpipe/support/VmPipeSessionImpl.java Wed Jan 25 21:24:58 2006
@@ -12,14 +12,14 @@
 import org.apache.mina.common.IoFilterChain;
 import org.apache.mina.common.IoFilterChainBuilder;
 import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoService;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.IoSessionConfig;
 import org.apache.mina.common.TransportType;
 import org.apache.mina.common.IoFilter.WriteRequest;
 import org.apache.mina.common.support.BaseIoSession;
 import org.apache.mina.filter.codec.ProtocolDecoder;
 import org.apache.mina.filter.codec.ProtocolEncoder;
-import org.apache.mina.transport.vmpipe.VmPipeSession;
 import org.apache.mina.util.Queue;
 
 /**
@@ -28,8 +28,10 @@
  * @author The Apache Directory Project (dev@directory.apache.org)
  * @version $Rev$, $Date$
  */
-public class VmPipeSessionImpl extends BaseIoSession implements VmPipeSession
+public class VmPipeSessionImpl extends BaseIoSession
 {
+    private static final IoSessionConfig CONFIG = new IoSessionConfig() {};
+    
     private final IoService manager;
     private final SocketAddress localAddress;
     private final SocketAddress remoteAddress;
@@ -62,8 +64,7 @@
         // initialize remote session
         try
         {
-            remoteEntry.getAcceptor().getFilterChainBuilder().buildFilterChain( remoteSession.getFilterChain() );
-            remoteEntry.getFilterChainBuilder().buildFilterChain( remoteSession.getFilterChain() );
+            remoteEntry.getConfig().getFilterChainBuilder().buildFilterChain( remoteSession.getFilterChain() );
             ( ( VmPipeFilterChain ) remoteSession.getFilterChain() ).sessionCreated( remoteSession );
         }
         catch( Throwable t )
@@ -77,7 +78,6 @@
         // initialize client session
         try
         {
-            manager.getFilterChainBuilder().buildFilterChain( filterChain );
             filterChainBuilder.buildFilterChain( filterChain );
             handler.sessionCreated( this );
         }
@@ -120,6 +120,11 @@
     public IoService getService()
     {
         return manager;
+    }
+    
+    public IoSessionConfig getConfig()
+    {
+        return CONFIG;
     }
 
     public IoFilterChain getFilterChain()

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/util/IdentityHashSet.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/util/IdentityHashSet.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/util/IdentityHashSet.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/util/IdentityHashSet.java Wed Jan 25 21:24:58 2006
@@ -19,6 +19,7 @@
 package org.apache.mina.util;
 
 import java.util.AbstractSet;
+import java.util.Collection;
 import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -36,6 +37,11 @@
 
     public IdentityHashSet()
     {
+    }
+    
+    public IdentityHashSet( Collection c )
+    {
+        addAll( c );
     }
 
     public int size()

Modified: directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/util/SessionUtil.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/util/SessionUtil.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/util/SessionUtil.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/main/java/org/apache/mina/util/SessionUtil.java Wed Jan 25 21:24:58 2006
@@ -18,11 +18,10 @@
  */
 package org.apache.mina.util;
 
-import java.net.SocketException;
-
 import org.apache.mina.common.IoSession;
-import org.apache.mina.transport.socket.nio.DatagramSession;
-import org.apache.mina.transport.socket.nio.SocketSession;
+import org.apache.mina.common.IoSessionConfig;
+import org.apache.mina.transport.socket.nio.DatagramSessionConfig;
+import org.apache.mina.transport.socket.nio.SocketSessionConfig;
 
 /**
  * Exception utility.
@@ -32,18 +31,19 @@
  */
 public class SessionUtil
 {
-    public static void initialize( IoSession session ) throws SocketException
+    public static void initialize( IoSession session )
     {
-        if( session instanceof SocketSession )
+        IoSessionConfig cfg = session.getConfig();
+        if( cfg instanceof SocketSessionConfig )
         {
-            SocketSession ss = ( SocketSession ) session;
-            ss.setReuseAddress( true );
-            ss.setKeepAlive( true );
+            SocketSessionConfig sCfg = ( SocketSessionConfig ) cfg;
+            sCfg.setReuseAddress( true );
+            sCfg.setKeepAlive( true );
         }
-        else if( session instanceof DatagramSession )
+        else if( cfg instanceof DatagramSessionConfig )
         {
-            DatagramSession ds = ( DatagramSession ) session;
-            ds.setReuseAddress( true );
+            DatagramSessionConfig dCfg = ( DatagramSessionConfig ) cfg;
+            dCfg.setReuseAddress( true );
         }
     }
 

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/common/FutureTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/common/FutureTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/common/FutureTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/common/FutureTest.java Wed Jan 25 21:24:58 2006
@@ -106,6 +106,11 @@
             {
                 return null;
             }
+
+            public IoSessionConfig getConfig()
+            {
+                return null;
+            }
         };
         
         future.setSession( session );

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/common/IoFilterChainTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/common/IoFilterChainTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/common/IoFilterChainTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/common/IoFilterChainTest.java Wed Jan 25 21:24:58 2006
@@ -299,6 +299,11 @@
         {
             return null;
         }
+
+        public IoSessionConfig getConfig()
+        {
+            return null;
+        }
     }
 
     private class EventOrderTestFilter extends IoFilterAdapter
@@ -414,6 +419,11 @@
                 public int getScheduledWriteRequests()
                 {
                     return 0;
+                }
+
+                public IoSessionConfig getConfig()
+                {
+                    return null;
                 }
             } );
         }

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/StreamWriteFilterTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/StreamWriteFilterTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/StreamWriteFilterTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/StreamWriteFilterTest.java Wed Jan 25 21:24:58 2006
@@ -30,15 +30,14 @@
 
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoAcceptor;
+import org.apache.mina.common.IoConnector;
 import org.apache.mina.common.IoHandlerAdapter;
 import org.apache.mina.common.IoSession;
-import org.apache.mina.common.TransportType;
 import org.apache.mina.common.IoFilter.NextFilter;
 import org.apache.mina.common.IoFilter.WriteRequest;
-import org.apache.mina.registry.Service;
-import org.apache.mina.registry.ServiceRegistry;
-import org.apache.mina.registry.SimpleServiceRegistry;
 import org.apache.mina.transport.socket.nio.SocketAcceptor;
+import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
 import org.apache.mina.transport.socket.nio.SocketConnector;
 import org.apache.mina.util.AvailablePortFinder;
 import org.easymock.AbstractMatcher;
@@ -317,20 +316,19 @@
     
     public void testWriteUsingSocketTransport() throws Exception
     {
-        ServiceRegistry reg = new SimpleServiceRegistry();
-        ( ( SocketAcceptor ) reg.getAcceptor( TransportType.SOCKET ) ).setReuseAddress( true );
+        IoAcceptor acceptor = new SocketAcceptor();
+        ( ( SocketAcceptorConfig ) acceptor.getDefaultConfig() ).setReuseAddress( true );
         SocketAddress address = new InetSocketAddress( "localhost", AvailablePortFinder.getNextAvailable() );
-        Service service = new Service( "stream", TransportType.SOCKET, address );
 
-        SocketConnector connector = new SocketConnector();
-        connector.getFilterChain().addFirst( "threadPool", new ThreadPoolFilter() );
+        IoConnector connector = new SocketConnector();
+        connector.getDefaultConfig().getFilterChain().addFirst( "threadPool", new ThreadPoolFilter() );
         
         FixedRandomInputStream stream = new FixedRandomInputStream( 4 * 1024 * 1024 );
         
         SenderHandler sender = new SenderHandler( stream );
         ReceiverHandler receiver = new ReceiverHandler( stream.size );
         
-        reg.bind( service, sender );
+        acceptor.bind( address, sender );
         
         synchronized( sender.lock )
         {
@@ -343,7 +341,7 @@
             }
         }
         
-        reg.unbindAll();
+        acceptor.unbind( address );
         
         assertEquals( stream.bytesRead, receiver.bytesRead );
         assertEquals( stream.size, receiver.bytesRead );

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/ThreadPoolFilterRegressionTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/ThreadPoolFilterRegressionTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/ThreadPoolFilterRegressionTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/ThreadPoolFilterRegressionTest.java Wed Jan 25 21:24:58 2006
@@ -11,6 +11,7 @@
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoService;
+import org.apache.mina.common.IoSessionConfig;
 import org.apache.mina.common.TransportType;
 import org.apache.mina.common.WriteFuture;
 import org.apache.mina.common.IoFilter.NextFilter;
@@ -190,6 +191,11 @@
         {
             return null;
         }
+
+        public IoSessionConfig getConfig()
+        {
+            return null;
+        }
     }
     
     private static class EventOrderChecker implements NextFilter
@@ -291,6 +297,11 @@
         }
 
         public IoService getService()
+        {
+            return null;
+        }
+
+        public IoSessionConfig getConfig()
         {
             return null;
         }

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/CumulativeProtocolDecoderTest.java Wed Jan 25 21:24:58 2006
@@ -31,6 +31,7 @@
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoService;
+import org.apache.mina.common.IoSessionConfig;
 import org.apache.mina.common.TransportType;
 import org.apache.mina.common.support.BaseIoSession;
 
@@ -229,6 +230,11 @@
         }
 
         public IoService getService()
+        {
+            return null;
+        }
+
+        public IoSessionConfig getConfig()
         {
             return null;
         }

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineDecoderTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineDecoderTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineDecoderTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineDecoderTest.java Wed Jan 25 21:24:58 2006
@@ -30,6 +30,7 @@
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoService;
+import org.apache.mina.common.IoSessionConfig;
 import org.apache.mina.common.TransportType;
 import org.apache.mina.common.support.BaseIoSession;
 import org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput;
@@ -217,6 +218,11 @@
         public int getScheduledWriteRequests()
         {
             return 0;
+        }
+
+        public IoSessionConfig getConfig()
+        {
+            return null;
         }
     }
 }

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineEncoderTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineEncoderTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineEncoderTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/filter/codec/textline/TextLineEncoderTest.java Wed Jan 25 21:24:58 2006
@@ -29,6 +29,7 @@
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoService;
+import org.apache.mina.common.IoSessionConfig;
 import org.apache.mina.common.TransportType;
 import org.apache.mina.common.WriteFuture;
 import org.apache.mina.common.support.BaseIoSession;
@@ -111,6 +112,11 @@
         public int getScheduledWriteRequests()
         {
             return 0;
+        }
+
+        public IoSessionConfig getConfig()
+        {
+            return null;
         }
     }
 }

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/handler/chain/ChainedIoHandlerTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/handler/chain/ChainedIoHandlerTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/handler/chain/ChainedIoHandlerTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/handler/chain/ChainedIoHandlerTest.java Wed Jan 25 21:24:58 2006
@@ -27,6 +27,7 @@
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoService;
+import org.apache.mina.common.IoSessionConfig;
 import org.apache.mina.common.TransportType;
 import org.apache.mina.common.support.BaseIoSession;
 
@@ -91,6 +92,11 @@
                     public int getScheduledWriteRequests()
                     {
                         return 0;
+                    }
+
+                    public IoSessionConfig getConfig()
+                    {
+                        return null;
                     }
                 }, null );
         

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/AbstractBindTest.java Wed Jan 25 21:24:58 2006
@@ -31,8 +31,10 @@
 import org.apache.mina.common.IoHandlerAdapter;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.transport.socket.nio.DatagramAcceptor;
+import org.apache.mina.transport.socket.nio.DatagramSessionConfig;
 import org.apache.mina.transport.socket.nio.SocketAcceptor;
-import org.apache.mina.transport.socket.nio.SocketSession;
+import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
+import org.apache.mina.transport.socket.nio.SocketSessionConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -92,11 +94,11 @@
     {
         if( acceptor instanceof DatagramAcceptor )
         {
-            ( ( DatagramAcceptor ) acceptor ).setReuseAddress( reuseAddress );
+            ( ( DatagramSessionConfig ) acceptor.getDefaultConfig().getSessionConfig() ).setReuseAddress( reuseAddress );
         }
         else if( acceptor instanceof SocketAcceptor )
         {
-            ( ( SocketAcceptor ) acceptor ).setReuseAddress( reuseAddress );
+            ( ( SocketAcceptorConfig ) acceptor.getDefaultConfig() ).setReuseAddress( reuseAddress );
         }
     }
     
@@ -182,9 +184,9 @@
 
         public void sessionCreated( IoSession session )
         {
-            if( session instanceof SocketSession )
+            if( session.getConfig() instanceof SocketSessionConfig )
             {
-                ( ( SocketSession ) session ).setSessionReceiveBufferSize( 2048 );
+                ( ( SocketSessionConfig ) session.getConfig() ).setReceiveBufferSize( 2048 );
             }
 
             session.setIdleTime( IdleStatus.BOTH_IDLE, 10 );

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java Wed Jan 25 21:24:58 2006
@@ -24,12 +24,11 @@
 
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.ConnectFuture;
+import org.apache.mina.common.IoAcceptor;
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoHandlerAdapter;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.TransportType;
-import org.apache.mina.registry.Service;
-import org.apache.mina.registry.SimpleServiceRegistry;
 import org.apache.mina.util.AvailablePortFinder;
 
 /**
@@ -42,12 +41,12 @@
 public abstract class AbstractTrafficControlTest extends TestCase
 {
     protected int port = 0;
-    protected SimpleServiceRegistry registry;
+    protected IoAcceptor acceptor;
     protected TransportType transportType;
     
-    public AbstractTrafficControlTest( TransportType transportType )
+    public AbstractTrafficControlTest( IoAcceptor acceptor )
     {
-        this.transportType = transportType;
+        this.acceptor = acceptor;
     }
 
     protected void setUp() throws Exception
@@ -56,9 +55,7 @@
         
         port = AvailablePortFinder.getNextAvailable();
         
-        registry = new SimpleServiceRegistry();
-        registry.bind( new Service( "traffic", transportType, 
-                                    createServerSocketAddress( port ) ), 
+        acceptor.bind( createServerSocketAddress( port ), 
                        new ServerIoHandler() );
         
     }
@@ -67,7 +64,7 @@
     {
         super.tearDown();
         
-        registry.unbindAll();
+        acceptor.unbind( createServerSocketAddress( port ) );
     }
 
     protected abstract ConnectFuture connect( int port, IoHandler handler) throws Exception;

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramTrafficControlTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramTrafficControlTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramTrafficControlTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/socket/nio/DatagramTrafficControlTest.java Wed Jan 25 21:24:58 2006
@@ -24,7 +24,6 @@
 import org.apache.mina.common.ConnectFuture;
 import org.apache.mina.common.IoConnector;
 import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.TransportType;
 import org.apache.mina.transport.AbstractTrafficControlTest;
 
 /**
@@ -39,7 +38,7 @@
 
     public DatagramTrafficControlTest()
     {
-        super( TransportType.DATAGRAM );
+        super( new DatagramAcceptor() );
     }
 
     protected ConnectFuture connect( int port, IoHandler handler )

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/socket/nio/SocketTrafficControlTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/socket/nio/SocketTrafficControlTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/socket/nio/SocketTrafficControlTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/socket/nio/SocketTrafficControlTest.java Wed Jan 25 21:24:58 2006
@@ -24,7 +24,6 @@
 import org.apache.mina.common.ConnectFuture;
 import org.apache.mina.common.IoConnector;
 import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.TransportType;
 import org.apache.mina.transport.AbstractTrafficControlTest;
 
 /**
@@ -39,7 +38,7 @@
 
     public SocketTrafficControlTest()
     {
-        super( TransportType.SOCKET );
+        super( new SocketAcceptor() );
     }
 
     protected ConnectFuture connect( int port, IoHandler handler )

Modified: directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeTrafficControlTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeTrafficControlTest.java?rev=372449&r1=372448&r2=372449&view=diff
==============================================================================
--- directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeTrafficControlTest.java (original)
+++ directory/sandbox/trustin/dirmina-158/core/src/test/java/org/apache/mina/transport/vmpipe/VmPipeTrafficControlTest.java Wed Jan 25 21:24:58 2006
@@ -23,7 +23,6 @@
 import org.apache.mina.common.ConnectFuture;
 import org.apache.mina.common.IoConnector;
 import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.TransportType;
 import org.apache.mina.transport.AbstractTrafficControlTest;
 
 /**
@@ -38,7 +37,7 @@
 
     public VmPipeTrafficControlTest()
     {
-        super( TransportType.VM_PIPE );
+        super( new VmPipeAcceptor() );
     }
 
     protected ConnectFuture connect( int port, IoHandler handler )