I was facing a simiilar issue: My application required processing handshake 
messages that should not be passed to ProtocolEncoder/Decoder. I maintained the 
state in IoSession and accordingly inferred whether to encode or decode the 
message.
________________________________________
From: Shaun Senecal [[email protected]]
Sent: Friday, May 27, 2011 4:24 PM
To: [email protected]
Subject: Re: skipping certain filters in a chain to allow handling UDP 
encryption handshake messages

I take it back.  Hopefully I didnt waste anyone's time with this.

The solution seems to have been that I needed to swap my 2 DTLS filters and
then when I am writing "handshake" messages, I dont write them to the
IoSession directly, but instead I write them to the DTLS Codec filter
directly.

The chain now looks like:
DTLS Protocol Codec ---> DTLSFilter ---> TextLineCodec --> Logger

and DTLSFilter hangs on to a reference to DTLS Protocol Codec so it can send
the Handshake messages without worrying about the other filters messing with
it.

If I am able to get this solution working in a reasonable manner, I will
post it somewhere (and reply to this thread with its location) so that
others might be able to use this UDP encryption thingy.  I just have it
passing simple encrypted strings right now though (thus the TextLineCodec),
so dont hold you breath that it will be anytime soon :)



On Fri, May 27, 2011 at 5:52 PM, Shaun Senecal <[email protected]> wrote:

> I'm using MINA 2.0.2 to implement a filter which adds encryption to UDP
> messages (basically a mini-DTLS).  The problem I'm having is that I was
> hoping to be able to simply place a ProtocolCodecFilter on the filter chain
> to handle these messages, but when I send out one of these messages it gets
> processed by every other filter in the chain which is resulting in my
> internal handshake messages being encoded by the TextLineCodec I have later
> on in the chain.
>
> The chain looks like this:
> DTLSFilter ---> DTLS Protocol Codec ---> TextLineCodec --> Logger
>
> When I initiate the handshake from the DTLSFilter, it writes the
> HandshakeMessage to the IoSession, which promptly passed it for processing
> through the chain in reverse order.  This results in the TextLineCodec
> "encoding" my HandshakeMessage before my DTLS Protocol Codec gets a chance
> to.  Is there a way I can simply disable the last N codecs during the
> handshake process and re-enable them afterwards?
>
> I noticed some discussions about a state machine based filter process in
> MINA 3.0 which sounds like it might be what I want, but thats not possible
> in 2.0 AFAIK.  I also noticed that SslFilter isnt using this approach, so
> perhaps its not possible to have an out-of-band set of messages to perform
> the handshaking and I should just try to repeat what SslFilter does!
>

DISCLAIMER
==========
This e-mail may contain privileged and confidential information which is the 
property of Persistent Systems Ltd. It is intended only for the use of the 
individual or entity to which it is addressed. If you are not the intended 
recipient, you are not authorized to read, retain, copy, print, distribute or 
use this message. If you have received this communication in error, please 
notify the sender and delete all copies of this message. Persistent Systems 
Ltd. does not accept any liability for virus infected mails.

Reply via email to