From commits-return-4905-apmail-directory-commits-archive=directory.apache.org@directory.apache.org Tue Jun 07 03:36:22 2005 Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 16604 invoked from network); 7 Jun 2005 03:36:22 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 7 Jun 2005 03:36:22 -0000 Received: (qmail 38819 invoked by uid 500); 7 Jun 2005 03:36:21 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 38784 invoked by uid 500); 7 Jun 2005 03:36:21 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 38769 invoked by uid 99); 7 Jun 2005 03:36:20 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Mon, 06 Jun 2005 20:36:15 -0700 Received: (qmail 16536 invoked by uid 65534); 7 Jun 2005 03:36:10 -0000 Message-ID: <20050607033610.16535.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Subject: svn commit: r188680 - in /directory/network/branches/dirmina-39: ./ src/java/org/apache/mina/common/ src/java/org/apache/mina/filter/ src/java/org/apache/mina/filter/codec/ src/java/org/apache/mina/handler/ src/java/org/apache/mina/transport/socket/nio/ src/test/org/apache/mina/transport/socket/nio/ Date: Tue, 07 Jun 2005 03:36:07 -0000 To: commits@directory.apache.org From: trustin@apache.org X-Mailer: svnmailer-1.0.0-dev X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: trustin Date: Mon Jun 6 20:36:04 2005 New Revision: 188680 URL: http://svn.apache.org/viewcvs?rev=3D188680&view=3Drev Log: Branching to resolve DIRMINA-39 Added: directory/network/branches/dirmina-39/ - copied from r179491, directory/network/trunk/ directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/S= SLFilter.java - copied, changed from r188663, directory/network/trunk/src/java/org/= apache/mina/filter/SSLFilter.java directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/S= SLHandler.java - copied, changed from r188663, directory/network/trunk/src/java/org/= apache/mina/filter/SSLHandler.java directory/network/branches/dirmina-39/src/java/org/apache/mina/handler/= DemuxingIoHandler.java - copied unchanged from r188659, directory/network/trunk/src/java/org= /apache/mina/handler/DemuxingIoHandler.java directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/DatagramAcceptor.java - copied unchanged from r188654, directory/network/trunk/src/java/org= /apache/mina/transport/socket/nio/DatagramAcceptor.java directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/DatagramConnector.java - copied, changed from r188654, directory/network/trunk/src/java/org/= apache/mina/transport/socket/nio/DatagramConnector.java directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/SocketAcceptor.java - copied unchanged from r188654, directory/network/trunk/src/java/org= /apache/mina/transport/socket/nio/SocketAcceptor.java directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/SocketConnector.java - copied unchanged from r188654, directory/network/trunk/src/java/org= /apache/mina/transport/socket/nio/SocketConnector.java directory/network/branches/dirmina-39/src/test/org/apache/mina/transpor= t/socket/nio/DatagramBindTest.java - copied unchanged from r188654, directory/network/trunk/src/test/org= /apache/mina/transport/socket/nio/DatagramBindTest.java directory/network/branches/dirmina-39/src/test/org/apache/mina/transpor= t/socket/nio/SocketBindTest.java - copied unchanged from r188654, directory/network/trunk/src/test/org= /apache/mina/transport/socket/nio/SocketBindTest.java Modified: directory/network/branches/dirmina-39/project.xml directory/network/branches/dirmina-39/src/java/org/apache/mina/common/A= bstractIoFilterChain.java directory/network/branches/dirmina-39/src/java/org/apache/mina/common/B= aseIoSession.java directory/network/branches/dirmina-39/src/java/org/apache/mina/common/B= yteBuffer.java directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oFilter.java directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oFilterAdapter.java directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oSession.java directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oSessionFilterChain.java directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oSessionManagerFilterChain.java directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/L= oggingFilter.java directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/T= hreadPoolFilter.java directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/c= odec/ProtocolCodecFilter.java directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/c= odec/ProtocolEncoderOutput.java directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/c= odec/SimpleProtocolEncoderOutput.java directory/network/branches/dirmina-39/src/java/org/apache/mina/handler/= StreamIoHandler.java directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/DatagramSession.java directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/DatagramSessionManagerFilterChain.java directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/SocketSession.java directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/SocketSessionManagerFilterChain.java Modified: directory/network/branches/dirmina-39/project.xml URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/pr= oject.xml?rev=3D188680&r1=3D179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/project.xml (original) +++ directory/network/branches/dirmina-39/project.xml Mon Jun 6 20:36:04 2= 005 @@ -71,6 +71,13 @@ =20 =20 + + concurrent + concurrent + 1.3.4 + http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concu= rrent/intro.html + + Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/co= mmon/AbstractIoFilterChain.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/common/AbstractIoFilterChain.java?rev=3D188680&r1=3D= 179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/common/A= bstractIoFilterChain.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/common/A= bstractIoFilterChain.java Mon Jun 6 20:36:04 2005 @@ -28,6 +28,8 @@ import org.apache.mina.common.IoFilter.NextFilter; import org.apache.mina.util.ByteBufferUtil; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * An abstract implementation of {@link IoFilterChain} that provides * common operations for developers to extend protocol layer. @@ -39,9 +41,10 @@ *
  • * *=20 - * The only method a developer should implement is {@link #doWrite(IoSessi= on, Object)}. - * This method is invoked when filter chain is evaluated for - * {@link IoFilter#filterWrite(NextFilter, IoSession, Object)} and=20 + * The only method a developer should implement is + * {@link #doWrite(IoSession, Object, FutureResult)}. This method is invo= ked + * when filter chain is evaluated for + * {@link IoFilter#filterWrite(NextFilter, IoSession, Object, FutureResult= )} and=20 * finally to be written out. *=20 * @author The Apache Directory Project @@ -106,7 +109,7 @@ } =20 public void filterWrite( NextFilter nextFilter, IoSession sess= ion, - Object message ) + Object message, FutureResult future ) { if( message =3D=3D null ) { @@ -115,7 +118,7 @@ =20 if( session.getTransportType().getEnvelopeType().isAssigna= bleFrom( message.getClass() ) ) { - doWrite( session, message ); + doWrite( session, message, future ); } else { @@ -184,9 +187,10 @@ } =20 public void filterWrite( NextFilter nextFilter, - IoSession session, Object message ) t= hrows Exception + IoSession session, Object message, + FutureResult future ) throws Exceptio= n { - nextFilter.filterWrite( session, message ); + nextFilter.filterWrite( session, message, future ); } }; } @@ -436,15 +440,15 @@ } } =20 - public void filterWrite( IoSession session, Object message ) + public void filterWrite( IoSession session, Object message, FutureResu= lt future ) { Entry tail =3D this.tail; - callPreviousFilterWrite( tail, session, message ); + callPreviousFilterWrite( tail, session, message, future ); } =20 private void callPreviousFilterWrite( Entry entry, IoSession session, - Object message ) + Object message, FutureResult fut= ure ) { if( message =3D=3D null ) { @@ -453,7 +457,7 @@ =20 try { - entry.filter.filterWrite( entry.nextFilter, session, message )= ; + entry.filter.filterWrite( entry.nextFilter, session, message, = future ); } catch( Throwable e ) { @@ -486,7 +490,7 @@ return list; } =20 - protected abstract void doWrite( IoSession session, Object message ); + protected abstract void doWrite( IoSession session, Object message, Fu= tureResult future ); =20 private class Entry { @@ -556,10 +560,10 @@ callNextMessageSent( nextEntry, session, message ); } =20 - public void filterWrite( IoSession session, Object message= ) + public void filterWrite( IoSession session, Object message= , FutureResult future ) { Entry nextEntry =3D Entry.this.prevEntry; - callPreviousFilterWrite( nextEntry, session, message )= ; + callPreviousFilterWrite( nextEntry, session, message, = future ); } }; } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/co= mmon/BaseIoSession.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/common/BaseIoSession.java?rev=3D188680&r1=3D179491&r= 2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/common/B= aseIoSession.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/common/B= aseIoSession.java Mon Jun 6 20:36:04 2005 @@ -51,11 +51,6 @@ { } =20 - public void close() - { - this.close( false ); - } - public Object getAttachment() { return attributes.get( "" ); Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/co= mmon/ByteBuffer.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/common/ByteBuffer.java?rev=3D188680&r1=3D179491&r2= =3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/common/B= yteBuffer.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/common/B= yteBuffer.java Mon Jun 6 20:36:04 2005 @@ -36,6 +36,8 @@ import org.apache.mina.filter.codec.ProtocolEncoderOutput; import org.apache.mina.util.Stack; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * A pooled byte buffer used by MINA applications. *

    @@ -74,7 +76,7 @@ * because MINA will release it automatically when: *

      *
    • You pass the buffer by calling {@link IoSession#write(Object)}. - *
    • You pass the buffer by calling {@link NextFilter#filterWrite(IoSe= ssion,Object)}.
    • + *
    • You pass the buffer by calling {@link NextFilter#filterWrite(IoSe= ssion,Object,FutureResult)}.
    • *
    • You pass the buffer by calling {@link ProtocolEncoderOutput#write= (ByteBuffer)}.
    • *
    * And, you don't need to release any {@link ByteBuffer} which is passed a= s a parameter Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/co= mmon/IoFilter.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/common/IoFilter.java?rev=3D188680&r1=3D179491&r2=3D1= 88680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oFilter.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oFilter.java Mon Jun 6 20:36:04 2005 @@ -18,6 +18,8 @@ */ package org.apache.mina.common; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + =20 /** * A filter which intercepts {@link IoHandler} events like Servlet @@ -83,7 +85,7 @@ /** * Filters {@link IoSession#write(Object)} method invocation. */ - void filterWrite( NextFilter nextFilter, IoSession session, Object mes= sage ) throws Exception; + void filterWrite( NextFilter nextFilter, IoSession session, Object mes= sage, FutureResult future ) throws Exception; =20 public interface NextFilter { @@ -93,6 +95,6 @@ void exceptionCaught( IoSession session, Throwable cause ); void messageReceived( IoSession session, Object message ); void messageSent( IoSession session, Object message ); - void filterWrite( IoSession session, Object message ); + void filterWrite( IoSession session, Object message, FutureResult = future ); } } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/co= mmon/IoFilterAdapter.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/common/IoFilterAdapter.java?rev=3D188680&r1=3D179491= &r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oFilterAdapter.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oFilterAdapter.java Mon Jun 6 20:36:04 2005 @@ -18,6 +18,8 @@ */ package org.apache.mina.common; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + =20 /** * An abstract adapter class for {@link IoFilter}. You can extend @@ -59,8 +61,8 @@ nextFilter.messageSent( session, message ); } =20 - public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message ) throws Exception + public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message, FutureResult future ) throws Exception { - nextFilter.filterWrite( session, message ); + nextFilter.filterWrite( session, message, future ); } } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/co= mmon/IoSession.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/common/IoSession.java?rev=3D188680&r1=3D179491&r2=3D= 188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oSession.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oSession.java Mon Jun 6 20:36:04 2005 @@ -21,6 +21,8 @@ import java.net.SocketAddress; import java.util.Set; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * A handle which represents connection between two endpoints regardless o= f=20 * transport types. @@ -46,26 +48,21 @@ IoFilterChain getFilterChain(); =20 /** - * Writes the specified message to remote peer. This ope= ration - * is asynchronous; {@link IoHandler#messageSent(IoSession, Object)} + * Writes the specified message to remote peer. This + * operation is asynchronous; {@link IoHandler#messageSent(IoSession, = Object)} * will be invoked when the message is actually sent to remote peer. + * You can also ait for the returned {@link FutureResult} if you want + * to wait for the session actually closed. */ - void write( Object message ); + FutureResult write( Object message ); =20 /** - * Closes this session immediately. Calling method is identical with - * calling close( false ). + * Closes this session immediately. This operation is asynthronous. + * Wait for the returned {@link FutureResult} if you want to wait for + * the session actually closed. */ - void close(); + FutureResult close(); =20 - /** - * Closes this session immediately. - *=20 - * @param wait true if you want to wait until closing process= is - * complete. - */ - void close( boolean wait ); - =20 /** * Returns an attachment of this session. * This method is identical with getAttribute( "" ). Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/co= mmon/IoSessionFilterChain.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/common/IoSessionFilterChain.java?rev=3D188680&r1=3D1= 79491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oSessionFilterChain.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oSessionFilterChain.java Mon Jun 6 20:36:04 2005 @@ -18,6 +18,8 @@ */ package org.apache.mina.common; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * An {@link IoFilterChain} that forwards filterWrite * requests to the specified {@link IoSessionManagerFilterChain}. @@ -37,8 +39,8 @@ this.managerChain =3D managerChain; } =20 - protected void doWrite( IoSession session, Object message ) + protected void doWrite( IoSession session, Object message, FutureResul= t future ) { - managerChain.filterWrite( session, message ); + managerChain.filterWrite( session, message, future ); } } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/co= mmon/IoSessionManagerFilterChain.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/common/IoSessionManagerFilterChain.java?rev=3D188680= &r1=3D179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oSessionManagerFilterChain.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/common/I= oSessionManagerFilterChain.java Mon Jun 6 20:36:04 2005 @@ -18,6 +18,8 @@ */ package org.apache.mina.common; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * An {@link IoFilterChain} that forwards all events * except filterWrite to the {@link IoSessionFilterChain} @@ -82,9 +84,10 @@ } =20 public void filterWrite( NextFilter nextFilter, - IoSession session, Object message ) + IoSession session, Object message, + FutureResult future ) { - nextFilter.filterWrite( session, message ); + nextFilter.filterWrite( session, message, future ); } }; } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/fi= lter/LoggingFilter.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/filter/LoggingFilter.java?rev=3D188680&r1=3D179491&r= 2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/L= oggingFilter.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/L= oggingFilter.java Mon Jun 6 20:36:04 2005 @@ -26,6 +26,8 @@ import org.apache.mina.common.IoSession; import org.apache.mina.util.SessionLog; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * Logs all MINA protocol events to {@link Logger}. *=20 @@ -111,9 +113,9 @@ nextFilter.messageSent( session, message ); } =20 - public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message) + public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message, FutureResult future ) { SessionLog.log( defaultLevel, session, "WRITE: " + message ); - nextFilter.filterWrite( session, message ); + nextFilter.filterWrite( session, message, future ); } } Copied: directory/network/branches/dirmina-39/src/java/org/apache/mina/filt= er/SSLFilter.java (from r188663, directory/network/trunk/src/java/org/apach= e/mina/filter/SSLFilter.java) URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/filter/SSLFilter.java?p2=3Ddirectory/network/branche= s/dirmina-39/src/java/org/apache/mina/filter/SSLFilter.java&p1=3Ddirectory/= network/trunk/src/java/org/apache/mina/filter/SSLFilter.java&r1=3D188663&r2= =3D188680&rev=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java = (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/S= SLFilter.java Mon Jun 6 20:36:04 2005 @@ -33,6 +33,8 @@ import org.apache.mina.common.IoFilterAdapter; import org.apache.mina.common.IoSession; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * An SSL filter that encrypts and decrypts the data exchanged in the sess= ion. * This filter uses an {@link SSLEngine} which was introduced in Java 5, s= o=20 @@ -285,7 +287,7 @@ } } =20 - public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message ) throws SSLException + public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message, FutureResult future ) throws SSLException { ByteBuffer buf =3D ( ByteBuffer ) message; =20 @@ -304,7 +306,7 @@ { log.log( Level.FINEST, session + " already encrypted= : " + buf ); } - nextFilter.filterWrite( session, buf ); + nextFilter.filterWrite( session, buf, future ); return; } =20 @@ -326,7 +328,7 @@ { log.log( Level.FINEST, session + " encrypted buf: " + = encryptedBuffer); } - nextFilter.filterWrite( session, encryptedBuffer ); + nextFilter.filterWrite( session, encryptedBuffer, future ); return; } else @@ -344,7 +346,7 @@ { log.log( Level.FINEST, session + " Handshaking is = not complete yet. Buffering write request." ); } - handler.scheduleWrite( nextFilter, buf ); + handler.scheduleWrite( nextFilter, buf, future ); } } } @@ -419,7 +421,9 @@ log.log( Level.FINEST, session + " session write: " + writ= eBuffer ); } //debug("outNetBuffer (after copy): {0}", sslHandler.getOutNet= Buffer()); - filterWrite( nextFilter, session, writeBuffer ); + =20 + // TODO: FutureResult is not used here. Can we reuse it? + filterWrite( nextFilter, session, writeBuffer, new FutureResul= t() ); =20 // loop while more writes required to complete handshake while( sslHandler.needToCompleteInitialHandshake() ) Copied: directory/network/branches/dirmina-39/src/java/org/apache/mina/filt= er/SSLHandler.java (from r188663, directory/network/trunk/src/java/org/apac= he/mina/filter/SSLHandler.java) URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/filter/SSLHandler.java?p2=3Ddirectory/network/branch= es/dirmina-39/src/java/org/apache/mina/filter/SSLHandler.java&p1=3Ddirector= y/network/trunk/src/java/org/apache/mina/filter/SSLHandler.java&r1=3D188663= &r2=3D188680&rev=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/trunk/src/java/org/apache/mina/filter/SSLHandler.java= (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/S= SLHandler.java Mon Jun 6 20:36:04 2005 @@ -32,6 +32,8 @@ import org.apache.mina.common.IoFilter.NextFilter; import org.apache.mina.util.Queue; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * A helper class using the SSLEngine API to decrypt/encrypt data. *

    @@ -51,9 +53,7 @@ =20 private final IoSession session; =20 - private final Queue nextFilterQueue =3D new Queue(); - =20 - private final Queue writeBufferQueue =3D new Queue(); + private final Queue scheduledWrites =3D new Queue(); =20 private SSLEngine sslEngine; =20 @@ -185,25 +185,22 @@ return ( initialHandshakeStatus =3D=3D SSLEngineResult.HandshakeSt= atus.NEED_WRAP && !closed ); } =20 - public synchronized void scheduleWrite( NextFilter nextFilter, org.apa= che.mina.common.ByteBuffer buf ) + public synchronized void scheduleWrite( NextFilter nextFilter, org.apa= che.mina.common.ByteBuffer buf, FutureResult future ) { - nextFilterQueue.push( nextFilter ); - writeBufferQueue.push( buf ); + scheduledWrites.push( new ScheduledWrite( nextFilter, buf, future = ) ); } =20 public synchronized void flushScheduledWrites() throws SSLException { - NextFilter nextFilter; - org.apache.mina.common.ByteBuffer scheduledBuf; + ScheduledWrite scheduledWrite; =20 - while( ( scheduledBuf =3D ( org.apache.mina.common.ByteBuffer ) wr= iteBufferQueue.pop() ) !=3D null ) + while( ( scheduledWrite =3D ( ScheduledWrite ) scheduledWrites.pop= () ) !=3D null ) { if( log.isLoggable( Level.FINEST ) ) { - log.log( Level.FINEST, session + " Flushing buffered write= request: " + scheduledBuf ); + log.log( Level.FINEST, session + " Flushing buffered write= request: " + scheduledWrite.buf ); } - nextFilter =3D ( NextFilter ) nextFilterQueue.pop(); - parent.filterWrite( nextFilter, session, scheduledBuf ); + parent.filterWrite( scheduledWrite.nextFilter, session, schedu= ledWrite.buf, scheduledWrite.future ); } } =20 @@ -667,5 +664,19 @@ throw new SSLException( "Improper close state: " + result ); } outNetBuffer.flip(); + } + =20 + private static class ScheduledWrite + { + private final NextFilter nextFilter; + private final org.apache.mina.common.ByteBuffer buf; + private final FutureResult future;=20 + =20 + public ScheduledWrite( NextFilter nextFilter, org.apache.mina.comm= on.ByteBuffer buf, FutureResult future ) + { + this.nextFilter =3D nextFilter; + this.buf =3D buf; + this.future =3D future; + } } } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/fi= lter/ThreadPoolFilter.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/filter/ThreadPoolFilter.java?rev=3D188680&r1=3D17949= 1&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/T= hreadPoolFilter.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/T= hreadPoolFilter.java Mon Jun 6 20:36:04 2005 @@ -27,6 +27,8 @@ import org.apache.mina.util.EventType; import org.apache.mina.util.ThreadPool; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * A Thread-pooling filter. This filter forwards {@link IoHandler} events * to its thread pool. @@ -118,8 +120,8 @@ } } =20 - public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message ) + public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message, FutureResult future ) { - nextFilter.filterWrite( session, message ); + nextFilter.filterWrite( session, message, future ); } } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/fi= lter/codec/ProtocolCodecFilter.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=3D188680&r= 1=3D179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/c= odec/ProtocolCodecFilter.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/c= odec/ProtocolCodecFilter.java Mon Jun 6 20:36:04 2005 @@ -6,6 +6,8 @@ import org.apache.mina.common.IoSession; import org.apache.mina.util.Queue; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + public class ProtocolCodecFilter extends IoFilterAdapter { public static final String ENCODER =3D ProtocolCodecFilter.class.getNa= me() + ".encoder"; @@ -74,7 +76,7 @@ } } =20 - public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message ) throws Exception + public void filterWrite( NextFilter nextFilter, IoSession session, Obj= ect message, FutureResult future ) throws Exception { ProtocolEncoder encoder =3D getEncoder( session ); if( message =3D=3D null ) @@ -82,17 +84,13 @@ throw new NullPointerException( "message" ); } =20 - SimpleProtocolEncoderOutput encoderOut =3D getEncoderOut( session = ); - Queue queue =3D encoderOut.getBufferQueue(); + ProtocolEncoderOutputImpl encoderOut =3D getEncoderOut( session ); + encoderOut.nextFilter =3D nextFilter; + encoderOut.message =3D message; + encoderOut.future =3D future; + =20 encoder.encode( session, message, encoderOut ); - for( ;; ) - { - ByteBuffer buf =3D ( ByteBuffer ) queue.pop(); - if( buf =3D=3D null ) - break; - =20 - nextFilter.filterWrite( session, new MessageByteBuffer( buf, m= essage ) ); - } + encoderOut.flush(); } =20 private ProtocolEncoder getEncoder( IoSession session ) @@ -106,12 +104,12 @@ return encoder; } =20 - private SimpleProtocolEncoderOutput getEncoderOut( IoSession session ) + private ProtocolEncoderOutputImpl getEncoderOut( IoSession session ) { - SimpleProtocolEncoderOutput out =3D ( SimpleProtocolEncoderOutput = ) session.getAttribute( ENCODER_OUT ); + ProtocolEncoderOutputImpl out =3D ( ProtocolEncoderOutputImpl ) se= ssion.getAttribute( ENCODER_OUT ); if( out =3D=3D null ) { - out =3D new SimpleProtocolEncoderOutput(); + out =3D new ProtocolEncoderOutputImpl( session ); session.setAttribute( ENCODER_OUT, out ); } return out; @@ -147,6 +145,25 @@ { super( buf ); this.message =3D message; + } + } + =20 + private static class ProtocolEncoderOutputImpl extends SimpleProtocolE= ncoderOutput + { + private final IoSession session; + private NextFilter nextFilter; + private Object message; + private FutureResult future; + =20 + public ProtocolEncoderOutputImpl( IoSession session ) + { + this.session =3D session; + } + + protected FutureResult doFlush( ByteBuffer buf ) + { + nextFilter.filterWrite( session, new MessageByteBuffer( buf, m= essage ), future ); + return null; } } } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/fi= lter/codec/ProtocolEncoderOutput.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/filter/codec/ProtocolEncoderOutput.java?rev=3D188680= &r1=3D179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/c= odec/ProtocolEncoderOutput.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/c= odec/ProtocolEncoderOutput.java Mon Jun 6 20:36:04 2005 @@ -20,6 +20,8 @@ =20 import org.apache.mina.common.ByteBuffer; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * Callback for {@link ProtocolEncoder} to generate encoded {@link ByteBuf= fer}s. * {@link ProtocolEncoder} must call {@link #write(ByteBuffer)} for each d= ecoded @@ -46,4 +48,12 @@ * network packets. */ void mergeAll(); + =20 + /** + * Flushes all buffers you wrote via {@link #write(ByteBuffer)} to + * the session. This operation is asynchronous; please wait for + * the returned {@link FutureResult} if you want to wait for + * the buffers flushed. + */ + FutureResult flush(); } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/fi= lter/codec/SimpleProtocolEncoderOutput.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/filter/codec/SimpleProtocolEncoderOutput.java?rev=3D= 188680&r1=3D179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/c= odec/SimpleProtocolEncoderOutput.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/c= odec/SimpleProtocolEncoderOutput.java Mon Jun 6 20:36:04 2005 @@ -6,6 +6,8 @@ import org.apache.mina.common.ByteBuffer; import org.apache.mina.util.Queue; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * A {@link ProtocolEncoderOutput} based on queue. * @@ -13,9 +15,8 @@ * @author Trustin Lee (trustin@apache.org) * @version $Rev$, $Date$ */ -public class SimpleProtocolEncoderOutput implements ProtocolEncoderOutput +public abstract class SimpleProtocolEncoderOutput implements ProtocolEncod= erOutput { - private final Queue bufferQueue =3D new Queue(); =20 public SimpleProtocolEncoderOutput() @@ -69,4 +70,31 @@ newBuf.flip(); bufferQueue.push(newBuf); } + =20 + public FutureResult flush() + { + Queue bufferQueue =3D this.bufferQueue; + FutureResult future =3D null; + for( ;; ) + { + ByteBuffer buf =3D ( ByteBuffer ) bufferQueue.pop(); + if( buf =3D=3D null ) + { + break; + } + =20 + future =3D doFlush( buf ); + } + =20 + if( future =3D=3D null ) + { + // Nothing is written; future is now. + future =3D new FutureResult(); + future.set( Boolean.FALSE ); + } + =20 + return future; + } + =20 + protected abstract FutureResult doFlush( ByteBuffer buf ); } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/ha= ndler/StreamIoHandler.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/handler/StreamIoHandler.java?rev=3D188680&r1=3D17949= 1&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/handler/= StreamIoHandler.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/handler/= StreamIoHandler.java Mon Jun 6 20:36:04 2005 @@ -250,7 +250,7 @@ =20 public void close() { - session.close( true ); + session.close(); } =20 public void flush() Copied: directory/network/branches/dirmina-39/src/java/org/apache/mina/tran= sport/socket/nio/DatagramConnector.java (from r188654, directory/network/tr= unk/src/java/org/apache/mina/transport/socket/nio/DatagramConnector.java) URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/transport/socket/nio/DatagramConnector.java?p2=3Ddir= ectory/network/branches/dirmina-39/src/java/org/apache/mina/transport/socke= t/nio/DatagramConnector.java&p1=3Ddirectory/network/trunk/src/java/org/apac= he/mina/transport/socket/nio/DatagramConnector.java&r1=3D188654&r2=3D188680= &rev=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/D= atagramConnector.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/DatagramConnector.java Mon Jun 6 20:36:04 2005 @@ -491,6 +491,7 @@ { exceptionMonitor.exceptionCaught( this, e ); } + // FIXME: call closeFuture.set( Boolean.TRUE ) here key.cancel(); selector.wakeup(); // wake up again to trigger thread deat= h } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/tr= ansport/socket/nio/DatagramSession.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/transport/socket/nio/DatagramSession.java?rev=3D1886= 80&r1=3D179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/DatagramSession.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/DatagramSession.java Mon Jun 6 20:36:04 2005 @@ -33,6 +33,8 @@ import org.apache.mina.common.TransportType; import org.apache.mina.util.Queue; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * An {@link IoSession} for datagram transport (UDP/IP). *=20 @@ -59,7 +61,7 @@ =20 private SelectionKey key; =20 - private boolean disposed; + private final FutureResult closeFuture =3D new FutureResult(); =20 /** * Creates a new instance. @@ -107,40 +109,21 @@ return handler; } =20 - synchronized void notifyClose() - { - if( !disposed ) - { - disposed =3D true; - notify(); - } - } - - public synchronized void close( boolean wait ) + public synchronized FutureResult close() { - if( disposed ) + if( !closeFuture.isReady() ) { - return; - } - - IoSessionManager manager =3D managerFilterChain.getManager(); - if( manager instanceof DatagramConnector ) - { - ( ( DatagramConnector ) manager ).closeSession( this ); - if( wait ) + IoSessionManager manager =3D managerFilterChain.getManager(); + if( manager instanceof DatagramConnector ) + { + ( ( DatagramConnector ) manager ).closeSession( this ); + } + else { - while( disposed ) - { - try - { - wait(); - } - catch( InterruptedException e ) - { - } - } + closeFuture.set( Boolean.TRUE ); } } + return closeFuture; } =20 Queue getWriteBufferQueue() @@ -148,9 +131,11 @@ return writeBufferQueue; } =20 - public void write( Object message ) + public FutureResult write( Object message ) { - filterChain.filterWrite( this, message ); + FutureResult future =3D new FutureResult(); + filterChain.filterWrite( this, message, future ); + return future; } =20 public TransportType getTransportType() Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/tr= ansport/socket/nio/DatagramSessionManagerFilterChain.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/transport/socket/nio/DatagramSessionManagerFilterCha= in.java?rev=3D188680&r1=3D179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/DatagramSessionManagerFilterChain.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/DatagramSessionManagerFilterChain.java Mon Jun 6 20:36:04 2005 @@ -5,6 +5,8 @@ import org.apache.mina.common.IoSessionManagerFilterChain; import org.apache.mina.util.Queue; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * An {@link IoFilterChain} for datagram transport (UDP/IP). *=20 @@ -17,7 +19,7 @@ super( processor ); } =20 - protected void doWrite( IoSession session, Object message ) + protected void doWrite( IoSession session, Object message, FutureResul= t future ) { DatagramSession s =3D ( DatagramSession ) session; Queue writeBufferQueue =3D s.getWriteBufferQueue(); @@ -27,6 +29,6 @@ writeBufferQueue.push( message ); } =20 - ( ( DatagramSessionManager ) getManager() ).flushSession( s ); + ( ( DatagramSessionManager ) getManager() ).flushSession( s, futur= e ); } } Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/tr= ansport/socket/nio/SocketSession.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/transport/socket/nio/SocketSession.java?rev=3D188680= &r1=3D179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/SocketSession.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/SocketSession.java Mon Jun 6 20:36:04 2005 @@ -32,6 +32,8 @@ import org.apache.mina.common.TransportType; import org.apache.mina.util.Queue; =20 +import EDU.oswego.cs.dl.util.concurrent.FutureResult; + /** * An {@link IoSession} for socket transport (TCP/IP). *=20 @@ -58,7 +60,7 @@ =20 private SelectionKey key; =20 - private boolean disposed; + private FutureResult closeFuture =3D new FutureResult(); =20 /** * Creates a new instance. @@ -106,37 +108,14 @@ return handler; } =20 - synchronized void notifyClose() + public synchronized FutureResult close( boolean wait ) { - if( !disposed ) + if( !closeFuture.isReady() ) { - disposed =3D true; - notify(); + SocketIoProcessor.getInstance().removeSession( this ); } - } - =20 =20 - public synchronized void close( boolean wait ) - { - if( disposed ) - { - return; - } - - SocketIoProcessor.getInstance().removeSession( this ); - if( wait ) - { - while( disposed ) - { - try - { - wait(); - } - catch( InterruptedException e ) - { - } - } - } + return closeFuture; } =20 Queue getWriteBufferQueue() Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/tr= ansport/socket/nio/SocketSessionManagerFilterChain.java URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/sr= c/java/org/apache/mina/transport/socket/nio/SocketSessionManagerFilterChain= .java?rev=3D188680&r1=3D179491&r2=3D188680&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/SocketSessionManagerFilterChain.java (original) +++ directory/network/branches/dirmina-39/src/java/org/apache/mina/transpor= t/socket/nio/SocketSessionManagerFilterChain.java Mon Jun 6 20:36:04 2005 @@ -19,7 +19,7 @@ super( manager ); } =20 - protected void doWrite( IoSession session, Object message ) + protected void doWrite( IoSession session, Object message, FutureResul= t future ) { SocketSession s =3D ( SocketSession ) session; Queue writeBufferQueue =3D s.getWriteBufferQueue(); @@ -30,6 +30,6 @@ writeBufferQueue.push( message ); } =20 - SocketIoProcessor.getInstance().flushSession( s ); + SocketIoProcessor.getInstance().flushSession( s, future ); } }