I’d be interested in the diff. Why not propagate the sent down the chain instead of just to the handler? I have a generic event system that I use to notify users fo server events, like pending shutdown or app reloads.
On Sun, Apr 8, 2018 at 11:56 AM, Emmanuel Lécharny <elecha...@gmail.com> wrote: > Ok, I have some kind of 'elegant' soution that is generic enough, with > the fire(event) method added. > > Each filter may fire some specific event, they will all be caught in the > IoHandler in one single method, up to the application to take care of > the kind of event it is interested in. > > I'm not using an 'int' as it will be problematic for those implementing > filters (one may not want to check every existing filter to know which > integer it can use safely). I'm using an interface (FilterEvent) and > enum implemting this interface : > > public interface FilterEvent { > } > > and > > public enum SslEvent implements FilterEvent { > SECURED, > UNSECURED > } > > In the IoHandler implementation, that gives : > > public void fire(IoSession session, FilterEvent event) throws Exception{ > if (event == SslFilter.SESSION_UNSECURED ) { > counter.countDown(); > } > } > > The big plus is that we have a typed event, we don't have to take care > of what we don't know (ie, other filters event details) > > And in the SslHandler itself : > > ... > // Send the SECURE event only if it's the first SSL handshake > if (firstSSLNegociation) { > firstSSLNegociation = false; > nextFilter.fire(session, SslEvent.SECURED); > } > ... > > Tests are passing green. > > Wdyt ? > > (side note, ther eis more code than just what I exposed, I will probably > create a diff for those of you interested in the details. The code is > pretty straightforward, there is really nothing complicated) > > Tahnks ! > > > Le 05/04/2018 à 15:42, Jonathan Valliere a écrit : > > Yes, its different in that it may act like a buffer, in some phases, but > > doesn’t necessarily break the pattern of filter use. What your > FilterChain > > needs is fire(index) options so the SSL can fire writes relative to > itself, > > in response to a read, without having to choke down the whole chain with > > special exceptions via flags in setAttributes. Make a lot of the design > > easier. IMHO, I think the biggest problem is the design of SSL filter > and > > the limitations of the Filter API. > > > > On Thu, Apr 5, 2018 at 9:22 AM, Emmanuel Lécharny <elecha...@gmail.com> > > wrote: > > > >> > >> > >> Le 05/04/2018 à 14:18, Jonathan Valliere a écrit : > >>> I am concerned that it is bad precedent to add handler methods based on > >>> specific filters. The purpose of the filter system is that each filter > >> has > >>> no direct knowledge of what is before or after it. Maybe there could > be > >> a > >>> generic “event” handler as part of the receive chain that the SECURED > >> event > >>> could flow down instead? > >> > >> Years agao, we had a discussion about the place where the SSL/TLS > >> handling should be done. I strongly believe that it does not belong to a > >> filter (this is a source of confusion, because it always has to be the > >> very first filter in the chain), but to the HeadFilter (or something > >> like that). > >> > >> In other words, establishing a secured session is intimely coupled with > >> any IO operation, regardless of the application built on top of it. Any > >> other filter is functional, and related to the protocol being set, but > >> TLS/SSL is different, IMHO. > >> > >> Now, your idea to have a otherEvent() method - or whatever could be the > >> name - that covers any event we would like to generate in any filter > >> sounds like a good idea too. We can explore this route. > >> > >> And, to be frank, this is the reason I asked on the mailing list : > >> having the opportunity to ear about other proposals that could make more > >> sense ! > >> > >> > >> Thanks ! > >> > >> -- > >> Emmanuel Lecharny > >> > >> Symas.com > >> directory.apache.org > >> > >> > > > > -- > Emmanuel Lecharny > > Symas.com > directory.apache.org > >