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/21 05:34:00 UTC
svn commit: r370979 - in
/directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina:
common/MINA.java transport/socket/nio/SocketAddresses.java
Author: trustin
Date: Fri Jan 20 20:33:57 2006
New Revision: 370979
URL: http://svn.apache.org/viewcvs?rev=370979&view=rev
Log: (empty)
Added:
directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAddresses.java
Modified:
directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/common/MINA.java
Modified: directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/common/MINA.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/common/MINA.java?rev=370979&r1=370978&r2=370979&view=diff
==============================================================================
--- directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/common/MINA.java (original)
+++ directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/common/MINA.java Fri Jan 20 20:33:57 2006
@@ -156,6 +156,31 @@
/**
* Binds to the specified <code>address</code> and handles incoming
* connections with the specified <code>handler</code>.
+ *
+ * @throws IOException if failed to bind
+ */
+ public static void bind( String address, IoHandler handler ) throws IOException
+ {
+ bind( createAddress( address ), handler );
+ }
+
+ /**
+ * Binds to the specified <code>address</code> and handles incoming
+ * connections with the specified <code>handler</code>.
+ *
+ * @param filterChainBuilder
+ * an {@link IoFilterChainBuilder} that will modify the
+ * {@link IoFilterChain} of a newly created {@link IoSession}
+ * @throws IOException if failed to bind
+ */
+ public static void bind( String address, IoHandler handler, IoFilterChainBuilder filterChainBuilder ) throws IOException
+ {
+ bind( createAddress( address ), handler, filterChainBuilder );
+ }
+
+ /**
+ * Binds to the specified <code>address</code> and handles incoming
+ * connections with the specified <code>handler</code>.
*
* @param filterChainBuilder
* an {@link IoFilterChainBuilder} that will modify the
@@ -182,8 +207,17 @@
*/
public static void unbind( IoAddress address )
{
- IoAcceptor acceptor = getProviderSafely( address ).getAcceptor();
- acceptor.unbind( address );
+ IoAcceptor acceptor = getProviderSafely( address ).getAcceptor();
+ acceptor.unbind( address );
+ }
+
+ /**
+ * Unbinds from the specified <code>address</code> and disconnects all clients
+ * connected there.
+ */
+ public static void unbind( String address )
+ {
+ unbind( createAddress( address ) );
}
/**
@@ -205,6 +239,23 @@
}
/**
+ * Returns all sessions currently connected to the specified local address.
+ *
+ * @param address the local address to return all sessions for. Must have
+ * been bound previously.
+ * @return the sessions.
+ * @throws IllegalArgumentException if the specified <tt>address</tt> has
+ * not been bound.
+ * @throws UnsupportedOperationException if this operation isn't supported
+ * for the particular transport type implemented by this
+ * {@link IoAcceptor}.
+ */
+ public static Collection getManagedSessions( String address )
+ {
+ return getManagedSessions( createAddress( 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}
@@ -232,6 +283,25 @@
return acceptor.newSession( remoteAddress, localAddress );
}
+ /**
+ * (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)})
+ */
+ public static IoSession newSession( String remoteAddress, String localAddress )
+ {
+ return newSession( createAddress( remoteAddress ), createAddress( localAddress ) );
+ }
+
// Connector side
/**
@@ -251,6 +321,18 @@
* successfully, events are fired to the specified
* <code>handler</code>.
*
+ * @return {@link ConnectFuture} that will tell the result of the connection attempt
+ */
+ public static ConnectFuture connect( String address, IoHandler handler )
+ {
+ return connect( createAddress( address ), handler );
+ }
+
+ /**
+ * Connects to the specified <code>address</code>. If communication starts
+ * successfully, events are fired to the specified
+ * <code>handler</code>.
+ *
* @param filterChainBuilder
* an {@link IoFilterChainBuilder} that will modify the
* {@link IoFilterChain} of a newly created {@link IoSession}
@@ -267,6 +349,22 @@
* successfully, events are fired to the specified
* <code>handler</code>.
*
+ * @param filterChainBuilder
+ * an {@link IoFilterChainBuilder} that will modify the
+ * {@link IoFilterChain} of a newly created {@link IoSession}
+ * @return {@link ConnectFuture} that will tell the result of the connection attempt
+ */
+ public static ConnectFuture connect( String address, IoHandler handler,
+ IoFilterChainBuilder filterChainBuilder )
+ {
+ return connect( createAddress( address ), handler, filterChainBuilder );
+ }
+
+ /**
+ * Connects to the specified <code>address</code>. If communication starts
+ * successfully, events are fired to the specified
+ * <code>handler</code>.
+ *
* @param localAddress the local address the channel is bound to
* @return {@link ConnectFuture} that will tell the result of the connection attempt
*/
@@ -280,6 +378,19 @@
* successfully, events are fired to the specified
* <code>handler</code>.
*
+ * @param localAddress the local address the channel is bound to
+ * @return {@link ConnectFuture} that will tell the result of the connection attempt
+ */
+ public static ConnectFuture connect( String address, String localAddress, IoHandler handler )
+ {
+ return connect( createAddress( address ), createAddress( localAddress ), handler );
+ }
+
+ /**
+ * Connects to the specified <code>address</code>. If communication starts
+ * successfully, events are fired to the specified
+ * <code>handler</code>.
+ *
* @param filterChainBuilder
* an {@link IoFilterChainBuilder} that will modify the
* {@link IoFilterChain} of a newly created {@link IoSession}
@@ -298,5 +409,31 @@
filterChainBuilder = IoFilterChainBuilder.NOOP;
}
return connector.connect( address, localAddress, handler, filterChainBuilder );
+ }
+
+ /**
+ * Connects to the specified <code>address</code>. If communication starts
+ * successfully, events are fired to the specified
+ * <code>handler</code>.
+ *
+ * @param filterChainBuilder
+ * an {@link IoFilterChainBuilder} that will modify the
+ * {@link IoFilterChain} of a newly created {@link IoSession}
+ * @return {@link ConnectFuture} that will tell the result of the connection attempt
+ */
+ public static ConnectFuture connect( String address, String localAddress,
+ IoHandler handler, IoFilterChainBuilder filterChainBuilder )
+ {
+ return connect( createAddress( address ), createAddress( localAddress ), handler, filterChainBuilder );
+ }
+
+ private static IoAddress createAddress( String addr )
+ {
+ if( addr == null )
+ {
+ return null;
+ }
+
+ return new IoAddress( addr );
}
}
Added: directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAddresses.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAddresses.java?rev=370979&view=auto
==============================================================================
--- directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAddresses.java (added)
+++ directory/sandbox/trustin/mina-spi/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAddresses.java Fri Jan 20 20:33:57 2006
@@ -0,0 +1,94 @@
+/*
+ * @(#) $Id: SocketAcceptor.java 370960 2006-01-21 02:28:45Z trustin $
+ *
+ * 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;
+
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+
+import org.apache.mina.common.IoAddress;
+
+/**
+ * TODO Document me
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+class SocketAddresses
+{
+ public static SocketAddress parse( IoAddress address )
+ {
+ if( address == null )
+ {
+ throw new NullPointerException( "address" );
+ }
+
+ String addrStr = address.getAddress();
+ int colonPos = addrStr.lastIndexOf( ':' );
+ if( colonPos < 0 )
+ {
+ throw new IllegalArgumentException( "no port: " + address );
+ }
+
+ String portStr = addrStr.substring( colonPos + 1 );
+ int port;
+ try
+ {
+ port = Integer.parseInt( portStr );
+ }
+ catch( NumberFormatException e )
+ {
+ throw new IllegalArgumentException( "Invalid port: " + portStr + " (in " + address + ')' );
+ }
+
+ if( port == 0 )
+ {
+ throw new IllegalArgumentException( "Unsupported port number: 0" );
+ }
+
+ String hostname = addrStr.substring( 0, colonPos ).trim();
+ if( hostname.length() == 0 )
+ {
+ throw new IllegalArgumentException( "no hostname: " + address );
+ }
+
+ if( hostname.equals( "*" ) )
+ {
+ return new InetSocketAddress( port );
+ }
+ else
+ {
+ return new InetSocketAddress( addrStr.substring( 0, colonPos ), port );
+ }
+ }
+
+ public static IoAddress compose( String transportType, SocketAddress address )
+ {
+ if( address == null )
+ {
+ throw new NullPointerException( "address" );
+ }
+ if( !(address instanceof InetSocketAddress) )
+ {
+ throw new IllegalArgumentException( "Invalid address type: " + address.getClass() );
+ }
+
+ InetSocketAddress inetAddr = ( InetSocketAddress ) address;
+ return new IoAddress( "nio", transportType, inetAddr.getHostName() + ':' + inetAddr.getPort() );
+ }
+}