Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 16817 invoked from network); 1 Dec 2005 05:20:06 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 1 Dec 2005 05:20:05 -0000 Received: (qmail 45367 invoked by uid 500); 1 Dec 2005 05:20:04 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 45306 invoked by uid 500); 1 Dec 2005 05:20:03 -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 45292 invoked by uid 99); 1 Dec 2005 05:20:03 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Nov 2005 21:20:03 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 30 Nov 2005 21:21:27 -0800 Received: (qmail 16268 invoked by uid 65534); 1 Dec 2005 05:19:36 -0000 Message-ID: <20051201051936.16265.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r350169 [5/16] - in /directory/network: branches/chain_refactor/src/java/org/apache/mina/common/ trunk/src/examples/org/apache/mina/examples/echoserver/ trunk/src/examples/org/apache/mina/examples/httpserver/ trunk/src/examples/org/apache/m... Date: Thu, 01 Dec 2005 05:19:07 -0000 To: commits@directory.apache.org From: trustin@apache.org X-Mailer: svnmailer-1.0.5 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Modified: directory/network/trunk/src/java/org/apache/mina/common/IoFilterChain.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoFilterChain.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/IoFilterChain.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/IoFilterChain.java Wed Nov 30 21:17:41 2005 @@ -1,129 +1,159 @@ -/* - * @(#) $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.common; - -import java.util.List; - -import org.apache.mina.common.IoFilter.NextFilter; - -/** - * A container of {@link IoFilter}s that forwards {@link IoHandler} events - * to the consisting filters and terminal {@link IoHandler} sequentially. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - */ -public interface IoFilterChain { - /** - * Returns the parent of this chain. - * @return {@link IoSessionManager} or {@link IoSession} - */ - Object getParent(); - - /** - * Returns the {@link IoFilter} with the specified name in this chain. - * @return null if there's no such filter in this chain - */ - IoFilter get( String name ); - - /** - * Returns the name of the specified {@link IoFilter} in this chain. - * @return null if there's no such filter in this chain. - */ - String getName( IoFilter filter ); - - /** - * Returns the {@link NextFilter} of the {@link IoFilter} with the specified - * name in this chain. - */ - NextFilter getNextFilter( String name ); - - /** - * Returns the {@link NextFilter} of the specified filter in this chain. - */ - NextFilter getNextFilter( IoFilter filter ); - - /** - * Returns the list of all filters this chain contains. - */ - List getAll(); - - /** - * Returns the reversed list of all filters this chain contains. - */ - List getAllReversed(); - - /** - * Adds the specified filter with the specified name at the beginning of this chain. - * @throws Exception if {@link IoFilter#init(IoFilterChain, NextFilter)} thrown an exception. - */ - void addFirst( String name, IoFilter filter ) throws Exception; - - /** - * Adds the specified filter with the specified name at the end of this chain. - * @throws Exception if {@link IoFilter#init(IoFilterChain, NextFilter)} thrown an exception. - */ - void addLast( String name, IoFilter filter ) throws Exception; - - /** - * Adds the specified filter with the specified name just before the filter whose name is - * baseName in this chain. - * @throws Exception if {@link IoFilter#init(IoFilterChain, NextFilter)} thrown an exception. - */ - void addBefore( String baseName, String name, IoFilter filter ) throws Exception; - - /** - * Adds the specified filter with the specified name just before the specified - * baseFilter in this chain. - * @throws Exception if {@link IoFilter#init(IoFilterChain, NextFilter)} thrown an exception. - */ - void addBefore( IoFilter baseFilter, String name, IoFilter filter ) throws Exception; - - /** - * Adds the specified filter with the specified name just after the filter whose name is - * baseName in this chain. - * @throws Exception if {@link IoFilter#init(IoFilterChain, NextFilter)} thrown an exception. - */ - void addAfter( String baseName, String name, IoFilter filter ) throws Exception; - - /** - * Adds the specified filter with the specified name just after the - * specified baseFilter in this chain. - * @throws Exception if {@link IoFilter#init(IoFilterChain, NextFilter)} thrown an exception. - */ - void addAfter( IoFilter baseFilter, String name, IoFilter filter ) throws Exception; - - /** - * Removes the filter with the specified name from this chain. - * @throws Exception if {@link IoFilter#destroy(IoFilterChain, NextFilter)} thrown an exception. - */ - IoFilter remove( String name ) throws Exception; - - /** - * Removes the specifiec filter from this chain. - * @throws Exception if {@link IoFilter#destroy(IoFilterChain, NextFilter)} thrown an exception. - */ - void remove( IoFilter filter ) throws Exception; - - /** - * Removes all filters added to this chain. - * @throws Exception if {@link IoFilter#destroy(IoFilterChain, NextFilter)} thrown an exception. - */ - void clear() throws Exception; -} +/* + * @(#) $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.common; + +import java.util.List; + +import org.apache.mina.common.IoFilter.NextFilter; + +/** + * A container of {@link IoFilter}s that forwards {@link IoHandler} events + * to the consisting filters and terminal {@link IoHandler} sequentially. + * Every {@link IoSession} has its own {@link IoFilterChain} (1-to-1 relationship). + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ +public interface IoFilterChain { + /** + * Returns the parent {@link IoSession} of this chain. + * @return {@link IoSession} + */ + IoSession getSession(); + + /** + * Returns the {@link Entry} with the specified name in this chain. + * @return null if there's no such name in this chain + */ + Entry getEntry( String name ); + + /** + * Returns the {@link IoFilter} with the specified name in this chain. + * @return null if there's no such name in this chain + */ + IoFilter get( String name ); + + /** + * Returns the {@link NextFilter} of the {@link IoFilter} with the + * specified name in this chain. + * @return null if there's no such name in this chain + */ + NextFilter getNextFilter( String name ); + + /** + * Returns the list of all {@link Entry}s this chain contains. + */ + List getAll(); + + /** + * Returns the reversed list of all {@link Entry}s this chain contains. + */ + List getAllReversed(); + + /** + * Returns true if this chain contains an {@link IoFilter} with the + * specified name. + */ + boolean contains( String name ); + + /** + * Returns true if this chain contains the specified filter. + */ + boolean contains( IoFilter filter ); + + /** + * Returns true if this chain contains an {@link IoFilter} of the + * specified filterType. + */ + boolean contains( Class filterType ); + + /** + * Adds the specified filter with the specified name at the beginning of this chain. + * @throws IoFilterLifeCycleException + * if {@link IoFilter#onPostAdd(IoFilterChain, String, NextFilter)} or + * {@link IoFilter#init()} throws an exception. + */ + void addFirst( String name, IoFilter filter ); + + /** + * Adds the specified filter with the specified name at the end of this chain. + * @throws IoFilterLifeCycleException + * if {@link IoFilter#onPostAdd(IoFilterChain, String, NextFilter)} or + * {@link IoFilter#init()} throws an exception. + */ + void addLast( String name, IoFilter filter ); + + /** + * Adds the specified filter with the specified name just before the filter whose name is + * baseName in this chain. + * @throws IoFilterLifeCycleException + * if {@link IoFilter#onPostAdd(IoFilterChain, String, NextFilter)} or + * {@link IoFilter#init()} throws an exception. + */ + void addBefore( String baseName, String name, IoFilter filter ); + + /** + * Adds the specified filter with the specified name just after the filter whose name is + * baseName in this chain. + * @throws IoFilterLifeCycleException + * if {@link IoFilter#onPostAdd(IoFilterChain, String, NextFilter)} or + * {@link IoFilter#init()} throws an exception. + */ + void addAfter( String baseName, String name, IoFilter filter ); + + /** + * Removes the filter with the specified name from this chain. + * @throws IoFilterLifeCycleException + * if {@link IoFilter#onPostRemove(IoFilterChain, String, NextFilter)} or + * {@link IoFilter#destroy()} throws an exception. + */ + IoFilter remove( String name ); + + /** + * Removes all filters added to this chain. + * @throws Exception if {@link IoFilter#onPostRemove(IoFilterChain, String, NextFilter)} thrown an exception. + */ + void clear() throws Exception; + + /** + * Represents a name-filter pair that an {@link IoFilterChain} contains. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ + public interface Entry + { + /** + * Returns the name of the filter. + */ + String getName(); + + /** + * Returns the filter. + */ + IoFilter getFilter(); + + /** + * Returns the {@link NextFilter} of the filter. + * + * @throws IllegalStateException if the {@link NextFilter} is not available + */ + NextFilter getNextFilter(); + } +} Added: directory/network/trunk/src/java/org/apache/mina/common/IoFilterChainBuilder.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoFilterChainBuilder.java?rev=350169&view=auto ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/IoFilterChainBuilder.java (added) +++ directory/network/trunk/src/java/org/apache/mina/common/IoFilterChainBuilder.java Wed Nov 30 21:17:41 2005 @@ -0,0 +1,58 @@ +/* + * @(#) $Id: IoFilterChainBuilder.java 349941 2005-11-30 13:10:31Z 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.common; + +/** + * An interface that builds {@link IoFilterChain} in predefined way + * when {@link IoSession} is created. You can extract common filter chain + * modification logic to this interface. For example, to add a filter + * to the chain, + *
+ * public class MyFilterChainBuilder implements IoFilterChainBuilder {
+ *     public void buildFilterChain( IoFilterChain chain ) throws Exception {
+ *         chain.addLast( "myFilter", new MyFilter() );
+ *     }
+ * }
+ * 
+ * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev: 349941 $, $Date: 2005-11-30 22:10:31 +0900 (Wed, 30 Nov 2005) $ + */ +public interface IoFilterChainBuilder +{ + /** + * An implementation which does nothing. + */ + IoFilterChainBuilder NOOP = new IoFilterChainBuilder() + { + public void buildFilterChain( IoFilterChain chain ) throws Exception + { + } + + public String toString() + { + return "NOOP"; + } + }; + + /** + * Modifies the specified chain. + */ + void buildFilterChain( IoFilterChain chain ) throws Exception; +} Added: directory/network/trunk/src/java/org/apache/mina/common/IoFilterLifeCycleException.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoFilterLifeCycleException.java?rev=350169&view=auto ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/IoFilterLifeCycleException.java (added) +++ directory/network/trunk/src/java/org/apache/mina/common/IoFilterLifeCycleException.java Wed Nov 30 21:17:41 2005 @@ -0,0 +1,51 @@ +/* + * @(#) $Id: IoFilterLifeCycleException.java 350147 2005-12-01 04:06:11Z 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.common; + +/** + * A {@link RuntimeException} which is thrown when {@link IoFilter#init()} + * or {@link IoFilter#onPostAdd(IoFilterChain, String, org.apache.mina.common.IoFilter.NextFilter)} + * failed. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev: 350147 $, $Date: 2005-12-01 13:06:11 +0900 $ + */ +public class IoFilterLifeCycleException extends RuntimeException +{ + private static final long serialVersionUID = -5542098881633506449L; + + public IoFilterLifeCycleException() + { + } + + public IoFilterLifeCycleException( String message ) + { + super( message ); + } + + public IoFilterLifeCycleException( String message, Throwable cause ) + { + super( message, cause ); + } + + public IoFilterLifeCycleException( Throwable cause ) + { + super( cause ); + } +} Modified: directory/network/trunk/src/java/org/apache/mina/common/IoHandler.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoHandler.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/IoHandler.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/IoHandler.java Wed Nov 30 21:17:41 2005 @@ -1,81 +1,81 @@ -/* - * @(#) $Id$ - * - * Copyright 2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.mina.common; - -import java.io.IOException; - -/** - * Handles all protocol events fired by MINA. - * There are 6 event handler methods, and they are all invoked by MINA - * automatically. - *

- * Please refer to - * ReverseIoHandler - * example. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - * - * @see IoHandlerAdapter - */ -public interface IoHandler -{ - /** - * Invoked when the session is created. Initialize default socket - * parameters and user-defined attributes here. - */ - void sessionCreated( IoSession session ) throws Exception; - - /** - * Invoked when the connection is opened. This method is not invoked if the - * transport type is UDP. - */ - void sessionOpened( IoSession session ) throws Exception; - - /** - * Invoked when the connection is closed. This method is not invoked if the - * transport type is UDP. - */ - void sessionClosed( IoSession session ) throws Exception; - - /** - * Invoked when the connection is idle. Refer to {@link IdleStatus}. This - * method is not invoked if the transport type is UDP. - */ - void sessionIdle( IoSession session, IdleStatus status ) throws Exception; - - /** - * Invoked when any exception is thrown by user {@link IoHandler} - * implementation or by MINA. If cause is instanceof - * {@link IOException}, MINA will close the connection automatically. - */ - void exceptionCaught( IoSession session, Throwable cause ) throws Exception; - - /** - * Invoked when protocol message is received. Implement your protocol flow - * here. - */ - void messageReceived( IoSession session, Object message ) throws Exception; - - /** - * Invoked when protocol message that user requested by - * {@link IoSession#write(Object)} is sent out actually. - */ - void messageSent( IoSession session, Object message ) throws Exception; +/* + * @(#) $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.common; + +import java.io.IOException; + +/** + * Handles all protocol events fired by MINA. + * There are 6 event handler methods, and they are all invoked by MINA + * automatically. + *

+ * Please refer to + * ReverseIoHandler + * example. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + * + * @see IoHandlerAdapter + */ +public interface IoHandler +{ + /** + * Invoked when the session is created. Initialize default socket + * parameters and user-defined attributes here. + */ + void sessionCreated( IoSession session ) throws Exception; + + /** + * Invoked when the connection is opened. This method is not invoked if the + * transport type is UDP. + */ + void sessionOpened( IoSession session ) throws Exception; + + /** + * Invoked when the connection is closed. This method is not invoked if the + * transport type is UDP. + */ + void sessionClosed( IoSession session ) throws Exception; + + /** + * Invoked when the connection is idle. Refer to {@link IdleStatus}. This + * method is not invoked if the transport type is UDP. + */ + void sessionIdle( IoSession session, IdleStatus status ) throws Exception; + + /** + * Invoked when any exception is thrown by user {@link IoHandler} + * implementation or by MINA. If cause is instanceof + * {@link IOException}, MINA will close the connection automatically. + */ + void exceptionCaught( IoSession session, Throwable cause ) throws Exception; + + /** + * Invoked when protocol message is received. Implement your protocol flow + * here. + */ + void messageReceived( IoSession session, Object message ) throws Exception; + + /** + * Invoked when protocol message that user requested by + * {@link IoSession#write(Object)} is sent out actually. + */ + void messageSent( IoSession session, Object message ) throws Exception; } Modified: directory/network/trunk/src/java/org/apache/mina/common/IoHandlerAdapter.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoHandlerAdapter.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/IoHandlerAdapter.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/IoHandlerAdapter.java Wed Nov 30 21:17:41 2005 @@ -1,61 +1,61 @@ -/* - * @(#) $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.common; - -import org.apache.mina.util.SessionUtil; - -/** - * An abstract adapter class for {@link IoHandler}. You can extend this - * class and selectively override required event handler methods only. All - * methods do nothing by default. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - */ -public class IoHandlerAdapter implements IoHandler -{ - public void sessionCreated( IoSession session ) throws Exception - { - SessionUtil.initialize( session ); - } - - public void sessionOpened( IoSession session ) throws Exception - { - } - - public void sessionClosed( IoSession session ) throws Exception - { - } - - public void sessionIdle( IoSession session, IdleStatus status ) throws Exception - { - } - - public void exceptionCaught( IoSession session, Throwable cause ) throws Exception - { - } - - public void messageReceived( IoSession session, Object message ) throws Exception - { - } - - public void messageSent( IoSession session, Object message ) throws Exception - { - } +/* + * @(#) $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.common; + +import org.apache.mina.util.SessionUtil; + +/** + * An abstract adapter class for {@link IoHandler}. You can extend this + * class and selectively override required event handler methods only. All + * methods do nothing by default. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ +public class IoHandlerAdapter implements IoHandler +{ + public void sessionCreated( IoSession session ) throws Exception + { + SessionUtil.initialize( session ); + } + + public void sessionOpened( IoSession session ) throws Exception + { + } + + public void sessionClosed( IoSession session ) throws Exception + { + } + + public void sessionIdle( IoSession session, IdleStatus status ) throws Exception + { + } + + public void exceptionCaught( IoSession session, Throwable cause ) throws Exception + { + } + + public void messageReceived( IoSession session, Object message ) throws Exception + { + } + + public void messageSent( IoSession session, Object message ) throws Exception + { + } } Modified: directory/network/trunk/src/java/org/apache/mina/common/IoSession.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoSession.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/IoSession.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/IoSession.java Wed Nov 30 21:17:41 2005 @@ -1,291 +1,296 @@ -/* - * @(#) $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.common; - -import java.net.SocketAddress; -import java.util.Set; - -/** - * A handle which represents connection between two endpoints regardless of - * transport types. - *

- * Session provides user-defined attributes. User-defined attributes are - * application-specific data which is associated with a session. - * It often contains objects that represents the state of a higher-level protocol - * and becomes a way to exchange data between filters and handlers. - * - *

Adjusting Transport Type Specific Properties

- *

- * You can simply downcast the session to an appropriate subclass. - *

- * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - */ -public interface IoSession { - - /** - * Returns the {@link IoHandler} which handles this session. - */ - IoHandler getHandler(); - - /** - * Returns the filter chain that only affects this session. - */ - IoFilterChain getFilterChain(); - - /** - * 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 WriteFuture} if you want - * to wait for the session actually closed. - */ - WriteFuture write( Object message ); - - /** - * Closes this session immediately. This operation is asynthronous. - * Wait for the returned {@link CloseFuture} if you want to wait for - * the session actually closed. - */ - CloseFuture close(); - - /** - * Returns an attachment of this session. - * This method is identical with getAttribute( "" ). - */ - Object getAttachment(); - - /** - * Sets an attachment of this session. - * This method is identical with setAttribute( "", attachment ). - * - * @return Old attachment. null if it is new. - */ - Object setAttachment( Object attachment ); - - /** - * Returns the value of user-defined attribute of this session. - * - * @param key the key of the attribute - * @return null if there is no attribute with the specified key - */ - Object getAttribute( String key ); - - /** - * Sets a user-defined attribute. - * - * @param key the key of the attribute - * @param value the value of the attribute - * @return The old value of the attribute. null if it is new. - */ - Object setAttribute( String key, Object value ); - - /** - * Sets a user defined attribute without a value. This is useful when - * you just want to put a 'mark' attribute. Its value is set to - * {@link Boolean#TRUE}. - * - * @param key the key of the attribute - * @return The old value of the attribute. null if it is new. - */ - Object setAttribute( String key ); - - /** - * Removes a user-defined attribute with the specified key. - * - * @return The old value of the attribute. null if not found. - */ - Object removeAttribute( String key ); - - /** - * Returns true if this session contains the attribute with - * the specified key. - */ - boolean containsAttribute( String key ); - - /** - * Returns the set of keys of all user-defined attributes. - */ - Set getAttributeKeys(); - - /** - * Returns transport type of this session. - */ - TransportType getTransportType(); - - /** - * Returns true if this session is connected with remote peer. - */ - boolean isConnected(); - - /** - * Returns true if and only if this session is being closed - * (but not disconnected yet) or is closed. - */ - boolean isClosing(); - - /** - * Returns the {@link CloseFuture} of this session. This method returns - * the same instance whenever user calls it. - */ - CloseFuture getCloseFuture(); - - /** - * Returns the socket address of remote peer. - */ - SocketAddress getRemoteAddress(); - - /** - * Returns the socket address of local machine which is associated with this - * session. - */ - SocketAddress getLocalAddress(); - - /** - * Returns idle time for the specified type of idleness in seconds. - */ - int getIdleTime( IdleStatus status ); - - /** - * Returns idle time for the specified type of idleness in milliseconds. - */ - long getIdleTimeInMillis( IdleStatus status ); - - /** - * Sets idle time for the specified type of idleness in seconds. - */ - void setIdleTime( IdleStatus status, int idleTime ); - - /** - * Returns write timeout in seconds. - */ - int getWriteTimeout(); - - /** - * Returns write timeout in milliseconds. - */ - long getWriteTimeoutInMillis(); - - /** - * Sets write timeout in seconds. - */ - void setWriteTimeout( int writeTimeout ); - - /** - * Returns the current {@link TrafficMask} of this session. - */ - TrafficMask getTrafficMask(); - - /** - * Sets the {@link TrafficMask} of this session which will result - * the parent {@link IoSessionManager} to start to control the traffic - * of this session immediately. - */ - void setTrafficMask( TrafficMask trafficMask ); - - /** - * A shortcut method for {@link #setTrafficMask(TrafficMask)} that - * suspends read operations for this session. - */ - void suspendRead(); - - /** - * A shortcut method for {@link #setTrafficMask(TrafficMask)} that - * suspends write operations for this session. - */ - void suspendWrite(); - - /** - * A shortcut method for {@link #setTrafficMask(TrafficMask)} that - * resumes read operations for this session. - */ - void resumeRead(); - - /** - * A shortcut method for {@link #setTrafficMask(TrafficMask)} that - * resumes write operations for this session. - */ - void resumeWrite(); - - /** - * Returns the total number of bytes which were read from this session. - */ - long getReadBytes(); - - /** - * Returns the total number of bytes which were written to this session. - */ - long getWrittenBytes(); - - /** - * Returns the total number of write requests which were written to this session. - */ - long getWrittenWriteRequests(); - - /** - * Returns the number of write requests which are scheduled to be written - * to this session. - */ - int getScheduledWriteRequests(); - - /** - * Returns the time in millis when this session is created. - */ - long getCreationTime(); - - /** - * Returns the time in millis when I/O occurred lastly. - */ - long getLastIoTime(); - - /** - * Returns the time in millis when read operation occurred lastly. - */ - long getLastReadTime(); - - /** - * Returns the time in millis when write operation occurred lastly. - */ - long getLastWriteTime(); - - /** - * Returns true if this session is idle for the specified - * {@link IdleStatus}. - */ - boolean isIdle( IdleStatus status ); - - /** - * Returns the number of the fired continuous sessionIdle events - * for the specified {@link IdleStatus}. - *

- * If sessionIdle event is fired first after some time after I/O, - * idleCount becomes 1. idleCount resets to - * 0 if any I/O occurs again, otherwise it increases to - * 2 and so on if sessionIdle event is fired again without - * any I/O between two (or more) sessionIdle events. - */ - int getIdleCount( IdleStatus status ); - - /** - * Returns the time in millis when the last sessionIdle event - * is fired for the specified {@link IdleStatus}. - */ - long getLastIdleTime( IdleStatus status ); -} +/* + * @(#) $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.common; + +import java.net.SocketAddress; +import java.util.Set; + +/** + * A handle which represents connection between two endpoints regardless of + * transport types. + *

+ * Session provides user-defined attributes. User-defined attributes are + * application-specific data which is associated with a session. + * It often contains objects that represents the state of a higher-level protocol + * and becomes a way to exchange data between filters and handlers. + * + *

Adjusting Transport Type Specific Properties

+ *

+ * You can simply downcast the session to an appropriate subclass. + *

+ * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ +public interface IoSession { + + /** + * Returns the {@link IoSessionManager} which manages this session. + */ + IoSessionManager getManager(); + + /** + * Returns the {@link IoHandler} which handles this session. + */ + IoHandler getHandler(); + + /** + * Returns the filter chain that only affects this session. + */ + IoFilterChain getFilterChain(); + + /** + * 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 WriteFuture} if you want + * to wait for the session actually closed. + */ + WriteFuture write( Object message ); + + /** + * Closes this session immediately. This operation is asynthronous. + * Wait for the returned {@link CloseFuture} if you want to wait for + * the session actually closed. + */ + CloseFuture close(); + + /** + * Returns an attachment of this session. + * This method is identical with getAttribute( "" ). + */ + Object getAttachment(); + + /** + * Sets an attachment of this session. + * This method is identical with setAttribute( "", attachment ). + * + * @return Old attachment. null if it is new. + */ + Object setAttachment( Object attachment ); + + /** + * Returns the value of user-defined attribute of this session. + * + * @param key the key of the attribute + * @return null if there is no attribute with the specified key + */ + Object getAttribute( String key ); + + /** + * Sets a user-defined attribute. + * + * @param key the key of the attribute + * @param value the value of the attribute + * @return The old value of the attribute. null if it is new. + */ + Object setAttribute( String key, Object value ); + + /** + * Sets a user defined attribute without a value. This is useful when + * you just want to put a 'mark' attribute. Its value is set to + * {@link Boolean#TRUE}. + * + * @param key the key of the attribute + * @return The old value of the attribute. null if it is new. + */ + Object setAttribute( String key ); + + /** + * Removes a user-defined attribute with the specified key. + * + * @return The old value of the attribute. null if not found. + */ + Object removeAttribute( String key ); + + /** + * Returns true if this session contains the attribute with + * the specified key. + */ + boolean containsAttribute( String key ); + + /** + * Returns the set of keys of all user-defined attributes. + */ + Set getAttributeKeys(); + + /** + * Returns transport type of this session. + */ + TransportType getTransportType(); + + /** + * Returns true if this session is connected with remote peer. + */ + boolean isConnected(); + + /** + * Returns true if and only if this session is being closed + * (but not disconnected yet) or is closed. + */ + boolean isClosing(); + + /** + * Returns the {@link CloseFuture} of this session. This method returns + * the same instance whenever user calls it. + */ + CloseFuture getCloseFuture(); + + /** + * Returns the socket address of remote peer. + */ + SocketAddress getRemoteAddress(); + + /** + * Returns the socket address of local machine which is associated with this + * session. + */ + SocketAddress getLocalAddress(); + + /** + * Returns idle time for the specified type of idleness in seconds. + */ + int getIdleTime( IdleStatus status ); + + /** + * Returns idle time for the specified type of idleness in milliseconds. + */ + long getIdleTimeInMillis( IdleStatus status ); + + /** + * Sets idle time for the specified type of idleness in seconds. + */ + void setIdleTime( IdleStatus status, int idleTime ); + + /** + * Returns write timeout in seconds. + */ + int getWriteTimeout(); + + /** + * Returns write timeout in milliseconds. + */ + long getWriteTimeoutInMillis(); + + /** + * Sets write timeout in seconds. + */ + void setWriteTimeout( int writeTimeout ); + + /** + * Returns the current {@link TrafficMask} of this session. + */ + TrafficMask getTrafficMask(); + + /** + * Sets the {@link TrafficMask} of this session which will result + * the parent {@link IoSessionManager} to start to control the traffic + * of this session immediately. + */ + void setTrafficMask( TrafficMask trafficMask ); + + /** + * A shortcut method for {@link #setTrafficMask(TrafficMask)} that + * suspends read operations for this session. + */ + void suspendRead(); + + /** + * A shortcut method for {@link #setTrafficMask(TrafficMask)} that + * suspends write operations for this session. + */ + void suspendWrite(); + + /** + * A shortcut method for {@link #setTrafficMask(TrafficMask)} that + * resumes read operations for this session. + */ + void resumeRead(); + + /** + * A shortcut method for {@link #setTrafficMask(TrafficMask)} that + * resumes write operations for this session. + */ + void resumeWrite(); + + /** + * Returns the total number of bytes which were read from this session. + */ + long getReadBytes(); + + /** + * Returns the total number of bytes which were written to this session. + */ + long getWrittenBytes(); + + /** + * Returns the total number of write requests which were written to this session. + */ + long getWrittenWriteRequests(); + + /** + * Returns the number of write requests which are scheduled to be written + * to this session. + */ + int getScheduledWriteRequests(); + + /** + * Returns the time in millis when this session is created. + */ + long getCreationTime(); + + /** + * Returns the time in millis when I/O occurred lastly. + */ + long getLastIoTime(); + + /** + * Returns the time in millis when read operation occurred lastly. + */ + long getLastReadTime(); + + /** + * Returns the time in millis when write operation occurred lastly. + */ + long getLastWriteTime(); + + /** + * Returns true if this session is idle for the specified + * {@link IdleStatus}. + */ + boolean isIdle( IdleStatus status ); + + /** + * Returns the number of the fired continuous sessionIdle events + * for the specified {@link IdleStatus}. + *

+ * If sessionIdle event is fired first after some time after I/O, + * idleCount becomes 1. idleCount resets to + * 0 if any I/O occurs again, otherwise it increases to + * 2 and so on if sessionIdle event is fired again without + * any I/O between two (or more) sessionIdle events. + */ + int getIdleCount( IdleStatus status ); + + /** + * Returns the time in millis when the last sessionIdle event + * is fired for the specified {@link IdleStatus}. + */ + long getLastIdleTime( IdleStatus status ); +} Modified: directory/network/trunk/src/java/org/apache/mina/common/IoSessionManager.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/IoSessionManager.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/IoSessionManager.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/IoSessionManager.java Wed Nov 30 21:17:41 2005 @@ -1,55 +1,78 @@ -/* - * @(#) $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.common; - -import org.apache.mina.common.support.DefaultExceptionMonitor; - -/** - * Base interface for all acceptors and connectors that manage - * sessions. - *

- * You can monitor any uncaught exceptions by setting {@link ExceptionMonitor} - * by calling {@link #setExceptionMonitor(ExceptionMonitor)}. The default - * monitor is {@link DefaultExceptionMonitor}. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - */ -public interface IoSessionManager { - - /** - * Returns the filter chain that filters all events which is related - * with sessions this manager manages. - */ - IoFilterChain getFilterChain(); - - /** - * Returns the current exception monitor. - */ - ExceptionMonitor getExceptionMonitor(); - - /** - * Sets the uncaught exception monitor. If null is specified, - * a new instance of {@link DefaultExceptionMonitor} will be set. - * - * @param monitor A new instance of {@link DefaultExceptionMonitor} is set - * if null is specified. - */ - void setExceptionMonitor( ExceptionMonitor monitor ); -} +/* + * @(#) $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.common; + +import org.apache.mina.common.support.DefaultExceptionMonitor; + +/** + * Base interface for all acceptors and connectors that manage + * sessions. + *

+ * You can monitor any uncaught exceptions by setting {@link ExceptionMonitor} + * by calling {@link #setExceptionMonitor(ExceptionMonitor)}. The default + * monitor is {@link DefaultExceptionMonitor}. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ +public interface IoSessionManager { + + /** + * Returns the {@link IoFilterChainBuilder} which will modify the + * {@link IoFilterChain} of all {@link IoSession}s which is managed + * by this manager. + * The default value is an empty {@link DefaultIoFilterChainBuilder}. + */ + IoFilterChainBuilder getFilterChainBuilder(); + + /** + * Sets the {@link IoFilterChainBuilder} which will modify the + * {@link IoFilterChain} of all {@link IoSession}s which is managed + * by this manager. + * If you specify null this property will be set to + * an empty {@link DefaultIoFilterChainBuilder}. + */ + void setFilterChainBuilder( IoFilterChainBuilder builder ); + + /** + * A shortcut for ( ( DefaultIoFilterChainBuilder ) {@link #getFilterChainBuilder()} ). + * Please note that the returned object is not a real {@link IoFilterChain} + * but a {@link DefaultIoFilterChainBuilder}. Modifying the returned builder + * won't affect the existing {@link IoSession}s at all, because + * {@link IoFilterChainBuilder}s affect only newly created {@link IoSession}s. + * + * @throws IllegalStateException if the current {@link IoFilterChainBuilder} is + * not a {@link DefaultIoFilterChainBuilder} + */ + DefaultIoFilterChainBuilder getFilterChain(); + + /** + * Returns the current exception monitor. + */ + ExceptionMonitor getExceptionMonitor(); + + /** + * Sets the uncaught exception monitor. If null is specified, + * a new instance of {@link DefaultExceptionMonitor} will be set. + * + * @param monitor A new instance of {@link DefaultExceptionMonitor} is set + * if null is specified. + */ + void setExceptionMonitor( ExceptionMonitor monitor ); +} Modified: directory/network/trunk/src/java/org/apache/mina/common/TransportType.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/TransportType.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/TransportType.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/TransportType.java Wed Nov 30 21:17:41 2005 @@ -1,221 +1,221 @@ -/* - * @(#) $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.common; - -import java.io.InvalidObjectException; -import java.io.ObjectStreamException; -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -/** - * Represents network transport types. - * MINA provides three transport types by default: - *

    - *
  • {@link #SOCKET} - TCP/IP
  • - *
  • {@link #DATAGRAM} - UDP/IP
  • - *
  • {@link #VM_PIPE} - in-VM pipe support (only available in protocol - * layer
  • - *
- *

- * You can also create your own transport type. Please refer to - * {@link #TransportType(String[], boolean)}. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - */ -public final class TransportType implements Serializable -{ - private static final long serialVersionUID = 3258132470497883447L; - - private static final Map name2type = new HashMap(); - - private static void register( String[] names, TransportType type ) - { - synchronized( name2type ) - { - for( int i = names.length - 1; i >= 0; i -- ) - { - if( name2type.containsKey( names[i] ) ) - { - throw new IllegalArgumentException( - "Transport type name '" + names[i] + "' is already taken." ); - } - } - - for( int i = names.length - 1; i >= 0; i -- ) - { - name2type.put( names[i].toUpperCase(), type ); - } - } - } - - /** - * Transport type: TCP/IP (Registry name: "SOCKET" or "TCP") - */ - public static final TransportType SOCKET = - new TransportType( new String[] { "SOCKET", "TCP" }, false ); - - /** - * Transport type: UDP/IP (Registry name: "DATAGRAM" or "UDP") - */ - public static final TransportType DATAGRAM = - new TransportType( new String[] { "DATAGRAM", "UDP" }, true ); - - /** - * Transport type: in-VM pipe (Registry name: "VM_PIPE") - * Please refer to - * org.apache.mina.protocol.vmpipe - * package. - */ - public static final TransportType VM_PIPE = - new TransportType( new String[] { "VM_PIPE" }, Object.class, false ); - - - /** - * Returns the transport type of the specified name. - * All names are case-insensitive. - * - * @param name the name of the transport type - * @return the transport type - * @throws IllegalArgumentException if the specified name is not available. - */ - public static TransportType getInstance( String name ) - { - TransportType type = (TransportType) name2type.get( name.toUpperCase() ); - if( type != null ) - { - return type; - } - - throw new IllegalArgumentException("Unknown transport type name: " + name); - } - - private final String[] names; - - private final transient boolean connectionless; - - private final transient Class envelopeType; - - /** - * Creates a new instance. New transport type is automatically registered - * to internal registry so that you can look it up using {@link #getInstance(String)}. - * - * @param names the name or aliases of this transport type - * @param connectionless true if and only if this transport type is connectionless - * - * @throws IllegalArgumentException if names are already registered or empty - */ - public TransportType( String[] names, boolean connectionless ) - { - this( names, ByteBuffer.class, connectionless ); - } - - /** - * Creates a new instance. New transport type is automatically registered - * to internal registry so that you can look it up using {@link #getInstance(String)}. - * - * @param names the name or aliases of this transport type - * @param connectionless true if and only if this transport type is connectionless - * - * @throws IllegalArgumentException if names are already registered or empty - */ - public TransportType( String[] names, Class envelopeType, boolean connectionless ) - { - if( names == null ) - { - throw new NullPointerException( "names" ); - } - if( names.length == 0 ) - { - throw new IllegalArgumentException( "names is empty" ); - } - if( envelopeType == null ) - { - throw new NullPointerException( "envelopeType" ); - } - - for( int i = 0; i < names.length; i ++ ) - { - if( names[ i ] == null ) - { - throw new NullPointerException( "strVals[" + i + "]" ); - } - - names[ i ] = names[ i ].toUpperCase(); - } - - register( names, this ); - this.names = names; - this.connectionless = connectionless; - this.envelopeType = envelopeType; - } - - /** - * Returns true if the session of this transport type is - * connectionless. - */ - public boolean isConnectionless() - { - return connectionless; - } - - public Class getEnvelopeType() - { - return envelopeType; - } - - /** - * Returns the known names of this transport type. - */ - public Set getNames() - { - Set result = new TreeSet(); - for( int i = names.length - 1; i >= 0; i -- ) - { - result.add( names[ i ] ); - } - - return result; - } - - public String toString() - { - return names[0]; - } - - private Object readResolve() throws ObjectStreamException - { - for( int i = names.length - 1; i >= 0; i -- ) - { - try - { - return getInstance( names[ i ] ); - } - catch( IllegalArgumentException e ) - { - // ignore - } - } - - throw new InvalidObjectException( "Unknown transport type." ); - } -} +/* + * @(#) $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.common; + +import java.io.InvalidObjectException; +import java.io.ObjectStreamException; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +/** + * Represents network transport types. + * MINA provides three transport types by default: + *

    + *
  • {@link #SOCKET} - TCP/IP
  • + *
  • {@link #DATAGRAM} - UDP/IP
  • + *
  • {@link #VM_PIPE} - in-VM pipe support (only available in protocol + * layer
  • + *
+ *

+ * You can also create your own transport type. Please refer to + * {@link #TransportType(String[], boolean)}. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ +public final class TransportType implements Serializable +{ + private static final long serialVersionUID = 3258132470497883447L; + + private static final Map name2type = new HashMap(); + + private static void register( String[] names, TransportType type ) + { + synchronized( name2type ) + { + for( int i = names.length - 1; i >= 0; i -- ) + { + if( name2type.containsKey( names[i] ) ) + { + throw new IllegalArgumentException( + "Transport type name '" + names[i] + "' is already taken." ); + } + } + + for( int i = names.length - 1; i >= 0; i -- ) + { + name2type.put( names[i].toUpperCase(), type ); + } + } + } + + /** + * Transport type: TCP/IP (Registry name: "SOCKET" or "TCP") + */ + public static final TransportType SOCKET = + new TransportType( new String[] { "SOCKET", "TCP" }, false ); + + /** + * Transport type: UDP/IP (Registry name: "DATAGRAM" or "UDP") + */ + public static final TransportType DATAGRAM = + new TransportType( new String[] { "DATAGRAM", "UDP" }, true ); + + /** + * Transport type: in-VM pipe (Registry name: "VM_PIPE") + * Please refer to + * org.apache.mina.protocol.vmpipe + * package. + */ + public static final TransportType VM_PIPE = + new TransportType( new String[] { "VM_PIPE" }, Object.class, false ); + + + /** + * Returns the transport type of the specified name. + * All names are case-insensitive. + * + * @param name the name of the transport type + * @return the transport type + * @throws IllegalArgumentException if the specified name is not available. + */ + public static TransportType getInstance( String name ) + { + TransportType type = (TransportType) name2type.get( name.toUpperCase() ); + if( type != null ) + { + return type; + } + + throw new IllegalArgumentException("Unknown transport type name: " + name); + } + + private final String[] names; + + private final transient boolean connectionless; + + private final transient Class envelopeType; + + /** + * Creates a new instance. New transport type is automatically registered + * to internal registry so that you can look it up using {@link #getInstance(String)}. + * + * @param names the name or aliases of this transport type + * @param connectionless true if and only if this transport type is connectionless + * + * @throws IllegalArgumentException if names are already registered or empty + */ + public TransportType( String[] names, boolean connectionless ) + { + this( names, ByteBuffer.class, connectionless ); + } + + /** + * Creates a new instance. New transport type is automatically registered + * to internal registry so that you can look it up using {@link #getInstance(String)}. + * + * @param names the name or aliases of this transport type + * @param connectionless true if and only if this transport type is connectionless + * + * @throws IllegalArgumentException if names are already registered or empty + */ + public TransportType( String[] names, Class envelopeType, boolean connectionless ) + { + if( names == null ) + { + throw new NullPointerException( "names" ); + } + if( names.length == 0 ) + { + throw new IllegalArgumentException( "names is empty" ); + } + if( envelopeType == null ) + { + throw new NullPointerException( "envelopeType" ); + } + + for( int i = 0; i < names.length; i ++ ) + { + if( names[ i ] == null ) + { + throw new NullPointerException( "strVals[" + i + "]" ); + } + + names[ i ] = names[ i ].toUpperCase(); + } + + register( names, this ); + this.names = names; + this.connectionless = connectionless; + this.envelopeType = envelopeType; + } + + /** + * Returns true if the session of this transport type is + * connectionless. + */ + public boolean isConnectionless() + { + return connectionless; + } + + public Class getEnvelopeType() + { + return envelopeType; + } + + /** + * Returns the known names of this transport type. + */ + public Set getNames() + { + Set result = new TreeSet(); + for( int i = names.length - 1; i >= 0; i -- ) + { + result.add( names[ i ] ); + } + + return result; + } + + public String toString() + { + return names[0]; + } + + private Object readResolve() throws ObjectStreamException + { + for( int i = names.length - 1; i >= 0; i -- ) + { + try + { + return getInstance( names[ i ] ); + } + catch( IllegalArgumentException e ) + { + // ignore + } + } + + throw new InvalidObjectException( "Unknown transport type." ); + } +} Modified: directory/network/trunk/src/java/org/apache/mina/common/WriteTimeoutException.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/WriteTimeoutException.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/WriteTimeoutException.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/WriteTimeoutException.java Wed Nov 30 21:17:41 2005 @@ -1,49 +1,49 @@ -/* - * @(#) $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.common; - -import java.io.IOException; - -/** - * An {@link IOException} which is thrown when write buffer is not flushed for - * {@link IoSession#getWriteTimeout()} seconds. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$, - */ -public class WriteTimeoutException extends IOException -{ - private static final long serialVersionUID = 3906931157944579121L; - - /** - * Creates a new exception. - */ - public WriteTimeoutException() - { - super(); - } - - /** - * Creates a new exception. - */ - public WriteTimeoutException( String s ) - { - super( s ); - } +/* + * @(#) $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.common; + +import java.io.IOException; + +/** + * An {@link IOException} which is thrown when write buffer is not flushed for + * {@link IoSession#getWriteTimeout()} seconds. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$, + */ +public class WriteTimeoutException extends IOException +{ + private static final long serialVersionUID = 3906931157944579121L; + + /** + * Creates a new exception. + */ + public WriteTimeoutException() + { + super(); + } + + /** + * Creates a new exception. + */ + public WriteTimeoutException( String s ) + { + super( s ); + } }