It's been a really interesting and fun discussion today! :)

To summarize:

sessionCreated() can not be relied upon to do filter initialization since if the filter is added to a chain after the session was created sessionCreated() won't be called. This means that IoFilter.init() is needed and it has to be called when added or at least before the first time any of the other IoFilter-methods is called. And in IoFilter.init() we know there will be times when we need to get a hold of the session (see SSLFilter) so IoFilter.init() has to be called every time it is added to a session. My conclusion is that we should add the session in the call to init():

void init(IoFilterChain parent, NextFilter nextFilter, IoSession session)

Can we all agree on this now?

I proposed a very simple solution earlier today which in short means that the chain for a session isn't created until the session is actually created. It will be extremelly simple to implement but there *might* be some overhead involved in creating the chain.

Dave, you seem to be confident that you can sort this out without having to create a new chain when a new session is created. I do not doubt that. If you still think it's worth it why don't you have a shot at it? The question is how complex it will be and if it really will be that much efficient.

/Niklas

Reply via email to