You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/11/29 06:11:29 UTC

svn commit: r349650 - in /directory/network/trunk/src: examples/org/apache/mina/examples/sumup/ examples/org/apache/mina/examples/sumup/codec/ examples/org/apache/mina/examples/sumup/message/ java/org/apache/mina/filter/codec/ java/org/apache/mina/filt...

Author: trustin
Date: Mon Nov 28 21:11:07 2005
New Revision: 349650

URL: http://svn.apache.org/viewcvs?rev=349650&view=rev
Log:
Resolved issue: DIRMINA-51 Object serialization filter
* This filter is required to perform a demonstration in ApacheCon, so I implemented it quickly.
* Added ObjectSerializationCodecFactory
* Added ObjectSerializationEncoder
* Added ObjectSerializationDecoder
* Modified SumUp example to support both custom codec and object serialization codec

Added:
    directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/
    directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/DemuxingProtocolCodecFactory.java
      - copied, changed from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoder.java
      - copied, changed from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderFactory.java
      - copied, changed from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderFactory.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderResult.java
      - copied, changed from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderResult.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoder.java
      - copied, changed from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoderFactory.java
      - copied, changed from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoderFactory.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/
    directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationCodecFactory.java   (with props)
    directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationDecoder.java   (with props)
    directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationEncoder.java   (with props)
Removed:
    directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderFactory.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderResult.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java
    directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoderFactory.java
Modified:
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ClientSessionHandler.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ServerSessionHandler.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageDecoder.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageEncoder.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageDecoder.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageEncoder.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageDecoder.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageEncoder.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/SumUpProtocolCodecFactory.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AbstractMessage.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AddMessage.java
    directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/ResultMessage.java

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Client.java Mon Nov 28 21:11:07 2005
@@ -38,6 +38,8 @@
     private static final String HOSTNAME = "localhost";
     private static final int PORT = 8080;
     private static final int CONNECT_TIMEOUT = 30; // seconds
