Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 17001 invoked from network); 1 Dec 2005 05:20:08 -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:08 -0000 Received: (qmail 45487 invoked by uid 500); 1 Dec 2005 05:20:06 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 45401 invoked by uid 500); 1 Dec 2005 05:20:04 -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 45307 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=-8.6 required=10.0 tests=ALL_TRUSTED,INFO_TLD,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 16276 invoked by uid 65534); 1 Dec 2005 05:19:37 -0000 Message-ID: <20051201051937.16274.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r350169 [7/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/support/DefaultExceptionMonitor.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/support/DefaultExceptionMonitor.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/support/DefaultExceptionMonitor.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/support/DefaultExceptionMonitor.java Wed Nov 30 21:17:41 2005 @@ -1,44 +1,44 @@ -/* - * @(#) $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.support; - -import org.apache.mina.common.ExceptionMonitor; -import org.apache.mina.common.IoSessionManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * A default {@link ExceptionMonitor} implementation that logs uncaught - * exceptions using {@link Logger}. - *

- * All {@link IoSessionManager}s have this implementation as a default exception - * monitor. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - */ -public class DefaultExceptionMonitor implements ExceptionMonitor -{ - private static final Logger log = LoggerFactory.getLogger( DefaultExceptionMonitor.class ); - - public void exceptionCaught( Object source, Throwable cause ) - { - log.warn( "Unexpected exception.", cause ); - } +/* + * @(#) $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.support; + +import org.apache.mina.common.ExceptionMonitor; +import org.apache.mina.common.IoSessionManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A default {@link ExceptionMonitor} implementation that logs uncaught + * exceptions using {@link Logger}. + *

+ * All {@link IoSessionManager}s have this implementation as a default exception + * monitor. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ +public class DefaultExceptionMonitor implements ExceptionMonitor +{ + private static final Logger log = LoggerFactory.getLogger( DefaultExceptionMonitor.class ); + + public void exceptionCaught( Object source, Throwable cause ) + { + log.warn( "Unexpected exception.", cause ); + } } Modified: directory/network/trunk/src/java/org/apache/mina/common/support/DelegatedIoAcceptor.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/support/DelegatedIoAcceptor.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/support/DelegatedIoAcceptor.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/support/DelegatedIoAcceptor.java Wed Nov 30 21:17:41 2005 @@ -1,89 +1,113 @@ -/* - * @(#) $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.support; - -import java.io.IOException; -import java.net.SocketAddress; - -import org.apache.mina.common.ExceptionMonitor; -import org.apache.mina.common.IoAcceptor; -import org.apache.mina.common.IoFilterChain; -import org.apache.mina.common.IoHandler; -import org.apache.mina.common.IoSession; - -/** - * A delegated {@link IoAcceptor} that wraps the other {@link IoAcceptor}. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - */ -public class DelegatedIoAcceptor implements IoAcceptor -{ - protected final IoAcceptor delegate; - - /** - * Creates a new instance. - */ - protected DelegatedIoAcceptor( IoAcceptor delegate ) - { - this.delegate = delegate; - } - - public void bind( SocketAddress address, IoHandler handler ) throws IOException - { - delegate.bind( address, handler ); - } - - public void unbind( SocketAddress address ) - { - delegate.unbind( address ); - } - - public IoSession newSession( SocketAddress remoteAddress, SocketAddress localAddress ) - { - return delegate.newSession( remoteAddress, localAddress ); - } - - public IoFilterChain getFilterChain() - { - return delegate.getFilterChain(); - } - - public ExceptionMonitor getExceptionMonitor() - { - return delegate.getExceptionMonitor(); - } - - public void setExceptionMonitor( ExceptionMonitor monitor ) - { - delegate.setExceptionMonitor( monitor ); - } - - /* TODO: DIRMINA-93 - public boolean isDisconnectClientsOnUnbind() - { - return delegate.isDisconnectClientsOnUnbind(); - } - - public void setDisconnectClientsOnUnbind( boolean disconnectClientsOnUnbind ) - { - delegate.setDisconnectClientsOnUnbind( disconnectClientsOnUnbind ); - } - */ -} +/* + * @(#) $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.support; + +import java.io.IOException; +import java.net.SocketAddress; + +import org.apache.mina.common.DefaultIoFilterChainBuilder; +import org.apache.mina.common.ExceptionMonitor; +import org.apache.mina.common.IoAcceptor; +import org.apache.mina.common.IoFilterChainBuilder; +import org.apache.mina.common.IoHandler; +import org.apache.mina.common.IoSession; + +/** + * A delegated {@link IoAcceptor} that wraps the other {@link IoAcceptor}. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ +public class DelegatedIoAcceptor implements IoAcceptor +{ + protected IoAcceptor delegate; + + /** + * Creates a new instance. + */ + protected DelegatedIoAcceptor() + { + } + + /** + * Sets the delegate. This method should be invoked before any operations + * is requested. + */ + protected void init( IoAcceptor delegate ) + { + this.delegate = delegate; + } + + public void bind( SocketAddress address, IoHandler handler ) throws IOException + { + delegate.bind( address, handler ); + } + + public void bind( SocketAddress address, IoHandler handler, IoFilterChainBuilder filterChainBuilder ) throws IOException + { + delegate.bind( address, handler, filterChainBuilder ); + } + + public void unbind( SocketAddress address ) + { + delegate.unbind( address ); + } + + public IoSession newSession( SocketAddress remoteAddress, SocketAddress localAddress ) + { + return delegate.newSession( remoteAddress, localAddress ); + } + + public ExceptionMonitor getExceptionMonitor() + { + return delegate.getExceptionMonitor(); + } + + public void setExceptionMonitor( ExceptionMonitor monitor ) + { + delegate.setExceptionMonitor( monitor ); + } + + public IoFilterChainBuilder getFilterChainBuilder() + { + return delegate.getFilterChainBuilder(); + } + + public void setFilterChainBuilder( IoFilterChainBuilder builder ) + { + delegate.setFilterChainBuilder( builder ); + } + + public DefaultIoFilterChainBuilder getFilterChain() + { + return delegate.getFilterChain(); + } + + /* TODO: DIRMINA-93 + public boolean isDisconnectClientsOnUnbind() + { + return delegate.isDisconnectClientsOnUnbind(); + } + + public void setDisconnectClientsOnUnbind( boolean disconnectClientsOnUnbind ) + { + delegate.setDisconnectClientsOnUnbind( disconnectClientsOnUnbind ); + } + */ +} Modified: directory/network/trunk/src/java/org/apache/mina/common/support/DelegatedIoConnector.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/support/DelegatedIoConnector.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/support/DelegatedIoConnector.java (original) +++ directory/network/trunk/src/java/org/apache/mina/common/support/DelegatedIoConnector.java Wed Nov 30 21:17:41 2005 @@ -1,88 +1,117 @@ -/* - * @(#) $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.support; - -import java.io.IOException; -import java.net.SocketAddress; - -import org.apache.mina.common.ConnectFuture; -import org.apache.mina.common.ExceptionMonitor; -import org.apache.mina.common.IoConnector; -import org.apache.mina.common.IoFilterChain; -import org.apache.mina.common.IoHandler; - -/** - * A delegated {@link IoConnector} that wraps the other {@link IoConnector}. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - */ -public class DelegatedIoConnector implements IoConnector -{ - protected final IoConnector delegate; - - /** - * Creates a new instance. - */ - protected DelegatedIoConnector( IoConnector delegate ) - { - this.delegate = delegate; - } - - public ConnectFuture connect( SocketAddress address, IoHandler handler ) throws IOException - { - return delegate.connect( address, handler ); - } - - public ConnectFuture connect( SocketAddress address, SocketAddress localAddress, - IoHandler handler ) throws IOException - { - return delegate.connect( address, localAddress, handler ); - } - - public IoFilterChain getFilterChain() - { - return delegate.getFilterChain(); - } - - public ExceptionMonitor getExceptionMonitor() - { - return delegate.getExceptionMonitor(); - } - - public void setExceptionMonitor( ExceptionMonitor monitor ) - { - delegate.setExceptionMonitor( monitor ); - } - - public int getConnectTimeout() - { - return delegate.getConnectTimeout(); - } - - public long getConnectTimeoutMillis() - { - return delegate.getConnectTimeoutMillis(); - } - - public void setConnectTimeout( int connectTimeout ) - { - delegate.setConnectTimeout( connectTimeout ); - } -} +/* + * @(#) $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.support; + +import java.net.SocketAddress; + +import org.apache.mina.common.ConnectFuture; +import org.apache.mina.common.DefaultIoFilterChainBuilder; +import org.apache.mina.common.ExceptionMonitor; +import org.apache.mina.common.IoConnector; +import org.apache.mina.common.IoFilterChainBuilder; +import org.apache.mina.common.IoHandler; + +/** + * A delegated {@link IoConnector} that wraps the other {@link IoConnector}. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ +public class DelegatedIoConnector implements IoConnector +{ + protected IoConnector delegate; + + /** + * Creates a new instance. + */ + protected DelegatedIoConnector() + { + } + + /** + * Sets the delegate. This method should be invoked before any operation + * is requested. + */ + protected void init( IoConnector delegate ) + { + this.delegate = delegate; + } + + public ConnectFuture connect( SocketAddress address, IoHandler handler ) + { + return delegate.connect( address, handler ); + } + + public ConnectFuture connect( SocketAddress address, IoHandler handler, IoFilterChainBuilder filterChainBuilder ) + { + return delegate.connect( address, handler, filterChainBuilder ); + } + + public ConnectFuture connect( SocketAddress address, SocketAddress localAddress, + IoHandler handler ) + { + return delegate.connect( address, localAddress, handler ); + } + + public ConnectFuture connect( SocketAddress address, SocketAddress localAddress, + IoHandler handler, IoFilterChainBuilder filterChainBuilder ) + { + return delegate.connect( address, localAddress, handler, filterChainBuilder ); + } + + public ExceptionMonitor getExceptionMonitor() + { + return delegate.getExceptionMonitor(); + } + + public void setExceptionMonitor( ExceptionMonitor monitor ) + { + delegate.setExceptionMonitor( monitor ); + } + + public int getConnectTimeout() + { + return delegate.getConnectTimeout(); + } + + public long getConnectTimeoutMillis() + { + return delegate.getConnectTimeoutMillis(); + } + + public void setConnectTimeout( int connectTimeout ) + { + delegate.setConnectTimeout( connectTimeout ); + } + + public IoFilterChainBuilder getFilterChainBuilder() + { + return delegate.getFilterChainBuilder(); + } + + public void setFilterChainBuilder( IoFilterChainBuilder builder ) + { + delegate.setFilterChainBuilder( builder ); + } + + public DefaultIoFilterChainBuilder getFilterChain() + { + return delegate.getFilterChain(); + } +} Added: directory/network/trunk/src/java/org/apache/mina/common/support/IoFilterLifeCycleManager.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/common/support/IoFilterLifeCycleManager.java?rev=350169&view=auto ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/common/support/IoFilterLifeCycleManager.java (added) +++ directory/network/trunk/src/java/org/apache/mina/common/support/IoFilterLifeCycleManager.java Wed Nov 30 21:17:41 2005 @@ -0,0 +1,200 @@ +/* + * @(#) $Id: IoFilterLifeCycleManager.java 350148 2005-12-01 04:13:18Z 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.support; + +import java.util.IdentityHashMap; +import java.util.Map; + +import org.apache.mina.common.IoFilter; +import org.apache.mina.common.IoFilterChain; +import org.apache.mina.common.IoFilterLifeCycleException; +import org.apache.mina.common.IoFilter.NextFilter; + +/** + * Manages the life cycle of {@link IoFilter}s globally. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev: 350148 $, $Date: 2005-12-01 13:13:18 +0900 $ + */ +public class IoFilterLifeCycleManager +{ + private static final IoFilterLifeCycleManager INSTANCE = new IoFilterLifeCycleManager(); + + public static IoFilterLifeCycleManager getInstance() + { + return INSTANCE; + } + + private Map counts = new IdentityHashMap(); + + private IoFilterLifeCycleManager() + { + } + + public synchronized void callInitIfNecessary( IoFilter filter ) + { + ReferenceCount count = ( ReferenceCount ) counts.get( filter ); + if( count == null ) + { + count = new ReferenceCount(); + counts.put( filter, count ); + try + { + filter.init(); + } + catch( Throwable t ) + { + throw new IoFilterLifeCycleException( + "init(): " + filter, t ); + } + } + } + + public synchronized void callOnPreAdd( IoFilterChain chain, String name, IoFilter filter, NextFilter nextFilter ) + { + ReferenceCount count = ( ReferenceCount ) counts.get( filter ); + if( count == null ) + { + throw new IllegalStateException(); + } + + count.increase(); + + try + { + filter.onPreAdd( chain, name, nextFilter ); + } + catch( Throwable t ) + { + throw new IoFilterLifeCycleException( + "onPreAdd(): " + name + ':' + filter + " in " + + chain.getSession(), t ); + } + } + + public synchronized void callOnPreRemove( IoFilterChain chain, String name, IoFilter filter, NextFilter nextFilter ) + { + ReferenceCount count = ( ReferenceCount ) counts.get( filter ); + if( count == null || count.get() == 0 ) + { + return; + } + + try + { + filter.onPreRemove( chain, name, nextFilter); + } + catch( Throwable t ) + { + throw new IoFilterLifeCycleException( + "onPreRemove(): " + name + ':' + filter + " in " + + chain.getSession(), t ); + } + } + + public synchronized void callOnPostAdd( IoFilterChain chain, String name, IoFilter filter, NextFilter nextFilter ) + { + ReferenceCount count = ( ReferenceCount ) counts.get( filter ); + if( count == null ) + { + throw new IllegalStateException(); + } + + try + { + filter.onPostAdd( chain, name, nextFilter ); + } + catch( Throwable t ) + { + // Revert back the reference count. + count.decrease(); + + throw new IoFilterLifeCycleException( + "onPostAdd(): " + name + ':' + filter + " in " + + chain.getSession(), t ); + } + } + + public synchronized void callOnPostRemove( IoFilterChain chain, String name, IoFilter filter, NextFilter nextFilter ) + { + ReferenceCount count = ( ReferenceCount ) counts.get( filter ); + if( count == null || count.get() == 0 ) + { + return; + } + + try + { + filter.onPostRemove( chain, name, nextFilter); + } + catch( Throwable t ) + { + throw new IoFilterLifeCycleException( + "onPostRemove(): " + name + ':' + filter + " in " + + chain.getSession(), t ); + } + finally + { + count.decrease(); + } + } + + public synchronized void callDestroyIfNecessary( IoFilter filter ) + { + ReferenceCount count = ( ReferenceCount ) counts.get( filter ); + if( count == null ) + { + return; + } + + if( count.get() == 0 ) + { + counts.remove( filter ); + try + { + filter.destroy(); + } + catch( Throwable t2 ) + { + throw new IoFilterLifeCycleException( "Failed to destroy: " + filter, t2 ); + } + } + } + + /** Maintains the reference count of an {@link IoFilter}. */ + private static class ReferenceCount + { + private int count; + + public int get() + { + return count; + } + + public int increase() + { + return count ++; + } + + public int decrease() + { + return -- count; + } + } +} Modified: directory/network/trunk/src/java/org/apache/mina/filter/BlacklistFilter.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/BlacklistFilter.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/filter/BlacklistFilter.java (original) +++ directory/network/trunk/src/java/org/apache/mina/filter/BlacklistFilter.java Wed Nov 30 21:17:41 2005 @@ -1,214 +1,214 @@ -/* - * @(#) $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.filter; - -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.SocketAddress; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - -import org.apache.mina.common.IdleStatus; -import org.apache.mina.common.IoFilter; -import org.apache.mina.common.IoFilterAdapter; -import org.apache.mina.common.IoSession; -import org.apache.mina.util.SessionLog; - -/** - * A {@link IoFilter} which blocks connections from blacklisted remote - * address. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - */ -public class BlacklistFilter extends IoFilterAdapter -{ - private final Set blacklist = new HashSet(); - - /** - * Sets the addresses to be blacklisted. - * - * NOTE: this call will remove any previously blacklisted addresses. - * - * @param addresses an array of addresses to be blacklisted. - */ - public void setBlacklist( InetAddress[] addresses ) - { - if( addresses == null ) - throw new NullPointerException( "addresses" ); - blacklist.clear(); - for( int i = 0; i < addresses.length; i++ ) - { - InetAddress addr = addresses[ i ]; - if( addr == null ) - { - throw new NullPointerException( "addresses[" + i + ']' ); - } - blacklist.add( addr ); - } - } - - /** - * Sets the addresses to be blacklisted. - * - * NOTE: this call will remove any previously blacklisted addresses. - * - * @param addresses a collection of InetAddress objects representing the - * addresses to be blacklisted. - * @throws IllegalArgumentException if the specified collections contains - * non-{@link InetAddress} objects. - */ - public void setBlacklist( Collection addresses ) - { - if( addresses == null ) - throw new NullPointerException( "addresses" ); - - InetAddress[] inetAddresses = new InetAddress[ addresses.size() ]; - try - { - setBlacklist( ( InetAddress[] ) addresses.toArray( inetAddresses ) ); - } - catch ( ArrayStoreException ase ) - { - throw new IllegalArgumentException( - "Collection of addresses must contain only " + - "InetAddress instances", ase ); - } - } - - /** - * Blocks the specified endpoint. - */ - public synchronized void block( InetAddress address ) - { - if( address == null ) - throw new NullPointerException( "address" ); - blacklist.add( address ); - } - - /** - * Unblocks the specified endpoint. - */ - public synchronized void unblock( InetAddress address ) - { - if( address == null ) - throw new NullPointerException( "address" ); - blacklist.remove( address ); - } - - public void sessionCreated( NextFilter nextFilter, IoSession session ) - { - if( !isBlocked( session ) ) - { - // forward if not blocked - nextFilter.sessionCreated( session ); - } - else - { - blockSession( session ); - } - } - - public void sessionOpened( NextFilter nextFilter, IoSession session ) throws Exception - { - if( !isBlocked( session ) ) - { - // forward if not blocked - nextFilter.sessionOpened( session ); - } - else - { - blockSession( session ); - } - } - - public void sessionClosed( NextFilter nextFilter, IoSession session ) throws Exception - { - if( !isBlocked( session ) ) - { - // forward if not blocked - nextFilter.sessionClosed( session ); - } - else - { - blockSession( session ); - } - } - - public void sessionIdle( NextFilter nextFilter, IoSession session, IdleStatus status ) throws Exception - { - if( !isBlocked( session ) ) - { - // forward if not blocked - nextFilter.sessionIdle( session, status ); - } - else - { - blockSession( session ); - } - } - - public void messageReceived( NextFilter nextFilter, IoSession session, Object message ) - { - if( !isBlocked( session ) ) - { - // forward if not blocked - nextFilter.messageReceived( session, message ); - } - else - { - blockSession( session ); - } - } - - public void messageSent( NextFilter nextFilter, IoSession session, Object message ) throws Exception - { - if( !isBlocked( session ) ) - { - // forward if not blocked - nextFilter.messageSent( session, message ); - } - else - { - blockSession( session ); - } - } - - private void blockSession( IoSession session ) - { - SessionLog.info( session, "Remote address in the blacklist; closing." ); - session.close(); - } - - private boolean isBlocked( IoSession session ) - { - SocketAddress remoteAddress = session.getRemoteAddress(); - if( remoteAddress instanceof InetSocketAddress ) - { - if( blacklist.contains( ( ( InetSocketAddress ) remoteAddress ) - .getAddress() ) ) - { - return true; - } - } - - return false; - } +/* + * @(#) $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.filter; + +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import org.apache.mina.common.IdleStatus; +import org.apache.mina.common.IoFilter; +import org.apache.mina.common.IoFilterAdapter; +import org.apache.mina.common.IoSession; +import org.apache.mina.util.SessionLog; + +/** + * A {@link IoFilter} which blocks connections from blacklisted remote + * address. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + */ +public class BlacklistFilter extends IoFilterAdapter +{ + private final Set blacklist = new HashSet(); + + /** + * Sets the addresses to be blacklisted. + * + * NOTE: this call will remove any previously blacklisted addresses. + * + * @param addresses an array of addresses to be blacklisted. + */ + public void setBlacklist( InetAddress[] addresses ) + { + if( addresses == null ) + throw new NullPointerException( "addresses" ); + blacklist.clear(); + for( int i = 0; i < addresses.length; i++ ) + { + InetAddress addr = addresses[ i ]; + if( addr == null ) + { + throw new NullPointerException( "addresses[" + i + ']' ); + } + blacklist.add( addr ); + } + } + + /** + * Sets the addresses to be blacklisted. + * + * NOTE: this call will remove any previously blacklisted addresses. + * + * @param addresses a collection of InetAddress objects representing the + * addresses to be blacklisted. + * @throws IllegalArgumentException if the specified collections contains + * non-{@link InetAddress} objects. + */ + public void setBlacklist( Collection addresses ) + { + if( addresses == null ) + throw new NullPointerException( "addresses" ); + + InetAddress[] inetAddresses = new InetAddress[ addresses.size() ]; + try + { + setBlacklist( ( InetAddress[] ) addresses.toArray( inetAddresses ) ); + } + catch ( ArrayStoreException ase ) + { + throw new IllegalArgumentException( + "Collection of addresses must contain only " + + "InetAddress instances", ase ); + } + } + + /** + * Blocks the specified endpoint. + */ + public synchronized void block( InetAddress address ) + { + if( address == null ) + throw new NullPointerException( "address" ); + blacklist.add( address ); + } + + /** + * Unblocks the specified endpoint. + */ + public synchronized void unblock( InetAddress address ) + { + if( address == null ) + throw new NullPointerException( "address" ); + blacklist.remove( address ); + } + + public void sessionCreated( NextFilter nextFilter, IoSession session ) + { + if( !isBlocked( session ) ) + { + // forward if not blocked + nextFilter.sessionCreated( session ); + } + else + { + blockSession( session ); + } + } + + public void sessionOpened( NextFilter nextFilter, IoSession session ) throws Exception + { + if( !isBlocked( session ) ) + { + // forward if not blocked + nextFilter.sessionOpened( session ); + } + else + { + blockSession( session ); + } + } + + public void sessionClosed( NextFilter nextFilter, IoSession session ) throws Exception + { + if( !isBlocked( session ) ) + { + // forward if not blocked + nextFilter.sessionClosed( session ); + } + else + { + blockSession( session ); + } + } + + public void sessionIdle( NextFilter nextFilter, IoSession session, IdleStatus status ) throws Exception + { + if( !isBlocked( session ) ) + { + // forward if not blocked + nextFilter.sessionIdle( session, status ); + } + else + { + blockSession( session ); + } + } + + public void messageReceived( NextFilter nextFilter, IoSession session, Object message ) + { + if( !isBlocked( session ) ) + { + // forward if not blocked + nextFilter.messageReceived( session, message ); + } + else + { + blockSession( session ); + } + } + + public void messageSent( NextFilter nextFilter, IoSession session, Object message ) throws Exception + { + if( !isBlocked( session ) ) + { + // forward if not blocked + nextFilter.messageSent( session, message ); + } + else + { + blockSession( session ); + } + } + + private void blockSession( IoSession session ) + { + SessionLog.info( session, "Remote address in the blacklist; closing." ); + session.close(); + } + + private boolean isBlocked( IoSession session ) + { + SocketAddress remoteAddress = session.getRemoteAddress(); + if( remoteAddress instanceof InetSocketAddress ) + { + if( blacklist.contains( ( ( InetSocketAddress ) remoteAddress ) + .getAddress() ) ) + { + return true; + } + } + + return false; + } } Modified: directory/network/trunk/src/java/org/apache/mina/filter/LoggingFilter.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/LoggingFilter.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/filter/LoggingFilter.java (original) +++ directory/network/trunk/src/java/org/apache/mina/filter/LoggingFilter.java Wed Nov 30 21:17:41 2005 @@ -1,124 +1,107 @@ -/* - * @(#) $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.filter; - -import org.apache.mina.common.CloseFuture; -import org.apache.mina.common.IdleStatus; -import org.apache.mina.common.IoFilter; -import org.apache.mina.common.IoFilterChain; -import org.apache.mina.common.IoSession; -import org.apache.mina.util.SessionLog; -import org.slf4j.Logger; - -/** - * Logs all MINA protocol events to {@link Logger}. - * - * @author The Apache Directory Project (dev@directory.apache.org) - * @version $Rev$, $Date$ - * - * @see SessionLog - */ -public class LoggingFilter implements IoFilter -{ - /** - * Session attribute key: prefix string - */ - public static final String PREFIX = SessionLog.PREFIX; - - /** - * Session attribute key: {@link Logger} - */ - public static final String LOGGER = SessionLog.LOGGER; - - /** - * Creates a new instance. - */ - public LoggingFilter() - { - } - - public void init() - { - } - - public void destroy() - { - } - - public void sessionCreated( NextFilter nextFilter, IoSession session ) - { - nextFilter.sessionCreated( session ); - } - - public void sessionOpened( NextFilter nextFilter, IoSession session ) - { - SessionLog.info( session, "OPENED" ); - nextFilter.sessionOpened( session ); - } - - public void sessionClosed( NextFilter nextFilter, IoSession session ) - { - SessionLog.info( session, "CLOSED" ); - nextFilter.sessionClosed( session ); - } - - public void sessionIdle( NextFilter nextFilter, IoSession session, IdleStatus status ) - { - SessionLog.info( session, "IDLE: " + status ); - nextFilter.sessionIdle( session, status ); - } - - public void exceptionCaught( NextFilter nextFilter, IoSession session, Throwable cause ) - { - SessionLog.error( session, "EXCEPTION:", cause ); - nextFilter.exceptionCaught( session, cause ); - } - - public void messageReceived( NextFilter nextFilter, IoSession session, Object message ) - { - SessionLog.info( session, "RECEIVED: " + message ); - nextFilter.messageReceived( session, message ); - } - - public void messageSent( NextFilter nextFilter, IoSession session, Object message ) - { - SessionLog.info( session, "SENT: " + message ); - nextFilter.messageSent( session, message ); - } - - public void filterWrite( NextFilter nextFilter, IoSession session, WriteRequest writeRequest ) - { - SessionLog.info( session, "WRITE: " + writeRequest ); - nextFilter.filterWrite( session, writeRequest ); - } - - public void filterClose( NextFilter nextFilter, IoSession session, CloseFuture closeFuture ) throws Exception - { - SessionLog.info( session, "CLOSE" ); - nextFilter.filterClose( session, closeFuture ); - } - - public void init( IoFilterChain parent, NextFilter nextFilter ) throws Exception - { - } - - public void destroy( IoFilterChain parent, NextFilter nextFilter ) 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.filter; + +import org.apache.mina.common.CloseFuture; +import org.apache.mina.common.IdleStatus; +import org.apache.mina.common.IoFilterAdapter; +import org.apache.mina.common.IoSession; +import org.apache.mina.util.SessionLog; +import org.slf4j.Logger; + +/** + * Logs all MINA protocol events to {@link Logger}. + * + * @author The Apache Directory Project (dev@directory.apache.org) + * @version $Rev$, $Date$ + * + * @see SessionLog + */ +public class LoggingFilter extends IoFilterAdapter +{ + /** + * Session attribute key: prefix string + */ + public static final String PREFIX = SessionLog.PREFIX; + + /** + * Session attribute key: {@link Logger} + */ + public static final String LOGGER = SessionLog.LOGGER; + + /** + * Creates a new instance. + */ + public LoggingFilter() + { + } + + public void sessionCreated( NextFilter nextFilter, IoSession session ) + { + nextFilter.sessionCreated( session ); + } + + public void sessionOpened( NextFilter nextFilter, IoSession session ) + { + SessionLog.info( session, "OPENED" ); + nextFilter.sessionOpened( session ); + } + + public void sessionClosed( NextFilter nextFilter, IoSession session ) + { + SessionLog.info( session, "CLOSED" ); + nextFilter.sessionClosed( session ); + } + + public void sessionIdle( NextFilter nextFilter, IoSession session, IdleStatus status ) + { + SessionLog.info( session, "IDLE: " + status ); + nextFilter.sessionIdle( session, status ); + } + + public void exceptionCaught( NextFilter nextFilter, IoSession session, Throwable cause ) + { + SessionLog.error( session, "EXCEPTION:", cause ); + nextFilter.exceptionCaught( session, cause ); + } + + public void messageReceived( NextFilter nextFilter, IoSession session, Object message ) + { + SessionLog.info( session, "RECEIVED: " + message ); + nextFilter.messageReceived( session, message ); + } + + public void messageSent( NextFilter nextFilter, IoSession session, Object message ) + { + SessionLog.info( session, "SENT: " + message ); + nextFilter.messageSent( session, message ); + } + + public void filterWrite( NextFilter nextFilter, IoSession session, WriteRequest writeRequest ) + { + SessionLog.info( session, "WRITE: " + writeRequest ); + nextFilter.filterWrite( session, writeRequest ); + } + + public void filterClose( NextFilter nextFilter, IoSession session, CloseFuture closeFuture ) throws Exception + { + SessionLog.info( session, "CLOSE" ); + nextFilter.filterClose( session, closeFuture ); + } +} Modified: directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java?rev=350169&r1=350168&r2=350169&view=diff ============================================================================== --- directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java (original) +++ directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java Wed Nov 30 21:17:41 2005 @@ -113,10 +113,9 @@ */ public static final SSLFilterMessage SESSION_UNSECURED = new SSLFilterMessage( "SESSION_UNSECURED" ); + private static final String NEXT_FILTER = SSLFilter.class.getName() + ".NextFilter"; private static final String SSL_HANDLER = SSLFilter.class.getName() + ".SSLHandler"; - private IoFilterChain parent; - // SSL Context private SSLContext sslContext; @@ -179,7 +178,7 @@ } } - createSSLSessionHandler( parent.getNextFilter( this ), session ); + createSSLSessionHandler( ( NextFilter ) session.getAttribute( NEXT_FILTER ), session ); return true; } } @@ -228,7 +227,7 @@ throw new IllegalArgumentException( "Not managed by this filter." ); } - NextFilter nextFilter = parent.getNextFilter( this ); + NextFilter nextFilter = ( NextFilter ) session.getAttribute( NEXT_FILTER ); return initiateClosure( nextFilter, session ); } } @@ -331,19 +330,27 @@ this.enabledProtocols = protocols; } - public void init( IoFilterChain parent, NextFilter nextFilter ) throws SSLException + public void onPreAdd( IoFilterChain parent, String name, NextFilter nextFilter ) throws SSLException + { + if( parent.contains( SSLFilter.class ) ) + { + throw new IllegalStateException( "A filter chain cannot contain more than one SSLFilter." ); + } + } + + public void onPostAdd( IoFilterChain parent, String name, NextFilter nextFilter ) throws SSLException { - this.parent = parent; - Object managerOrSession = parent.getParent(); + parent.getSession().setAttribute( NEXT_FILTER, nextFilter ); + Object managerOrSession = parent.getSession(); if( managerOrSession instanceof IoSession ) { createSSLSessionHandler( nextFilter, ( IoSession ) managerOrSession ); } } - public void destroy( IoFilterChain parent, NextFilter nextFilter ) + public void onPreRemove( IoFilterChain parent, String name, NextFilter nextFilter ) throws SSLException { - + stopSSL( parent.getSession() ).join(); } // IoFilter impl.