I might have misunderstood what you're proposing. Are you proposing to get rid of the UnderivableBuffer, not the CumulativeDecoder? Thanks, Sangjin
On Mon, Mar 10, 2008 at 7:14 PM, 이희승 (Trustin Lee) <[EMAIL PROTECTED]> wrote: > Yes, it's underivable by its design. If a user calls slice() or > duplicate() on the buffer received from CumulativeProtocolDecoder, the > buffer cannot be expanded anymore. However, CumulativeProtocolDecoder > caches it expecting it to be always (auto-)expandable, so any derivation > operation will cause CumulativeProtocolDecoder to throw an exception. > > One solution to this problem is to modify CumulativeProtocolDecoder to > check if the buffer became underivable before every put() operation and > allocate new auto-expandable buffer when it became underivable. > > For now, CumulativeProtocolDecoder is the only class that uses > UnderivableBuffer and I can't think of any other possible usage right > now, so we could get rid of it together with my proposed change. > > How does it sound? > > 2008-03-10 (월), 16:01 -0700, Sangjin Lee 쓰시길: > > I've seen this problem in the past, and I'm seeing it again... > > If one extends the CumulativeDecoder and finds that there is not enough > data > > in the buffer, one returns false on doDecode() so mina can collect more > > data. However, it seems that CumulativeDecoder puts the last remaining > > bytes from the decode into an UnderivableBuffer and stores it in the > > session. When it gets more data later, the data is added to this > session > > buffer, and the CumulativeDecoder subclass gets to it. > > > > The problem is, things like slice() and duplicate() on an > UnderivableBuffer > > throw an exception. Therefore, your cumulative decoder that does > slice() > > will result in an exception. Is this by design? Should you write your > > cumulative decoder in such a way one should never call slice()? This is > > somewhat unexpected because Mina 1.1 did not have such a restriction. > > > > The example class named CrLfTerminatedCommandLineDecoder mentioned in > the > > javadoc of CumulativeDecoder also uses IoBuffer.slice(). I wrote a > quick > > test that exercises this class, and as expected, I get an > > UnsupportedOperationException saying buffer derivation is disabled. > > > > Any thoughts on this? Does one need to find a way to use the > > CumulativeDecoder that avoids these methods? > > > > Thanks, > > Sangjin > -- > Trustin Lee - Principal Software Engineer, JBoss, Red Hat > -- > what we call human nature is actually human habit > -- > http://gleamynode.net/ >
