You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/10/19 09:40:47 UTC
svn commit: r326428 - in /directory/network:
branches/0.7/src/java/org/apache/mina/io/
branches/0.7/src/java/org/apache/mina/io/datagram/
branches/0.7/src/java/org/apache/mina/io/socket/
branches/0.7/src/java/org/apache/mina/protocol/ branches/0.7/src/...
Author: trustin
Date: Wed Oct 19 00:40:18 2005
New Revision: 326428
URL: http://svn.apache.org/viewcvs?rev=326428&view=rev
Log:
Resolved issue: DIRMINA-96 - Provide an API for connectionless transport types to create a session from IoAcceptor.
* Added IoAcceptor.newSession()
** SocketAcceptor throws UnsupportedOperationException
** DatagramAcceptor returns an appropriate DatagramSession
** IoProtocolAcceptor.newSession() wraps IoAcceptor.newSession()
Modified:
directory/network/branches/0.7/src/java/org/apache/mina/io/IoAcceptor.java
directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java
directory/network/branches/0.7/src/java/org/apache/mina/protocol/ProtocolAcceptor.java
directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java
directory/network/branches/0.7/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java
directory/network/trunk/src/java/org/apache/mina/common/BaseIoAcceptor.java
directory/network/trunk/src/java/org/apache/mina/common/IoAcceptor.java
directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java
directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java
Modified: directory/network/branches/0.7/src/java/org/apache/mina/io/IoAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/io/IoAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/io/IoAcceptor.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/io/IoAcceptor.java Wed Oct 19 00:40:18 2005
@@ -54,4 +54,20 @@
* Unbinds from the specified <code>address</code>.
*/
void unbind( SocketAddress address );
+
+ /**
+ * (Optional) Returns an {@link IoSession} that is bound to the specified
+ * <tt>localAddress</tt> and <tt>remoteAddress</tt> which reuses
+ * the <tt>localAddress</tt> that is already bound by {@link IoAcceptor}
+ * via {@link #bind(SocketAddress, IoHandler)}.
+ * <p>
+ * This operation is optional. Please throw {@link UnsupportedOperationException}
+ * if the transport type doesn't support this operation. This operation is
+ * usually implemented for connectionless transport types.
+ *
+ * @throws UnsupportedOperationException if this operation is not supported
+ * @throws IllegalArgumentException if the specified <tt>localAddress</tt> is
+ * not bound yet. (see {@link #bind(SocketAddress, IoHandler)})
+ */
+ IoSession newSession( SocketAddress remoteAddress, SocketAddress localAddress );
}
Modified: directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java Wed Oct 19 00:40:18 2005
@@ -33,6 +33,7 @@
import org.apache.mina.io.IoAcceptor;
import org.apache.mina.io.IoFilterChain;
import org.apache.mina.io.IoHandler;
+import org.apache.mina.io.IoSession;
import org.apache.mina.io.IoSessionManagerFilterChain;
import org.apache.mina.util.ExceptionUtil;
import org.apache.mina.util.Queue;
@@ -165,6 +166,47 @@
}
}
+ public IoSession newSession( SocketAddress remoteAddress, SocketAddress localAddress )
+ {
+ if( remoteAddress == null )
+ {
+ throw new NullPointerException( "remoteAddress" );
+ }
+ if( localAddress == null )
+ {
+ throw new NullPointerException( "localAddress" );
+ }
+
+ Selector selector = this.selector;
+ DatagramChannel ch = ( DatagramChannel ) channels.get( localAddress );
+ if( selector == null || ch == null )
+ {
+ throw new IllegalArgumentException( "Unknown localAddress: " + localAddress );
+ }
+
+ SelectionKey key = ch.keyFor( selector );
+ if( key == null )
+ {
+ throw new IllegalArgumentException( "Unknown lodalAddress: " + localAddress );
+ }
+
+ RegistrationRequest req = ( RegistrationRequest ) key.attachment();
+ DatagramSession s = new DatagramSession( filters, ch, req.handler );
+ s.setRemoteAddress( remoteAddress );
+ s.setSelectionKey( key );
+
+ try
+ {
+ req.handler.sessionCreated( s );
+ }
+ catch( Throwable t )
+ {
+ exceptionMonitor.exceptionCaught( this, t );
+ }
+
+ return s;
+ }
+
private synchronized void startupWorker() throws IOException
{
if( worker == null )
Modified: directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/io/socket/SocketAcceptor.java Wed Oct 19 00:40:18 2005
@@ -34,6 +34,7 @@
import org.apache.mina.io.IoAcceptor;
import org.apache.mina.io.IoFilterChain;
import org.apache.mina.io.IoHandler;
+import org.apache.mina.io.IoSession;
import org.apache.mina.io.IoSessionManagerFilterChain;
import org.apache.mina.util.Queue;
@@ -488,5 +489,11 @@
{
this.address = address;
}
+ }
+
+
+ public IoSession newSession( SocketAddress remoteAddress, SocketAddress localAddress )
+ {
+ throw new UnsupportedOperationException();
}
}
Modified: directory/network/branches/0.7/src/java/org/apache/mina/protocol/ProtocolAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/protocol/ProtocolAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/protocol/ProtocolAcceptor.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/protocol/ProtocolAcceptor.java Wed Oct 19 00:40:18 2005
@@ -55,4 +55,20 @@
* Unbinds from the specified <code>address</code>.
*/
void unbind( SocketAddress address );
+
+ /**
+ * (Optional) Returns a {@link ProtocolSession} that is bound to the specified
+ * <tt>localAddress</tt> and <tt>remoteAddress</tt> which reuses
+ * the <tt>localAddress</tt> that is already bound by {@link ProtocolAcceptor}
+ * via {@link #bind(SocketAddress, ProtocolProvider)}.
+ * <p>
+ * This operation is optional. Please throw {@link UnsupportedOperationException}
+ * if the transport type doesn't support this operation. This operation is
+ * usually implemented for connectionless transport types.
+ *
+ * @throws UnsupportedOperationException if this operation is not supported
+ * @throws IllegalArgumentException if the specified <tt>localAddress</tt> is
+ * not bound yet. (see {@link #bind(SocketAddress, ProtocolProvider)})
+ */
+ ProtocolSession newSession( SocketAddress remoteAddress, SocketAddress localAddress );
}
Modified: directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/protocol/io/IoProtocolAcceptor.java Wed Oct 19 00:40:18 2005
@@ -61,6 +61,11 @@
acceptor.unbind( address );
}
+ public ProtocolSession newSession( SocketAddress remoteAddress, SocketAddress localAddress )
+ {
+ return adapter.toProtocolSession( acceptor.newSession( remoteAddress, localAddress ) );
+ }
+
public ProtocolFilterChain getFilterChain()
{
return adapter.getFilterChain();
Modified: directory/network/branches/0.7/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/protocol/vmpipe/VmPipeAcceptor.java Wed Oct 19 00:40:18 2005
@@ -13,6 +13,7 @@
import org.apache.mina.protocol.ProtocolFilterChain;
import org.apache.mina.protocol.ProtocolHandler;
import org.apache.mina.protocol.ProtocolProvider;
+import org.apache.mina.protocol.ProtocolSession;
/**
* Binds the specified {@link ProtocolProvider} to the specified
@@ -97,5 +98,10 @@
this.managerFilterChain = managerFilterChain;
this.handler = handler;
}
+ }
+
+ public ProtocolSession newSession( SocketAddress remoteAddress, SocketAddress localAddress )
+ {
+ throw new UnsupportedOperationException();
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/common/BaseIoAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/BaseIoAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/BaseIoAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/common/BaseIoAcceptor.java Wed Oct 19 00:40:18 2005
@@ -36,4 +36,9 @@
{
unbind( address, true );
}
+
+ public IoSession newSession( SocketAddress remoteAddress, SocketAddress localAddress )
+ {
+ throw new UnsupportedOperationException();
+ }
}
Modified: directory/network/trunk/src/java/org/apache/mina/common/IoAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/common/IoAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/common/IoAcceptor.java Wed Oct 19 00:40:18 2005
@@ -64,4 +64,20 @@
* <tt>false</tt> otherwise.
*/
void unbind( SocketAddress address, boolean disconnectClients );
+
+ /**
+ * (Optional) Returns an {@link IoSession} that is bound to the specified
+ * <tt>localAddress</tt> and <tt>remoteAddress</tt> which reuses
+ * the <tt>localAddress</tt> that is already bound by {@link IoAcceptor}
+ * via {@link #bind(SocketAddress, IoHandler)}.
+ * <p>
+ * This operation is optional. Please throw {@link UnsupportedOperationException}
+ * if the transport type doesn't support this operation. This operation is
+ * usually implemented for connectionless transport types.
+ *
+ * @throws UnsupportedOperationException if this operation is not supported
+ * @throws IllegalArgumentException if the specified <tt>localAddress</tt> is
+ * not bound yet. (see {@link #bind(SocketAddress, IoHandler)})
+ */
+ IoSession newSession( SocketAddress remoteAddress, SocketAddress localAddress );
}
Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/DatagramAcceptor.java Wed Oct 19 00:40:18 2005
@@ -34,6 +34,7 @@
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.IoFilterChain;
import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoSession;
import org.apache.mina.common.IoSessionManagerConfig;
import org.apache.mina.common.IoSessionManagerFilterChain;
import org.apache.mina.common.IoFilter.WriteRequest;
@@ -174,6 +175,47 @@
}
}
+ public IoSession newSession( SocketAddress remoteAddress, SocketAddress localAddress )
+ {
+ if( remoteAddress == null )
+ {
+ throw new NullPointerException( "remoteAddress" );
+ }
+ if( localAddress == null )
+ {
+ throw new NullPointerException( "localAddress" );
+ }
+
+ Selector selector = this.selector;
+ DatagramChannel ch = ( DatagramChannel ) channels.get( localAddress );
+ if( selector == null || ch == null )
+ {
+ throw new IllegalArgumentException( "Unknown localAddress: " + localAddress );
+ }
+
+ SelectionKey key = ch.keyFor( selector );
+ if( key == null )
+ {
+ throw new IllegalArgumentException( "Unknown lodalAddress: " + localAddress );
+ }
+
+ RegistrationRequest req = ( RegistrationRequest ) key.attachment();
+ DatagramSession s = new DatagramSession( filters, ch, req.handler );
+ s.setRemoteAddress( remoteAddress );
+ s.setSelectionKey( key );
+
+ try
+ {
+ req.handler.sessionCreated( s );
+ }
+ catch( Throwable t )
+ {
+ exceptionMonitor.exceptionCaught( this, t );
+ }
+
+ return s;
+ }
+
private synchronized void startupWorker() throws IOException
{
if( worker == null )
Modified: directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java Wed Oct 19 00:40:18 2005
@@ -34,6 +34,7 @@
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.IoFilterChain;
import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoSession;
import org.apache.mina.common.IoSessionManagerConfig;
import org.apache.mina.common.IoSessionManagerFilterChain;
import org.apache.mina.util.Queue;
Modified: directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java?rev=326428&r1=326427&r2=326428&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/VmPipeAcceptor.java Wed Oct 19 00:40:18 2005
@@ -12,6 +12,7 @@
import org.apache.mina.common.BaseIoAcceptorConfig;
import org.apache.mina.common.IoFilterChain;
import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoSession;
import org.apache.mina.common.IoSessionManagerConfig;
/**