+    // Set this to false to use object serialization instead of custom codec.
+    private static final boolean USE_CUSTOM_CODEC = true;
 
     public static void main( String[] args ) throws Throwable
     {
@@ -75,7 +77,7 @@
             {
                 ConnectFuture future = connector.connect(
                         new InetSocketAddress( HOSTNAME, PORT ),
-                        new ClientSessionHandler( values ) );
+                        new ClientSessionHandler( USE_CUSTOM_CODEC, values ) );
                 
                 future.join();
                 session = future.getSession();

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ClientSessionHandler.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ClientSessionHandler.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ClientSessionHandler.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ClientSessionHandler.java Mon Nov 28 21:11:07 2005
@@ -25,7 +25,9 @@
 import org.apache.mina.examples.sumup.message.AddMessage;
 import org.apache.mina.examples.sumup.message.ResultMessage;
 import org.apache.mina.filter.LoggingFilter;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
 import org.apache.mina.util.SessionLog;
 
 /**
@@ -36,11 +38,13 @@
  */
 public class ClientSessionHandler extends IoHandlerAdapter
 {
+    private final boolean useCustomCodec;
     private final int[] values;
     private boolean finished;
 
-    public ClientSessionHandler( int[] values )
+    public ClientSessionHandler( boolean useCustomCodec, int[] values )
     {
+        this.useCustomCodec = useCustomCodec;
         this.values = values;
     }
 
@@ -51,9 +55,18 @@
 
     public void sessionCreated( IoSession session ) throws Exception
     {
-        session.getFilterChain().addFirst(
-                "protocolFilter", new ProtocolCodecFilter(
-                        new SumUpProtocolCodecFactory( false ) ) );
+        ProtocolCodecFactory codec;
+        if( useCustomCodec )
+        {
+            codec = new SumUpProtocolCodecFactory( true );
+        }
+        else
+        {
+            codec = new ObjectSerializationCodecFactory();
+        }
+
+        session.getFilterChain().addLast(
+                "protocolFilter", new ProtocolCodecFilter( codec ) );
         session.getFilterChain().addLast(
                 "logger", new LoggingFilter() );
     }

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/Server.java Mon Nov 28 21:11:07 2005
@@ -32,6 +32,8 @@
 public class Server
 {
     private static final int SERVER_PORT = 8080;
+    // Set this to false to use object serialization instead of custom codec.
+    private static final boolean USE_CUSTOM_CODEC = true;
 
     public static void main( String[] args ) throws Throwable
     {
@@ -40,7 +42,7 @@
 
         registry.bind(
                 new Service( "sumUp", TransportType.SOCKET, SERVER_PORT ),
-                new ServerSessionHandler() );
+                new ServerSessionHandler( USE_CUSTOM_CODEC ) );
 
         System.out.println( "Listening on port " + SERVER_PORT );
     }

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ServerSessionHandler.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ServerSessionHandler.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ServerSessionHandler.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/ServerSessionHandler.java Mon Nov 28 21:11:07 2005
@@ -25,7 +25,9 @@
 import org.apache.mina.examples.sumup.message.AddMessage;
 import org.apache.mina.examples.sumup.message.ResultMessage;
 import org.apache.mina.filter.LoggingFilter;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
 import org.apache.mina.util.SessionLog;
 
 /**
@@ -36,16 +38,27 @@
  */
 public class ServerSessionHandler implements IoHandler
 {
+    private final boolean useCustomCodec;
 
-    public ServerSessionHandler()
+    public ServerSessionHandler( boolean useCustomCodec )
     {
+        this.useCustomCodec = useCustomCodec;
     }
 
     public void sessionCreated( IoSession session ) throws Exception
     {
+        ProtocolCodecFactory codec;
+        if( useCustomCodec )
+        {
+            codec = new SumUpProtocolCodecFactory( true );
+        }
+        else
+        {
+            codec = new ObjectSerializationCodecFactory();
+        }
+
         session.getFilterChain().addFirst(
-                "protocolFilter", new ProtocolCodecFilter(
-                        new SumUpProtocolCodecFactory( true ) ) );
+                "protocolFilter", new ProtocolCodecFilter( codec ) );
         session.getFilterChain().addLast(
                 "logger", new LoggingFilter() );
     }

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageDecoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageDecoder.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageDecoder.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageDecoder.java Mon Nov 28 21:11:07 2005
@@ -21,9 +21,9 @@
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.examples.sumup.message.AbstractMessage;
-import org.apache.mina.filter.codec.MessageDecoder;
-import org.apache.mina.filter.codec.MessageDecoderResult;
 import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+import org.apache.mina.filter.codec.demux.MessageDecoder;
+import org.apache.mina.filter.codec.demux.MessageDecoderResult;
 
 /**
  * A {@link MessageDecoder} that decodes message header and forwards

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageEncoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageEncoder.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageEncoder.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AbstractMessageEncoder.java Mon Nov 28 21:11:07 2005
@@ -21,8 +21,8 @@
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.examples.sumup.message.AbstractMessage;
-import org.apache.mina.filter.codec.MessageEncoder;
 import org.apache.mina.filter.codec.ProtocolEncoderOutput;
+import org.apache.mina.filter.codec.demux.MessageEncoder;
 
 /**
  * A {@link MessageEncoder} that encodes message header and forwards

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageDecoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageDecoder.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageDecoder.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageDecoder.java Mon Nov 28 21:11:07 2005
@@ -22,7 +22,7 @@
 import org.apache.mina.common.IoSession;
 import org.apache.mina.examples.sumup.message.AbstractMessage;
 import org.apache.mina.examples.sumup.message.AddMessage;
-import org.apache.mina.filter.codec.MessageDecoder;
+import org.apache.mina.filter.codec.demux.MessageDecoder;
 
 /**
  * A {@link MessageDecoder} that decodes {@link AddMessage}.

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageEncoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageEncoder.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageEncoder.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/AddMessageEncoder.java Mon Nov 28 21:11:07 2005
@@ -26,7 +26,7 @@
 import org.apache.mina.common.IoSession;
 import org.apache.mina.examples.sumup.message.AbstractMessage;
 import org.apache.mina.examples.sumup.message.AddMessage;
-import org.apache.mina.filter.codec.MessageEncoder;
+import org.apache.mina.filter.codec.demux.MessageEncoder;
 
 /**
  * A {@link MessageEncoder} that encodes {@link AddMessage}.

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageDecoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageDecoder.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageDecoder.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageDecoder.java Mon Nov 28 21:11:07 2005
@@ -22,7 +22,7 @@
 import org.apache.mina.common.IoSession;
 import org.apache.mina.examples.sumup.message.AbstractMessage;
 import org.apache.mina.examples.sumup.message.ResultMessage;
-import org.apache.mina.filter.codec.MessageDecoder;
+import org.apache.mina.filter.codec.demux.MessageDecoder;
 
 /**
  * A {@link MessageDecoder} that decodes {@link ResultMessage}.

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageEncoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageEncoder.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageEncoder.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/ResultMessageEncoder.java Mon Nov 28 21:11:07 2005
@@ -26,7 +26,7 @@
 import org.apache.mina.common.IoSession;
 import org.apache.mina.examples.sumup.message.AbstractMessage;
 import org.apache.mina.examples.sumup.message.ResultMessage;
-import org.apache.mina.filter.codec.MessageEncoder;
+import org.apache.mina.filter.codec.demux.MessageEncoder;
 
 /**
  * A {@link MessageEncoder} that encodes {@link ResultMessage}.

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/SumUpProtocolCodecFactory.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/SumUpProtocolCodecFactory.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/SumUpProtocolCodecFactory.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/codec/SumUpProtocolCodecFactory.java Mon Nov 28 21:11:07 2005
@@ -18,8 +18,8 @@
  */
 package org.apache.mina.examples.sumup.codec;
 
-import org.apache.mina.filter.codec.DemuxingProtocolCodecFactory;
 import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.demux.DemuxingProtocolCodecFactory;
 
 /**
  * A {@link ProtocolCodecFactory} that provides a protocol codec for

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AbstractMessage.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AbstractMessage.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AbstractMessage.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AbstractMessage.java Mon Nov 28 21:11:07 2005
@@ -18,13 +18,15 @@
  */
 package org.apache.mina.examples.sumup.message;
 
+import java.io.Serializable;
+
 /**
  * A base message for SumUp protocol messages.
  * 
  * @author The Apache Directory Project
  * @version $Rev$, $Date$
  */
-public abstract class AbstractMessage
+public abstract class AbstractMessage implements Serializable
 {
     private int sequence;
 

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AddMessage.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AddMessage.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AddMessage.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/AddMessage.java Mon Nov 28 21:11:07 2005
@@ -26,6 +26,8 @@
  */
 public class AddMessage extends AbstractMessage
 {
+    private static final long serialVersionUID = -940833727168119141L;
+
     private int value;
 
     public AddMessage()

Modified: directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/ResultMessage.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/ResultMessage.java?rev=349650&r1=349649&r2=349650&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/ResultMessage.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/sumup/message/ResultMessage.java Mon Nov 28 21:11:07 2005
@@ -26,6 +26,8 @@
  */
 public class ResultMessage extends AbstractMessage
 {
+    private static final long serialVersionUID = 7371210248110219946L;
+
     private boolean ok;
     private int value;
 

Copied: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/DemuxingProtocolCodecFactory.java (from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java)
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/DemuxingProtocolCodecFactory.java?p2=directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/DemuxingProtocolCodecFactory.java&p1=directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java&r1=349561&r2=349650&rev=349650&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/DemuxingProtocolCodecFactory.java Mon Nov 28 21:11:07 2005
@@ -16,7 +16,7 @@
  *   limitations under the License.
  *
  */
-package org.apache.mina.filter.codec;
+package org.apache.mina.filter.codec.demux;
 
 import java.util.IdentityHashMap;
 import java.util.Iterator;
@@ -25,6 +25,14 @@
 
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolDecoderException;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.ProtocolEncoderException;
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
 import org.apache.mina.util.IdentityHashSet;
 
 /**

Copied: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoder.java (from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java)
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoder.java?p2=directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoder.java&p1=directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java&r1=349561&r2=349650&rev=349650&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoder.java Mon Nov 28 21:11:07 2005
@@ -16,10 +16,11 @@
  *   limitations under the License.
  *
  */
-package org.apache.mina.filter.codec;
+package org.apache.mina.filter.codec.demux;
 
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
 
 /**
  * Decodes specific messages.

Copied: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderFactory.java (from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderFactory.java)
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderFactory.java?p2=directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderFactory.java&p1=directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderFactory.java&r1=349561&r2=349650&rev=349650&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderFactory.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderFactory.java Mon Nov 28 21:11:07 2005
@@ -16,7 +16,7 @@
  *   limitations under the License.
  *
  */
-package org.apache.mina.filter.codec;
+package org.apache.mina.filter.codec.demux;
 
 /**
  * A factory that creates a new instance of {@link MessageDecoder}.

Copied: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderResult.java (from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderResult.java)
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderResult.java?p2=directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderResult.java&p1=directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderResult.java&r1=349561&r2=349650&rev=349650&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderResult.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageDecoderResult.java Mon Nov 28 21:11:07 2005
@@ -16,10 +16,11 @@
  *   limitations under the License.
  *
  */
-package org.apache.mina.filter.codec;
+package org.apache.mina.filter.codec.demux;
 
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
 
 /**
  * Represents results from {@link MessageDecoder}.

Copied: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoder.java (from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java)
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoder.java?p2=directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoder.java&p1=directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java&r1=349561&r2=349650&rev=349650&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoder.java Mon Nov 28 21:11:07 2005
@@ -16,12 +16,13 @@
  *   limitations under the License.
  *
  */
-package org.apache.mina.filter.codec;
+package org.apache.mina.filter.codec.demux;
 
 import java.util.Set;
 
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
 
 /**
  * Encodes messages of specific types specified by {@link #getMessageTypes()}.

Copied: directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoderFactory.java (from r349561, directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoderFactory.java)
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoderFactory.java?p2=directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoderFactory.java&p1=directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoderFactory.java&r1=349561&r2=349650&rev=349650&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoderFactory.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/demux/MessageEncoderFactory.java Mon Nov 28 21:11:07 2005
@@ -16,7 +16,7 @@
  *   limitations under the License.
  *
  */
-package org.apache.mina.filter.codec;
+package org.apache.mina.filter.codec.demux;
 
 /**
  * A factory that creates a new instance of {@link MessageEncoder}.

Added: directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationCodecFactory.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationCodecFactory.java?rev=349650&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationCodecFactory.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationCodecFactory.java Mon Nov 28 21:11:07 2005
@@ -0,0 +1,118 @@
+/*
+ *   @(#) $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.codec.serialization;
+
+import org.apache.mina.common.BufferDataException;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+
+/**
+ * A {@link ProtocolCodecFactory} that serializes and deserializes Java objects.
+ * This codec is very useful when you have to prototype your application rapidly
+ * without any specific codec.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class ObjectSerializationCodecFactory implements ProtocolCodecFactory
+{
+    private final ObjectSerializationEncoder encoder;
+    private final ObjectSerializationDecoder decoder;
+    
+    /**
+     * Creates a new instance with the {@link ClassLoader} of
+     * the current thread.
+     */
+    public ObjectSerializationCodecFactory()
+    {
+        this( Thread.currentThread().getContextClassLoader() );
+    }
+    
+    /**
+     * Creates a new instance with the specified {@link ClassLoader}.
+     */
+    public ObjectSerializationCodecFactory( ClassLoader classLoader )
+    {
+        encoder = new ObjectSerializationEncoder();
+        decoder = new ObjectSerializationDecoder( classLoader );
+    }
+
+    public ProtocolEncoder getEncoder()
+    {
+        return encoder;
+    }
+
+    public ProtocolDecoder getDecoder()
+    {
+        return decoder;
+    }
+    
+    /**
+     * Returns the allowed maximum size of the encoded object.
+     * If the size of the encoded object exceeds this value, the encoder
+     * will throw a {@link IllegalArgumentException}.  The default value
+     * is {@link Integer#MAX_VALUE}.
+     * <p>
+     * This method does the same job with {@link ObjectSerializationEncoder#setMaxObjectSize(int)}.
+     */
+    public int gerEncoderMaxObjectSize()
+    {
+        return encoder.getMaxObjectSize();
+    }
+    
+    /**
+     * Sets the allowed maximum size of the encoded object.
+     * If the size of the encoded object exceeds this value, the encoder
+     * will throw a {@link IllegalArgumentException}.  The default value
+     * is {@link Integer#MAX_VALUE}.
+     * <p>
+     * This method does the same job with {@link ObjectSerializationEncoder#setMaxObjectSize(int)}.
+     */
+    public void setEncoderMaxObjectSize( int maxObjectSize )
+    {
+        encoder.setMaxObjectSize( maxObjectSize );
+    }
+    
+    /**
+     * Returns the allowed maximum size of the object to be decoded.
+     * If the size of the object to be decoded exceeds this value, the
+     * decoder will throw a {@link BufferDataException}.  The default
+     * value is <tt>1048576</tt> (1MB).
+     * <p>
+     * This method does the same job with {@link ObjectSerializationDecoder#getMaxObjectSize()}.
+     */
+    public int gerDecoderMaxObjectSize()
+    {
+        return decoder.getMaxObjectSize();
+    }
+    
+    /**
+     * Sets the allowed maximum size of the object to be decoded.
+     * If the size of the object to be decoded exceeds this value, the
+     * decoder will throw a {@link BufferDataException}.  The default
+     * value is <tt>1048576</tt> (1MB).
+     * <p>
+     * This method does the same job with {@link ObjectSerializationDecoder#setMaxObjectSize(int)}.
+     */
+    public void setDecoderMaxObjectSize( int maxObjectSize )
+    {
+        decoder.setMaxObjectSize( maxObjectSize );
+    }
+}

Propchange: directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationCodecFactory.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

Added: directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationDecoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationDecoder.java?rev=349650&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationDecoder.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationDecoder.java Mon Nov 28 21:11:07 2005
@@ -0,0 +1,118 @@
+/*
+ *   @(#) $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.codec.serialization;
+
+import java.io.Serializable;
+
+import org.apache.mina.common.BufferDataException;
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+
+/**
+ * A {@link ProtocolDecoder} which deserializes {@link Serializable} Java
+ * objects using {@link ByteBuffer#getObject(ClassLoader)}.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class ObjectSerializationDecoder extends CumulativeProtocolDecoder
+{
+    private final ClassLoader classLoader;
+    private int maxObjectSize = 1048576; // 1MB
+    
+    /**
+     * Creates a new instance with the {@link ClassLoader} of
+     * the current thread.
+     */
+    public ObjectSerializationDecoder()
+    {
+        this( Thread.currentThread().getContextClassLoader() );
+    }
+    
+    /**
+     * Creates a new instance with the specified {@link ClassLoader}.
+     */
+    public ObjectSerializationDecoder( ClassLoader classLoader )
+    {
+        if( classLoader == null )
+        {
+            throw new NullPointerException( "classLoader" );
+        }
+        this.classLoader = classLoader;
+    }
+
+    /**
+     * Returns the allowed maximum size of the object to be decoded.
+     * If the size of the object to be decoded exceeds this value, this
+     * decoder will throw a {@link BufferDataException}.  The default
+     * value is <tt>1048576</tt> (1MB).
+     */
+    public int getMaxObjectSize()
+    {
+        return maxObjectSize;
+    }
+    
+    /**
+     * Sets the allowed maximum size of the object to be decoded.
+     * If the size of the object to be decoded exceeds this value, this
+     * decoder will throw a {@link BufferDataException}.  The default
+     * value is <tt>1048576</tt> (1MB).
+     */
+    public void setMaxObjectSize( int maxObjectSize )
+    {
+        if( maxObjectSize <= 0 )
+        {
+            throw new IllegalArgumentException( "maxObjectSize: " + maxObjectSize );
+        }
+        
+        this.maxObjectSize = maxObjectSize;
+    }
+
+    protected boolean doDecode( IoSession session, ByteBuffer in, ProtocolDecoderOutput out ) throws Exception
+    {
+        if( in.remaining() < 4 )
+        {
+            return false;
+        }
+        
+        int baseIndex = in.position();
+        int objectSize = in.getInt( baseIndex );
+        if( objectSize <= 4 )
+        {
+            throw new BufferDataException( "Invalid object length: " + objectSize );
+        }
+        if( objectSize > maxObjectSize )
+        {
+            throw new BufferDataException( "The object to decode is too big: " + objectSize + " (> " + maxObjectSize + ')' );
+        }
+        
+        if( objectSize + 4 > in.remaining() )
+        {
+            return false;
+        }
+        else
+        {
+            out.write( in.getObject( classLoader ) );
+            return true;
+        }
+    }
+}

Propchange: directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationDecoder.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

Added: directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationEncoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationEncoder.java?rev=349650&view=auto
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationEncoder.java (added)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationEncoder.java Mon Nov 28 21:11:07 2005
@@ -0,0 +1,96 @@
+/*
+ *   @(#) $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.codec.serialization;
+
+import java.io.NotSerializableException;
+import java.io.Serializable;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
+
+/**
+ * A {@link ProtocolEncoder} which serializes {@link Serializable} Java objects
+ * using {@link ByteBuffer#putObject(Object)}.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class ObjectSerializationEncoder extends ProtocolEncoderAdapter
+{
+    private int maxObjectSize = Integer.MAX_VALUE; // 2GB
+    
+    /**
+     * Creates a new instance.
+     */
+    public ObjectSerializationEncoder()
+    {
+    }
+    
+    /**
+     * Returns the allowed maximum size of the encoded object.
+     * If the size of the encoded object exceeds this value, this encoder
+     * will throw a {@link IllegalArgumentException}.  The default value
+     * is {@link Integer#MAX_VALUE}.
+     */
+    public int getMaxObjectSize()
+    {
+        return maxObjectSize;
+    }
+    
+    /**
+     * Sets the allowed maximum size of the encoded object.
+     * If the size of the encoded object exceeds this value, this encoder
+     * will throw a {@link IllegalArgumentException}.  The default value
+     * is {@link Integer#MAX_VALUE}.
+     */
+    public void setMaxObjectSize( int maxObjectSize )
+    {
+        if( maxObjectSize <= 0 )
+        {
+            throw new IllegalArgumentException( "maxObjectSize: " + maxObjectSize );
+        }
+        
+        this.maxObjectSize = maxObjectSize;
+    }
+
+    public void encode( IoSession session, Object message, ProtocolEncoderOutput out ) throws Exception
+    {
+        if( !( message instanceof Serializable ) )
+        {
+            throw new NotSerializableException();
+        }
+
+        ByteBuffer buf = ByteBuffer.allocate( 64 );
+        buf.setAutoExpand( true );
+        buf.putObject( message );
+        
+        int objectSize = buf.position() - 4;
+        if( objectSize > maxObjectSize )
+        {
+            buf.release();
+            throw new IllegalArgumentException( "The encoded object is too big: " + objectSize + " (> " + maxObjectSize + ')' );
+        }
+        
+        buf.flip();
+        out.write( buf );
+    }
+}

Propchange: directory/network/trunk/src/java/org/apache/mina/filter/codec/serialization/ObjectSerializationEncoder.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision