directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Trustin Lee <trus...@gmail.com>
Subject Re: [mina] ByteBuffer allocation
Date Thu, 03 Feb 2005 13:43:35 GMT
Hi.

On Thu, 3 Feb 2005 14:11:43 +0100, Jan Andersson <janne@minq.se> wrote:
> I have a working prototype of an IoHandlerFilter that uses SSL to
> encrypt/decrypt
> data. The implementation uses the new SSLEngine utilities provided with
> Java  1.5.
> 
> I have a few questions regarding ByteBuffer allocation.
> 
> In dataRead(Handler nextHandler, IoSession session, ByteBuffer buf) I
> send the
> ByteBuffer to my SSL Utility to decrypt the buffer. Depending on SSL
> state this
> either involves initial SSL handshaking or simply decryption of the
> data.
> Encryptinon is handled in filterWrite(IoSession session, ByteBuffer
> buf).
> I have 2 cases where I allocate org.apache.mina.common.ByteBuffers:
> 
> 1) To write data during SSL handshake i allocate ByteBuffer(s) using
>     ByteBuffer.allocate(), copies the encrypted data and write it to the
> net using
>     session.write().
> 
> 2) In filterWrite(IoSession session, ByteBuffer buf) I encrypt the
> provided
>     ByteBuffer (if not doing initial handshake where provided data is
> already
>     encrypted). I allocate a ByteBuffer, copies the encrypted data to
> this
>     buffer and return it
> 
> Now to my questions:
> 
> - case 1) where i call session.write(), where would be the best place to
>    release allocated ByteBuffer?

You don't need to release it because MINA releases it for you. :)

> - for case 2) I allocate a new buffer, since the encrypted data may be
> larger
>    that the provided ByteBuffer. Where would be the best place to
> release allocated
>    ByteBuffer in this case?

You don't need to release it, either.  But I forgot to release old
buffer (the one passes as a parameter).  I'll fix it.

> I guess the best solution would be (for case 2) to make sure Mina
> allokates buffers
> of a configurable size, somehough? But for case 1) I have to allocate
> and release
> ByteBuffers...

MINA can create ByteBuffer with max 8KB.  So if you encrypt 8KB
ByteBuffer, you might not be able to allocate which fits with the
encrypted data.  I'll have to make ByteBuffer.allocate can allocate
more bigger buffers.

> One thing that could help, might be to provide a method in
> org.apache.mina.common.ByteBuffers
> that allows me to create a org.apache.mina.common.ByteBuffer from a
> java.nio.ByteBuffer.
> This would *not* use the cache/stacks provided, but allow me to create
> a Mina-style
> ByteBuffer from a java.nio.ByteBuffer (that is allocated/released by
> me).

Is there any reason that you need to wrap java.nio.ByteBuffer?  Could
you explain about this a little more?

Trustin
-- 
what we call human nature is actually human habit
--
http://gleamynode.net/

Mime
View raw message