You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ad...@apache.org on 2011/08/21 18:52:59 UTC

svn commit: r1160009 - in /mina/sandbox/adc/ahc: ./ mina3/ mina3/src/main/java/org/apache/mina/core/ mina3/src/main/java/org/apache/mina/core/api/ mina3/src/main/java/org/apache/mina/core/state/ mina3/src/main/java/org/apache/mina/impl/ mina3/src/main/...

Author: adc
Date: Sun Aug 21 16:52:58 2011
New Revision: 1160009

URL: http://svn.apache.org/viewvc?rev=1160009&view=rev
Log:
Some more sketching on annotations and simple example filters

Added:
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFilter.java
      - copied, changed from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFilter.java
      - copied, changed from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoChild.java
      - copied, changed from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoEvent.java
      - copied, changed from r1159893, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoEvent.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoParent.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoProperty.java
      - copied, changed from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoPropertyScope.java
      - copied, changed from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerException.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerInvocationException.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerMissingException.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineFilter.java
      - copied, changed from r1159893, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslFilter.java
      - copied, changed from r1159893, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslListener.java
    mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/
    mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumConfig.java
    mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumFilter.java
    mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountFilter.java
    mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountListener.java
    mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/EchoFilter.java
Removed:
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoEvent.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownMux.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoDownSet.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpMux.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoUpSet.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java
Modified:
    mina/sandbox/adc/ahc/mina3/pom.xml
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/InjectorEjector.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java
    mina/sandbox/adc/ahc/pom.xml

