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 2006/10/12 10:03:54 UTC
svn commit: r463149 - in /directory:
branches/mina/1.0/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java
trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java
Author: trustin
Date: Thu Oct 12 01:03:49 2006
New Revision: 463149
URL: http://svn.apache.org/viewvc?view=rev&rev=463149
Log:
Resolved issue: DIRMINA-279 (CompressionFilter returns error -5 (Z_BUF_ERROR) from jzlib in MINA 1.0 but not in MINA 0.9.4)
* Modified AbstractIoFilterChain to bypass next filters if a write request contains an empty buffer (a special message)
Modified:
directory/branches/mina/1.0/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java
directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java
Modified: directory/branches/mina/1.0/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java
URL: http://svn.apache.org/viewvc/directory/branches/mina/1.0/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java?view=diff&rev=463149&r1=463148&r2=463149
==============================================================================
--- directory/branches/mina/1.0/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java (original)
+++ directory/branches/mina/1.0/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java Thu Oct 12 01:03:49 2006
@@ -25,6 +25,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoFilter;
import org.apache.mina.common.IoFilterAdapter;
@@ -786,6 +787,18 @@
public void filterWrite( IoSession session, WriteRequest writeRequest )
{
Entry nextEntry = EntryImpl.this.prevEntry;
+ if( nextEntry != head && writeRequest.getMessage() instanceof ByteBuffer )
+ {
+ // A special message is a buffer with zero length.
+ // A special message will bypass all next filters.
+ // TODO: Provide a nicer way to take care of special messages.
+ ByteBuffer message = ( ByteBuffer ) writeRequest.getMessage();
+ if( message.remaining() == 0 )
+ {
+ callPreviousFilterWrite( head.nextEntry, session, writeRequest );
+ return;
+ }
+ }
callPreviousFilterWrite( nextEntry, session, writeRequest );
}
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java?view=diff&rev=463149&r1=463148&r2=463149
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/AbstractIoFilterChain.java Thu Oct 12 01:03:49 2006
@@ -25,6 +25,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoFilter;
import org.apache.mina.common.IoFilterAdapter;
@@ -786,6 +787,18 @@
public void filterWrite( IoSession session, WriteRequest writeRequest )
{
Entry nextEntry = EntryImpl.this.prevEntry;
+ if( nextEntry != head && writeRequest.getMessage() instanceof ByteBuffer )
+ {
+ // A special message is a buffer with zero length.
+ // A special message will bypass all next filters.
+ // TODO: Provide a nicer way to take care of special messages.
+ ByteBuffer message = ( ByteBuffer ) writeRequest.getMessage();
+ if( message.remaining() == 0 )
+ {
+ callPreviousFilterWrite( head.nextEntry, session, writeRequest );
+ return;
+ }
+ }
callPreviousFilterWrite( nextEntry, session, writeRequest );
}