You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2009/11/26 10:41:33 UTC

svn commit: r884479 - /mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java

Author: elecharny
Date: Thu Nov 26 09:41:32 2009
New Revision: 884479

URL: http://svn.apache.org/viewvc?rev=884479&view=rev
Log:
Reverted a modif I committed a few months ago : the CODEC instances should not be stored in the session, otherwise a user can't have more than one codec in the chain

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=884479&r1=884478&r2=884479&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Thu Nov 26 09:41:32 2009
@@ -53,10 +53,10 @@
     private static final Class<?>[] EMPTY_PARAMS = new Class[0];
     private static final IoBuffer EMPTY_BUFFER = IoBuffer.wrap(new byte[0]);
 
-    private static final AttributeKey ENCODER = new AttributeKey(ProtocolCodecFilter.class, "encoder");
-    private static final AttributeKey DECODER = new AttributeKey(ProtocolCodecFilter.class, "decoder");
-    private static final AttributeKey DECODER_OUT = new AttributeKey(ProtocolCodecFilter.class, "decoderOut");
-    private static final AttributeKey ENCODER_OUT = new AttributeKey(ProtocolCodecFilter.class, "encoderOut");
+    private final AttributeKey ENCODER = new AttributeKey(ProtocolCodecFilter.class, "encoder");
+    private final AttributeKey DECODER = new AttributeKey(ProtocolCodecFilter.class, "decoder");
+    private final AttributeKey DECODER_OUT = new AttributeKey(ProtocolCodecFilter.class, "decoderOut");
+    private final AttributeKey ENCODER_OUT = new AttributeKey(ProtocolCodecFilter.class, "encoderOut");
     
     /** The factory responsible for creating the encoder and decoder */
     private final ProtocolCodecFactory factory;
@@ -210,7 +210,7 @@
         }
 
         IoBuffer in = (IoBuffer) message;
-        ProtocolDecoder decoder = getDecoder(session);
+        ProtocolDecoder decoder = getDecoder0(session);
         ProtocolDecoderOutput decoderOut = getDecoderOut(session, nextFilter);
         
         // Loop until we don't have anymore byte in the buffer,
@@ -288,7 +288,7 @@
         }
 
         // Get the encoder in the session
-        ProtocolEncoder encoder = getEncoder(session);
+        ProtocolEncoder encoder = getEncoder0(session);
 
         ProtocolEncoderOutput encoderOut = getEncoderOut(session,
                 nextFilter, writeRequest);
@@ -322,7 +322,7 @@
     public void sessionClosed(NextFilter nextFilter, IoSession session)
             throws Exception {
         // Call finishDecode() first when a connection is closed.
-        ProtocolDecoder decoder = getDecoder(session);
+        ProtocolDecoder decoder = getDecoder0(session);
         ProtocolDecoderOutput decoderOut = getDecoderOut(session, nextFilter);
         
         try {
@@ -488,16 +488,6 @@
     }
 
     /**
-     * Get the decoder instance from a given session.
-     *
-     * @param session The associated session we will get the decoder from
-     * @return The decoder instance
-     */
-    private ProtocolDecoder getDecoder(IoSession session) {
-        return (ProtocolDecoder) session.getAttribute(DECODER);
-    }
-
-    /**
      * Dispose the decoder, removing its instance from the
      * session's attributes, and calling the associated
      * dispose method.
@@ -534,6 +524,28 @@
         return out;
     }
 
+    private ProtocolEncoder getEncoder0(IoSession session) throws Exception {
+        ProtocolEncoder encoder = (ProtocolEncoder) session
+                .getAttribute(ENCODER);
+        if (encoder == null) {
+            encoder = factory.getEncoder(session);
+            session.setAttribute(ENCODER, encoder);
+        }
+        return encoder;
+    }
+
+    private ProtocolDecoder getDecoder0(IoSession session) throws Exception {
+        ProtocolDecoder decoder = (ProtocolDecoder) session
+                .getAttribute(DECODER);
+        
+        if (decoder == null) {
+            decoder = factory.getDecoder(session);
+            session.setAttribute(DECODER, decoder);
+        }
+        
+        return decoder;
+    }
+
     private ProtocolEncoderOutput getEncoderOut(IoSession session,
         NextFilter nextFilter, WriteRequest writeRequest) {
         ProtocolEncoderOutput out = (ProtocolEncoderOutput) session.getAttribute(ENCODER_OUT);