Modified: mina/sandbox/adc/ahc/mina3/pom.xml
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/pom.xml?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/pom.xml (original)
+++ mina/sandbox/adc/ahc/mina3/pom.xml Sun Aug 21 16:52:58 2011
@@ -37,6 +37,12 @@
     <dependencies>
 
         <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.ahc</groupId>
             <artifactId>api</artifactId>
         </dependency>

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFilter.java (from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFilter.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFilter.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java&r1=1159830&r2=1160009&rev=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoChannel.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/AbstractIoFilter.java Sun Aug 21 16:52:58 2011
@@ -18,35 +18,19 @@
  */
 package org.apache.mina.core;
 
-import org.apache.mina.core.api.IoListener;
-import org.apache.mina.impl.EquipmentStack;
-
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public abstract class AbstractIoChannel<U, D> implements IoChannel<U, D>
+public abstract class AbstractIoFilter implements IoFilter
 {
-    private final EquipmentStack stack = new EquipmentStack();
-
-    public IoChannel equipWith(String key, Object value)
-    {
-        stack.equipWith(key, value);
-
-        return this;
-    }
-
-    public IoChannel equipWith(IoListener listener)
+    @Override
+    public void init() throws Exception
     {
-        stack.equipWith(listener);
-
-        return this;
     }
 
-    public IoChannel equipWith(IoConfig config)
+    @Override
+    public void destroy() throws Exception
     {
-        stack.equipWith(config);
-
-        return this;
     }
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/EquipmentStack.java Sun Aug 21 16:52:58 2011
@@ -27,7 +27,12 @@ import org.slf4j.LoggerFactory;
  */
 public class EquipmentStack implements Cloneable
 {
-    public void inject(IoChannelState channelState)
+    public void inject(Object channelState)
+    {
+        //Todo change body of created methods use File | Settings | File Templates.
+    }
+
+    public void collect(Object channelState)
     {
         //Todo change body of created methods use File | Settings | File Templates.
     }

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFilter.java (from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFilter.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFilter.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java&r1=1159830&r2=1160009&rev=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoChannel.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFilter.java Sun Aug 21 16:52:58 2011
@@ -26,15 +26,9 @@ import org.apache.mina.core.api.IoUp;
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public interface IoChannel<U, D> extends IoUp<U>, IoDown<D>
+public interface IoFilter
 {
     void init() throws Exception;
 
     void destroy() throws Exception;
-
-    IoChannel equipWith(String key, Object value);
-
-    IoChannel equipWith(IoListener listener);
-
-    IoChannel equipWith(IoConfig config);
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoSession.java Sun Aug 21 16:52:58 2011
@@ -46,13 +46,13 @@ public abstract class IoSession
 
     public abstract void exceptionCaught(GeneralSecurityException gse);
 
-    public abstract IoChannel getRoot();
+    public abstract IoFilter getRoot();
 
-    public abstract Set<IoChannel> getChannels();
+    public abstract Set<IoFilter> getChannels();
 
-    public abstract IoChannel getChannel(String filterName);
+    public abstract IoFilter getChannel(String filterName);
 
-    public abstract void mark(IoChannel channel, String filterName);
+    public abstract void mark(IoFilter filter, String filterName);
 
     public abstract Object getEquip(Object key);
 

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoChild.java (from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoChild.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoChild.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java&r1=1159830&r2=1160009&rev=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoChild.java Sun Aug 21 16:52:58 2011
@@ -16,19 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-@java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD})
+@java.lang.annotation.Target(java.lang.annotation.ElementType.FIELD)
 @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
 @java.lang.annotation.Documented
-public @interface IoProperty
+public @interface IoChild
 {
-    public String name() default "<bean name>";
-
-    public String type() default "<use signature>";
-
-    public IoPropertyScope scope() default IoPropertyScope.PRIVATE;
 }

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoEvent.java (from r1159893, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoEvent.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoEvent.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoEvent.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoEvent.java&r1=1159893&r2=1160009&rev=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoEvent.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoEvent.java Sun Aug 21 16:52:58 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
@@ -28,5 +28,5 @@ public @interface IoEvent
 {
     public String name() default "<event name>";
 
-    public Class type() default Object.class;
+    public Class[] type() default Object.class;
 }

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoParent.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoParent.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoParent.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoParent.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.core.api;
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+@java.lang.annotation.Target(java.lang.annotation.ElementType.FIELD)
+@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@java.lang.annotation.Documented
+public @interface IoParent
+{
+}

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoProperty.java (from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoProperty.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoProperty.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java&r1=1159830&r2=1160009&rev=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoProperty.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoProperty.java Sun Aug 21 16:52:58 2011
@@ -16,7 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
+
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
@@ -28,7 +29,9 @@ public @interface IoProperty
 {
     public String name() default "<bean name>";
 
-    public String type() default "<use signature>";
+    public Class type() default IoProperty.class;
 
     public IoPropertyScope scope() default IoPropertyScope.PRIVATE;
+
+    public boolean required() default true;
 }

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoPropertyScope.java (from r1159830, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoPropertyScope.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoPropertyScope.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java&r1=1159830&r2=1160009&rev=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoPropertyScope.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/api/IoPropertyScope.java Sun Aug 21 16:52:58 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.mina.core;
+package org.apache.mina.core.api;
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerException.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerException.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerException.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerException.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,44 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.core.state;
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class HandlerException extends Exception
+{
+    public HandlerException()
+    {
+    }
+
+    public HandlerException(String message)
+    {
+        super(message);
+    }
+
+    public HandlerException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+
+    public HandlerException(Throwable cause)
+    {
+        super(cause);
+    }
+}

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerInvocationException.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerInvocationException.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerInvocationException.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerInvocationException.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.core.state;
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class HandlerInvocationException extends HandlerException
+{
+    public HandlerInvocationException(Throwable cause)
+    {
+        super(cause);
+    }
+}

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerMissingException.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerMissingException.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerMissingException.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/HandlerMissingException.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,44 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.core.state;
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class HandlerMissingException extends HandlerException
+{
+    public HandlerMissingException()
+    {
+    }
+
+    public HandlerMissingException(String message)
+    {
+        super(message);
+    }
+
+    public HandlerMissingException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+
+    public HandlerMissingException(Throwable cause)
+    {
+        super(cause);
+    }
+}

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineFilter.java (from r1159893, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineFilter.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineFilter.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java&r1=1159893&r2=1160009&rev=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineChannel.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/state/StateMachineFilter.java Sun Aug 21 16:52:58 2011
@@ -18,6 +18,8 @@
  */
 package org.apache.mina.core.state;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -27,21 +29,20 @@ import java.util.Queue;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.mina.core.AbstractIoChannel;
+import org.apache.mina.core.AbstractIoFilter;
 import org.apache.mina.core.EquipmentStack;
 import org.apache.mina.core.IoChannelState;
-import org.apache.mina.core.IoProperty;
-import org.apache.mina.core.IoPropertyScope;
-import org.apache.mina.core.api.IoDown;
-import org.apache.mina.core.api.IoUp;
+import org.apache.mina.core.api.IoEvent;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
 
 
 /**
  * @author The Apache MINA Project (dev@mina.apache.org)
  */
-public abstract class StateMachineChannel<U, D, S extends Enum, E extends Event> extends AbstractIoChannel<U, D> implements IoDown<D>, IoUp<U>
+public abstract class StateMachineFilter<U, D, S extends Enum, E extends Event> extends AbstractIoFilter
 {
-    private final static Logger LOG = LoggerFactory.getLogger(StateMachineChannel.class);
+    private final static Logger LOG = LoggerFactory.getLogger(StateMachineFilter.class);
     private final Map<S, IoChannelState<U, D, S, E>> states = new HashMap<S, IoChannelState<U, D, S, E>>();
     private final Queue<E> events = new LinkedList<E>();
     private EquipmentStack equipmentStack;
@@ -94,9 +95,10 @@ public abstract class StateMachineChanne
         assert message != null;
 
         IoChannelState<U, D, S, E> channelState = states.get(state);
-        equipmentStack.inject(channelState);
 
+        equipmentStack.inject(channelState);
         channelState.send(new StateMachineContext(), message);
+        equipmentStack.collect(channelState);
     }
 
     public final void receive(U message) throws Exception
@@ -104,19 +106,21 @@ public abstract class StateMachineChanne
         assert message != null;
 
         IoChannelState<U, D, S, E> channelState = states.get(state);
-        equipmentStack.inject(channelState);
 
+        equipmentStack.inject(channelState);
         channelState.receive(new StateMachineContext(), message);
+        equipmentStack.collect(channelState);
     }
 
-    public final void fire(E event) throws Exception
+    public final void fire(E event) throws HandlerException
     {
         assert event != null;
 
         IoChannelState<U, D, S, E> channelState = states.get(state);
-        equipmentStack.inject(channelState);
 
-//        channelState.handle(new StateMachineContext(), event);  TODO
+        equipmentStack.inject(channelState);
+        fireEvent(channelState, new StateMachineContext(), event);
+        equipmentStack.collect(channelState);
     }
 
     protected final void queue(E event)
@@ -125,16 +129,51 @@ public abstract class StateMachineChanne
         events.offer(event);
     }
 
+    private void fireEvent(IoChannelState<U, D, S, E> state, StateMachineContext context, E event) throws HandlerException
+    {
+        assert state != null;
+        assert context != null;
+        assert event != null;
+
+        for (Method method : state.getClass().getMethods())
+        {
+            if (method.isAnnotationPresent(IoEvent.class))
+            {
+                IoEvent action = method.getAnnotation(IoEvent.class);
+                for (Class eventType : action.type())
+                {
+                    if (event.getClass().equals(eventType))
+                    {
+                        try
+                        {
+                            method.invoke(state, context, event);
+                            return;
+                        }
+                        catch (IllegalAccessException iae)
+                        {
+                            throw new HandlerInvocationException(iae);
+                        }
+                        catch (InvocationTargetException ite)
+                        {
+                            throw new HandlerInvocationException(ite);
+                        }
+                    }
+                }
+            }
+        }
+        throw new HandlerMissingException();
+    }
+
     private class StateMachineContext implements Context<S>
     {
         public S getState()
         {
-            return StateMachineChannel.this.getState();
+            return StateMachineFilter.this.getState();
         }
 
         public void setState(S state)
         {
-            StateMachineChannel.this.setState(state);
+            StateMachineFilter.this.setState(state);
         }
     }
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/EquipmentStack.java Sun Aug 21 16:52:58 2011
@@ -29,7 +29,7 @@ import java.util.Stack;
 
 import org.apache.mina.core.IoConfig;
 import org.apache.mina.core.api.IoListener;
-import org.apache.mina.core.IoPropertyScope;
+import org.apache.mina.core.api.IoPropertyScope;
 
 
 /**

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/InjectorEjector.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/InjectorEjector.java?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/InjectorEjector.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/impl/InjectorEjector.java Sun Aug 21 16:52:58 2011
@@ -29,8 +29,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.WeakHashMap;
 
-import org.apache.mina.core.IoProperty;
-import org.apache.mina.core.IoPropertyScope;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
 
 
 /**

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/DownState.java Sun Aug 21 16:52:58 2011
@@ -24,9 +24,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.mina.core.BaseChannelState;
-import org.apache.mina.core.IoProperty;
-import org.apache.mina.core.IoPropertyScope;
 import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
 import org.apache.mina.core.state.Context;
 
 
@@ -36,33 +36,10 @@ import org.apache.mina.core.state.Contex
 public class DownState extends BaseChannelState<Token, Token, State, TimeoutEvent>
 {
     static final Logger LOG = LoggerFactory.getLogger(DownState.class);
-    private Set<LinkListener> listeners;
-    private int numTokens;
-    private IoDown<Token> child;
+    @IoProperty(scope = IoPropertyScope.SESSION) protected Set<LinkListener> listeners;
+    @IoProperty protected int numTokens;
+    @IoProperty protected IoDown<Token> child;
 
-    @IoProperty(name = "listeners", type = "org.apache.mina.link.LinkListener", scope = IoPropertyScope.SESSION)
-    public void setListeners(Set<LinkListener> listeners)
-    {
-        this.listeners = listeners;
-    }
-
-    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
-    public int getNumTokens()
-    {
-        return numTokens;
-    }
-
-    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
-    public void setNumTokens(int numTokens)
-    {
-        this.numTokens = numTokens;
-    }
-
-    @IoProperty(name = "child", scope = IoPropertyScope.PRIVATE)
-    public void setChild(IoDown<Token> child)
-    {
-        this.child = child;
-    }
 
     @Override
     public void send(Context<State> stateContext, Token message) throws Exception

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/Link.java Sun Aug 21 16:52:58 2011
@@ -20,13 +20,14 @@ package org.apache.mina.link;
 
 import java.util.Set;
 
-import org.apache.mina.core.api.IoDown;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.mina.core.IoProperty;
-import org.apache.mina.core.IoPropertyScope;
-import org.apache.mina.core.state.StateMachineChannel;
+import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
+import org.apache.mina.core.api.IoUp;
+import org.apache.mina.core.state.StateMachineFilter;
 
 
 /**
@@ -38,12 +39,12 @@ import org.apache.mina.core.state.StateM
  *
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public class Link extends StateMachineChannel<Token, Token, State, TimeoutEvent>
+public class Link extends StateMachineFilter<Token, Token, State, TimeoutEvent> implements IoUp<Token>
 {
     static final Logger LOG = LoggerFactory.getLogger(Link.class);
-    private IoDown<Token> child;
-    private int numTokens;
-    private Set<LinkListener> listeners;
+    @IoProperty protected IoDown<Token> child;
+    @IoProperty protected int numTokens;
+    @IoProperty(scope = IoPropertyScope.SESSION) protected Set<LinkListener> listeners;
 
     public Link()
     {
@@ -51,36 +52,16 @@ public class Link extends StateMachineCh
         register(State.UP, new DownState());
     }
 
-    @IoProperty(name = "child", scope = IoPropertyScope.PRIVATE)
     public IoDown<Token> getChild()
     {
         return child;
     }
 
-    @IoProperty(name = "child", scope = IoPropertyScope.PRIVATE)
     public void setChild(IoDown<Token> child)
     {
         this.child = child;
     }
 
-    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
-    public int getNumTokens()
-    {
-        return numTokens;
-    }
-
-    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
-    public void setNumTokens(int numTokens)
-    {
-        this.numTokens = numTokens;
-    }
-
-    @IoProperty(name = "listeners", type = "org.apache.mina.link.LinkListener", scope = IoPropertyScope.SESSION)
-    public void setListeners(Set<LinkListener> listeners)
-    {
-        this.listeners = listeners;
-    }
-
     /**
      * {@inheritDoc}
      */

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/link/UpState.java Sun Aug 21 16:52:58 2011
@@ -24,10 +24,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.mina.core.BaseChannelState;
-import org.apache.mina.core.IoEvent;
-import org.apache.mina.core.IoProperty;
-import org.apache.mina.core.IoPropertyScope;
 import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoEvent;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
 import org.apache.mina.core.state.Context;
 
 
@@ -37,33 +37,9 @@ import org.apache.mina.core.state.Contex
 public class UpState extends BaseChannelState<Token, Token, State, TimeoutEvent>
 {
     static final Logger LOG = LoggerFactory.getLogger(UpState.class);
-    private Set<LinkListener> listeners;
-    private int numTokens;
-    private IoDown<Token> child;
-
-    @IoProperty(name = "listeners", type = "org.apache.mina.link.LinkListener", scope = IoPropertyScope.SESSION)
-    public void setListeners(Set<LinkListener> listeners)
-    {
-        this.listeners = listeners;
-    }
-
-    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
-    public int getNumTokens()
-    {
-        return numTokens;
-    }
-
-    @IoProperty(name = "numTokens", scope = IoPropertyScope.PRIVATE)
-    public void setNumTokens(int numTokens)
-    {
-        this.numTokens = numTokens;
-    }
-
-    @IoProperty(name = "child", scope = IoPropertyScope.PRIVATE)
-    public void setChild(IoDown<Token> child)
-    {
-        this.child = child;
-    }
+    @IoProperty(scope = IoPropertyScope.SESSION) protected Set<LinkListener> listeners;
+    @IoProperty protected int numTokens;
+    @IoProperty protected IoDown<Token> child;
 
     @Override
     public void send(Context<State> stateContext, Token message) throws Exception

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/FinishedChannelState.java Sun Aug 21 16:52:58 2011
@@ -25,9 +25,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.mina.core.BaseChannelState;
-import org.apache.mina.core.IoBuffer;
-import org.apache.mina.core.IoProperty;
-import org.apache.mina.core.IoPropertyScope;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
 import org.apache.mina.core.state.Context;
 import org.apache.mina.nio.IoByteBuffer;
 

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/HandshakeChannelState.java Sun Aug 21 16:52:58 2011
@@ -19,16 +19,17 @@
 package org.apache.mina.ssl;
 
 import javax.net.ssl.SSLEngineResult;
+import java.util.Set;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.mina.core.BaseChannelState;
 import org.apache.mina.core.IoBufferFactory;
-import org.apache.mina.core.IoEvent;
-import org.apache.mina.core.IoProperty;
-import org.apache.mina.core.IoPropertyScope;
 import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoEvent;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
 import org.apache.mina.core.api.IoUp;
 import org.apache.mina.core.state.Context;
 import org.apache.mina.nio.IoByteBuffer;
@@ -40,40 +41,24 @@ import org.apache.mina.nio.IoByteBuffer;
 public class HandshakeChannelState extends BaseChannelState<IoByteBuffer, IoByteBuffer, SslStates, SslEvent>
 {
     private final static Logger LOGGER = LoggerFactory.getLogger(HandshakeChannelState.class);
-    private IoBufferFactory<IoByteBuffer> factory;
-    private SSLEngine engine;
-    private IoDown<IoByteBuffer> child;
-    private IoUp<IoByteBuffer> parent;
-
-    @IoProperty(name = "factory", scope = IoPropertyScope.GLOBAL)
-    public void setFactory(IoBufferFactory<IoByteBuffer> factory)
-    {
-        this.factory = factory;
-    }
-
-    @IoProperty(name = "engine", scope = IoPropertyScope.SESSION)
-    public void setEngine(SSLEngine engine)
-    {
-        this.engine = engine;
-    }
-
-    @IoProperty(name = "child", scope = IoPropertyScope.PRIVATE)
-    public void setChild(IoDown<IoByteBuffer> child)
-    {
-        this.child = child;
-    }
-
-    @IoProperty(name = "parent", scope = IoPropertyScope.PRIVATE)
-    public void setParent(IoUp<IoByteBuffer> parent)
-    {
-        this.parent = parent;
-    }
+    @IoProperty(scope = IoPropertyScope.GLOBAL) private IoBufferFactory<IoByteBuffer> factory;
+    @IoProperty private SSLEngine engine;
+    @IoProperty(scope = IoPropertyScope.SESSION) private Set<SslListener> listeners;
+    @IoProperty private boolean handshakeStarted;
+    @IoProperty private IoDown<IoByteBuffer> child;
+    @IoProperty private IoUp<IoByteBuffer> parent;
 
     @Override
     public void send(Context<SslStates> context, IoByteBuffer message) throws Exception
     {
         IoByteBuffer ioByteBuffer = (IoByteBuffer)message;
 
+        if (!handshakeStarted)
+        {
+            for (SslListener listener : listeners) listener.handshakeStarted();
+            handshakeStarted = false;
+        }
+
         IoByteBuffer byteBuffer = factory.allocate(engine.getSession().getPacketBufferSize()).get();
         SSLEngineResult result = engine.wrap(ioByteBuffer, byteBuffer);
         if (result.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NEED_TASK)
@@ -102,6 +87,13 @@ public class HandshakeChannelState exten
     public void receive(Context<SslStates> context, IoByteBuffer message) throws Exception
     {
         IoByteBuffer byteBuffer = factory.allocate(engine.getSession().getPacketBufferSize()).get();
+
+        if (!handshakeStarted)
+        {
+            for (SslListener listener : listeners) listener.handshakeStarted();
+            handshakeStarted = false;
+        }
+
         SSLEngineResult result = engine.unwrap(message, byteBuffer);
         if (result.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NEED_TASK)
         {
@@ -128,6 +120,8 @@ public class HandshakeChannelState exten
         else if (result.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.FINISHED)
         {
             context.setState(SslStates.FINISHED);
+
+            for (SslListener listener : listeners) listener.handshakeCompleted();
         }
 
         parent.receive(byteBuffer);

Copied: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslFilter.java (from r1159893, mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java)
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslFilter.java?p2=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslFilter.java&p1=mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java&r1=1159893&r2=1160009&rev=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslFilter.java Sun Aug 21 16:52:58 2011
@@ -18,26 +18,26 @@
  */
 package org.apache.mina.ssl;
 
-import org.apache.mina.core.IoProperty;
-import org.apache.mina.core.IoPropertyScope;
 import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
 import org.apache.mina.core.api.IoUp;
-import org.apache.mina.core.state.StateMachineChannel;
-import org.apache.mina.link.Token;
+import org.apache.mina.core.state.StateMachineFilter;
 import org.apache.mina.nio.IoByteBuffer;
 
 
 /**
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
-public class SslChannel extends StateMachineChannel<IoByteBuffer, IoByteBuffer, SslStates, SslEvent>
+public class SslFilter extends StateMachineFilter<IoByteBuffer, IoByteBuffer, SslStates, SslEvent> implements IoUp<IoByteBuffer>, IoDown<IoByteBuffer>
 {
-    private SslConfig sslConfig;
-    private SSLEngine engine;
-    private IoDown<IoByteBuffer> child;
-    private IoUp<IoByteBuffer> parent;
+    @IoProperty(scope = IoPropertyScope.GLOBAL) private SslConfig sslConfig;
+    @IoProperty private SSLEngine engine;
+    @IoProperty private boolean handshakeStarted;
+    @IoProperty private IoDown<IoByteBuffer> child;
+    @IoProperty private IoUp<IoByteBuffer> parent;
 
-    public SslChannel()
+    public SslFilter()
     {
         register(SslStates.HANDSHAKE, new HandshakeChannelState());
         register(SslStates.FINISHED, new FinishedChannelState());
@@ -45,48 +45,6 @@ public class SslChannel extends StateMac
         register(SslStates.CLOSED, new ClosedChannelState());
     }
 
-    @IoProperty(name = "child", scope = IoPropertyScope.PRIVATE)
-    public IoDown<IoByteBuffer> getChild()
-    {
-        return child;
-    }
-
-    @IoProperty(name = "child", scope = IoPropertyScope.PRIVATE)
-    public void setChild(IoDown<IoByteBuffer> child)
-    {
-        this.child = child;
-    }
-
-    @IoProperty(name = "parent", scope = IoPropertyScope.PRIVATE)
-    public IoUp<IoByteBuffer> getParent()
-    {
-        return parent;
-    }
-
-    @IoProperty(name = "parent", scope = IoPropertyScope.PRIVATE)
-    public void setParent(IoUp<IoByteBuffer> parent)
-    {
-        this.parent = parent;
-    }
-
-    @IoProperty(name = "sslConfig", scope = IoPropertyScope.GLOBAL)
-    public void setSslConfig(SslConfig sslConfig)
-    {
-        this.sslConfig = sslConfig;
-    }
-
-    @IoProperty(name = "engine", scope = IoPropertyScope.SESSION)
-    public SSLEngine getEngine()
-    {
-        return engine;
-    }
-
-    @IoProperty(name = "engine", scope = IoPropertyScope.SESSION)
-    public void setEngine(SSLEngine engine)
-    {
-        this.engine = engine;
-    }
-
     @Override
     public void init() throws Exception
     {
@@ -100,6 +58,8 @@ public class SslChannel extends StateMac
 
         engine.beginHandshake();
 
+        handshakeStarted = false;
+
         setState(SslStates.HANDSHAKE);
 
         if (!sslConfig.isLazyHandshake())

Added: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslListener.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslListener.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslListener.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslListener.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,39 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ssl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public interface SslListener
+{
+    void handshakeStarted();
+
+    void handshakeCompleted();
+
+    void firstByteSent();
+
+    void closingStarted();
+
+    void closingCompleted();
+}

Added: mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumConfig.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumConfig.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumConfig.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumConfig.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 com.acme.chain;
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class ChecksumConfig
+{
+    private String algorithm;
+    private String charsetName = "UTF8";
+
+    public String getAlgorithm()
+    {
+        return algorithm;
+    }
+
+    public void setAlgorithm(String algorithm)
+    {
+        this.algorithm = algorithm;
+    }
+
+    public String getCharsetName()
+    {
+        return charsetName;
+    }
+
+    public void setCharsetName(String charsetName)
+    {
+        this.charsetName = charsetName;
+    }
+}

Added: mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumFilter.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumFilter.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumFilter.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/ChecksumFilter.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,102 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 com.acme.chain;
+
+import java.security.MessageDigest;
+import java.util.Arrays;
+
+import org.apache.commons.codec.binary.Hex;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.mina.core.AbstractIoFilter;
+import org.apache.mina.core.api.IoChild;
+import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoParent;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
+import org.apache.mina.core.api.IoUp;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class ChecksumFilter extends AbstractIoFilter implements IoUp<String>, IoDown<String>
+{
+    static final Logger LOG = LoggerFactory.getLogger(ChecksumFilter.class);
+    @IoProperty(scope = IoPropertyScope.GLOBAL) protected ChecksumConfig config;
+    @IoParent protected IoUp<String> parent;
+    @IoChild protected IoDown<String> child;
+    @IoProperty protected MessageDigest md;
+
+
+    public IoUp<String> getParent()
+    {
+        return parent;
+    }
+
+    public void setParent(IoUp<String> parent)
+    {
+        this.parent = parent;
+    }
+
+    public IoDown<String> getChild()
+    {
+        return child;
+    }
+
+    public void setChild(IoDown<String> child)
+    {
+        this.child = child;
+    }
+
+    @Override
+    public void init() throws Exception
+    {
+        md = MessageDigest.getInstance(config.getAlgorithm());
+    }
+
+    @Override
+    public void send(String message) throws Exception
+    {
+        md.reset();
+        byte[] digest = md.digest(message.getBytes(config.getCharsetName()));
+
+        StringBuilder builder = new StringBuilder();
+        builder.append(String.valueOf(Hex.encodeHex(digest)));
+        builder.append(":");
+        builder.append(message);
+
+        child.send(builder.toString());
+    }
+
+    @Override
+    public void receive(String message) throws Exception
+    {
+        int i = message.indexOf(":");
+        String checksum = message.substring(0, i);
+        String msg = message.substring(i + 1);
+
+        byte[] sentDigest = Hex.decodeHex(checksum.toCharArray());
+        byte[] msgDigest = md.digest(msg.getBytes(config.getCharsetName()));
+        if (!Arrays.equals(sentDigest, msgDigest)) throw new Exception("Checksums do not match");
+
+        parent.receive(msg);
+    }
+}

Added: mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountFilter.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountFilter.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountFilter.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountFilter.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,111 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 com.acme.chain;
+
+import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.mina.core.IoFilter;
+import org.apache.mina.core.api.IoChild;
+import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoParent;
+import org.apache.mina.core.api.IoProperty;
+import org.apache.mina.core.api.IoPropertyScope;
+import org.apache.mina.core.api.IoUp;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class CountFilter implements IoFilter, IoUp<String>, IoDown<String>
+{
+    static final Logger LOG = LoggerFactory.getLogger(CountFilter.class);
+    @IoParent protected IoUp<String> parent;
+    @IoChild protected IoDown<String> child;
+    @IoProperty(scope = IoPropertyScope.SESSION) protected ScheduledExecutorService pool;
+    @IoProperty protected ScheduledFuture<Void> handle;
+    @IoProperty protected int count;
+
+    public IoUp<String> getParent()
+    {
+        return parent;
+    }
+
+    public void setParent(IoUp<String> parent)
+    {
+        this.parent = parent;
+    }
+
+    public IoDown<String> getChild()
+    {
+        return child;
+    }
+
+    public void setChild(IoDown<String> child)
+    {
+        this.child = child;
+    }
+
+    @Override
+    @SuppressWarnings({"unchecked"})
+    public void init() throws Exception
+    {
+        LOG.trace("Initializing");
+
+        count = 0;
+        handle = (ScheduledFuture<Void>)pool.scheduleWithFixedDelay(new Runnable()
+        {
+            @IoProperty(scope = IoPropertyScope.SESSION) Set<CountListener> listeners;
+            @IoProperty int count;
+
+            @Override
+            public void run()
+            {
+                for (CountListener listener : listeners) listener.current(count);
+            }
+        }, 5, 5, TimeUnit.SECONDS);
+    }
+
+    @Override
+    public void destroy() throws Exception
+    {
+        LOG.trace("Destroying");
+
+        handle.cancel(false);
+    }
+
+    @Override
+    public void send(String message) throws Exception
+    {
+        count++;
+        child.send(message);
+    }
+
+    @Override
+    public void receive(String message) throws Exception
+    {
+        count++;
+        parent.receive(message);
+    }
+}

Added: mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountListener.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountListener.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountListener.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/CountListener.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 com.acme.chain;
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public interface CountListener
+{
+    void current(int count);
+}

Added: mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/EchoFilter.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/EchoFilter.java?rev=1160009&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/EchoFilter.java (added)
+++ mina/sandbox/adc/ahc/mina3/src/test/java/com/acme/chain/EchoFilter.java Sun Aug 21 16:52:58 2011
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 com.acme.chain;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.mina.core.AbstractIoFilter;
+import org.apache.mina.core.api.IoChild;
+import org.apache.mina.core.api.IoDown;
+import org.apache.mina.core.api.IoParent;
+import org.apache.mina.core.api.IoUp;
+
+
+/**
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class EchoFilter extends AbstractIoFilter implements IoUp<String>, IoDown<String>
+{
+    static final Logger LOG = LoggerFactory.getLogger(EchoFilter.class);
+    @IoParent protected IoUp<String> parent;
+    @IoChild protected IoDown<String> child;
+
+    public IoUp<String> getParent()
+    {
+        return parent;
+    }
+
+    public void setParent(IoUp<String> parent)
+    {
+        this.parent = parent;
+    }
+
+    public IoDown<String> getChild()
+    {
+        return child;
+    }
+
+    public void setChild(IoDown<String> child)
+    {
+        this.child = child;
+    }
+
+    @Override
+    public void send(String message) throws Exception
+    {
+        child.send(message);
+    }
+
+    @Override
+    public void receive(String message) throws Exception
+    {
+        child.send(message);
+    }
+}

Modified: mina/sandbox/adc/ahc/pom.xml
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/pom.xml?rev=1160009&r1=1160008&r2=1160009&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/pom.xml (original)
+++ mina/sandbox/adc/ahc/pom.xml Sun Aug 21 16:52:58 2011
@@ -86,6 +86,12 @@
         <dependencies>
 
             <dependency>
+                <groupId>commons-codec</groupId>
+                <artifactId>commons-codec</artifactId>
+                <version>20041127.091804</version>
+            </dependency>
+
+            <dependency>
                 <groupId>org.apache.ahc</groupId>
                 <artifactId>api</artifactId>
                 <version>${project.version}</version>