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);