Okay, let me know when you’re able to test with that branch.  I think it
should solve your problem.

On Feb 20, 2024 at 6:32:06 AM, Kishore Mokkarala <kishore....@gmail.com>
wrote:

> @ Valliere I am not available for a week.
>
> On Tue, 20 Feb, 2024, 8:59 am Jonathan Valliere, <john...@apache.org>
> wrote:
>
> @Kishore Mokkarala <kishore....@gmail.com> are you able to test this
>
> branch? https://github.com/apache/mina/compare/2.2.X...bugfix/DIRMINA-1173
>
>
> On Feb 18, 2024 at 2:05:57 PM, Jonathan Valliere <john...@apache.org>
>
> wrote:
>
>
> > The other diagram possibly had a consumer order issue.  While the Queue
>
> > will guarantee that the messages will be pulled out of the Queue in
> order,
>
> > they do not guarantee that the processing of the messages will happen in
>
> > order.
>
> >
>
> > The new diagram implements 3 synchronization objects.  This will ensure
>
> > that messages are produced and enter the respective queues in guaranteed
>
> > order and that they will be consumed with upstream or downstream in order
>
> > without locking both directions concurrently.
>
> >
>
> > On Feb 18, 2024 at 1:47:58 PM, Jonathan Valliere <john...@apache.org>
>
> > wrote:
>
> >
>
> >> Emmanuel,
>
> >>
>
> >> The attached diagram is how I figured out we can solve this.  The
>
> >> downside is that it requires more concurrent queues and more lock/unlock
>
> >> but I think it should ensure correct execution order.
>
> >>
>
> >> I’m working on this now as SSLHandlerG1 so it stays separate from the
>
> >> reference implementation.
>
> >>
>
> >> On Feb 17, 2024 at 7:33:21 PM, Jonathan Valliere <john...@apache.org>
>
> >> wrote:
>
> >>
>
> >>> Okay so I need to figure out how to work it so no lock is held while
>
> >>> calling either the upper or lower filter.
>
> >>>
>
> >>> CONFIDENTIALITY NOTICE: The contents of this email message and any
>
> >>> attachments are intended solely for the addressee(s) and may contain
>
> >>> confidential and/or privileged information and may be legally
>
> >>> protected from disclosure.
>
> >>>
>
> >>>
>
> >>> On Sat, Feb 17, 2024 at 5:06 PM Emmanuel Lécharny <elecha...@gmail.com
> >
>
> >>> wrote:
>
> >>>
>
> >>>> Hi Jonathan,
>
> >>>>
>
> >>>> Kishore provided a thrzad dump a few weeks ago, which shows that there
>
> >>>> is a lock:
>
> >>>>
>
> >>>> NioProcessor-12
>
> >>>> ---------------
>
> >>>> stackTrace:
>
> >>>> java.lang.Thread.State: BLOCKED (on object monitor)
>
> >>>> at
>
> >>>>
> org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:138)
>
> >>>> - waiting to lock <0x00007fc1611faec8> (a
>
> >>>> com.netscout.nsaapp.geo.minaG10Proto.server.G10StateContext)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.statemachine.StateMachineProxyBuilder$MethodInvocationHandler.invoke(StateMachineProxyBuilder.java:261)
>
> >>>> at jdk.proxy4.$Proxy83.event(jdk.proxy4/Unknown Source)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.event(DefaultIoFilterChain.java:1039)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.IoFilterAdapter.event(IoFilterAdapter.java:162)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextFilterEvent(DefaultIoFilterChain.java:789)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1700(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.event(DefaultIoFilterChain.java:1164)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.filter.ssl.SSLHandlerG0.finish_handshake(SSLHandlerG0.java:589)
>
> >>>> - locked <0x00007fc1611fb470> (a
>
> >>>> org.apache.mina.filter.ssl.SSLHandlerG0)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.filter.ssl.SSLHandlerG0.receive_loop(SSLHandlerG0.java:271)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.filter.ssl.SSLHandlerG0.receive_loop(SSLHandlerG0.java:246)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.filter.ssl.SSLHandlerG0.receive_loop(SSLHandlerG0.java:246)
>
> >>>> at
>
> >>>> org.apache.mina.filter.ssl.SSLHandlerG0.receive(SSLHandlerG0.java:162)
>
> >>>> - locked <0x00007fc1611fb470> (a
>
> >>>> org.apache.mina.filter.ssl.SSLHandlerG0)
>
> >>>> at
>
> >>>>
> org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:405)
>
> >>>> ...
>
> >>>>
>
> >>>>
>
> >>>> and
>
> >>>>
>
> >>>>
>
> >>>> pool-120-thread-37
>
> >>>> ------------------
>
> >>>> stackTrace:
>
> >>>> java.lang.Thread.State: BLOCKED (on object monitor)
>
> >>>> at
> org.apache.mina.filter.ssl.SSLHandlerG0.write(SSLHandlerG0.java:312)
>
> >>>> - waiting to lock <0x00007fc1611fb470> (a
>
> >>>> org.apache.mina.filter.ssl.SSLHandlerG0)
>
> >>>> at
> org.apache.mina.filter.ssl.SslFilter.filterWrite(SslFilter.java:451)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:138)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:332)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.filter.executor.ExecutorFilter.filterWrite(ExecutorFilter.java:595)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
>
> >>>> at
>
> >>>>
>
> >>>>
> com.netscout.nsaapp.geo.minaG10Proto.server.G10GPBMessageIoFilter.filterWrite(G10GPBMessageIoFilter.java:63)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:138)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:49)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:1146)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.IoFilterAdapter.filterWrite(IoFilterAdapter.java:138)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:753)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:746)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:575)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:520)
>
> >>>> at
>
> >>>>
>
> >>>>
> com.netscout.nsaapp.geo.g10Plugin.g10.processor.G10PluginCaptureProcessor.verifyAndSendStartMsgs(G10PluginCaptureProcessor.java:2627)
>
> >>>> at
>
> >>>>
>
> >>>>
> com.netscout.nsaapp.geo.g10Plugin.g10.processor.G10PluginCaptureProcessor.sessionConnected(G10PluginCaptureProcessor.java:2552)
>
> >>>> at
>
> >>>>
>
> >>>>
> com.netscout.nsaapp.geo.minaG10Proto.server.G10MinaClient.connect(G10MinaClient.java:220)
>
> >>>> at jdk.internal.reflect.GeneratedMethodAccessor99.invoke(Unknown
>
> >>>> Source)
>
> >>>> at
>
> >>>>
>
> >>>>
> jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@17.0.7
>
> >>>> /DelegatingMethodAccessorImpl.java:43)
>
> >>>> at java.lang.reflect.Method.invoke(java.base@17.0.7/Method.java:568)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.statemachine.transition.MethodTransition.invokeMethod(MethodTransition.java:281)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.statemachine.transition.MethodTransition.doExecute(MethodTransition.java:232)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.statemachine.transition.AbstractTransition.execute(AbstractTransition.java:100)
>
> >>>> at
>
> >>>>
> org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:183)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.statemachine.StateMachine.processEvents(StateMachine.java:170)
>
> >>>> at
>
> >>>>
> org.apache.mina.statemachine.StateMachine.handle(StateMachine.java:158)
>
> >>>> - locked <0x00007fc1611faec8> (a
>
> >>>> com.netscout.nsaapp.geo.minaG10Proto.server.G10StateContext)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.statemachine.StateMachineProxyBuilder$MethodInvocationHandler.invoke(StateMachineProxyBuilder.java:261)
>
> >>>> at jdk.proxy4.$Proxy83.sessionOpened(jdk.proxy4/Unknown Source)
>
> >>>> at
>
> >>>>
>
> >>>>
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.sessionOpened(DefaultIoFilterChain.java:940)
>
> >>>> ...
>
> >>>>
>
> >>>>
>
> >>>> Basically, on the sessionOpened event, the StateMachine filter takes a
>
> >>>> lock (0x00007fc1611faec8), then the IoHandler tries to write some
>
> >>>> data,
>
> >>>> which ends in the SslFilter.filterWrite method, which takes a lock
>
> >>>> (0x00007fc1611fb470)
>
> >>>>
>
> >>>> Another thread is processing the messageReceived method, go through
>
> >>>> the
>
> >>>> SslFilter.messageReceived method which takes a lock
>
> >>>> (0x00007fc1611fb470), the same as in the upper thread, then goes
>
> >>>> through
>
> >>>> the StateMachine.handle method, which takes a lock
>
> >>>> (0x00007fc1611faec8,
>
> >>>> already seen upper).
>
> >>>>
>
> >>>> The IoHandler should not try to write something on the sessionOpened
>
> >>>> message IMO (until the session has been secured), but in any case, the
>
> >>>> double lock is clearly the root cause of the problem.
>
> >>>>
>
> >>>>
>
> >>>>
>
> >>>>
>
> >>>> On 17/02/2024 17:41, Emmanuel Lécharny wrote:
>
> >>>> > Hi Jonathan,
>
> >>>> >
>
> >>>> > regarding the queing, we did that in MINA 2.1:
>
> >>>> >
>
> >>>> >      public void filterWrite(NextFilter nextFilter, IoSession
>
> >>>> session,
>
> >>>> > WriteRequest writeRequest) throws SSLException {
>
> >>>> >          if (LOGGER.isDebugEnabled()) {
>
> >>>> >              LOGGER.debug("{}: Writing Message : {}",
>
> >>>> > getSessionInfo(session), writeRequest);
>
> >>>> >          }
>
> >>>> >
>
> >>>> >          boolean needsFlush = true;
>
> >>>> >          SslHandler sslHandler = getSslSessionHandler(session);
>
> >>>> >
>
> >>>> >          try {
>
> >>>> >              synchronized (sslHandler) {
>
> >>>> >                  if (!isSslStarted(session)) {
>
> >>>> >                      sslHandler.scheduleFilterWrite(nextFilter,
>
> >>>> > writeRequest);
>
> >>>> >                  }
>
> >>>> > ...
>
> >>>> >
>
> >>>> > and
>
> >>>> >
>
> >>>> >      /* no qualifier */void scheduleFilterWrite(NextFilter
>
> >>>> nextFilter,
>
> >>>> > WriteRequest writeRequest) {
>
> >>>> >          filterWriteEventQueue.add(new IoFilterEvent(nextFilter,
>
> >>>> > IoEventType.WRITE, session, writeRequest));
>
> >>>> >      }
>
> >>>> >
>
> >>>> > Sobasically, of the session handshake has not been fully negociated,
>
> >>>> > then we enqueue the write request. Pretty much what you suggest to
>
> >>>> do
>
> >>>> > instead of using synchronized blocks around read and write.
>
> >>>> >
>
> >>>> > Otherwise, comments inline:
>
> >>>> >
>
> >>>> > On 17/02/2024 14:06, Jonathan Valliere wrote:
>
> >>>> >>   There is also some additional complexity supporting the scenario
>
> >>>> >> where two
>
> >>>> >> different threads are triggering “receive” events on the filter.
>
> >>>> >
>
> >>>> > You mean on the same session?
>
> >>>> >
>
> >>>> >>
>
> >>>> >> We either have to process ALL messages out of the payload, then
>
> >>>> AFTER
>
> >>>> >> send
>
> >>>> >> them to the downstream filters or we have to perform a kind of
>
> >>>> >> dual-locking
>
> >>>> >> mechanism to ensure that multiple receiver threads to not operate
> in
>
> >>>> >> parallel.  Either way, we have to guarantee a serial processing of
>
> >>>> >> incoming
>
> >>>> >> messages.
>
> >>>> >
>
> >>>> > Actually, this is not a problem unless someone puts an executor
>
> >>>> filter
>
> >>>> > *before the SslFilter in the chain. We process the incoming message
>
> >>>> in a
>
> >>>> > way a given session is associated with one single IoProcessor
>
> >>>> instance,
>
> >>>> > so all the messages for a given session should be processed
>
> >>>> sequentially
>
> >>>> > by this Io processor. If we don't have an excutor filter before the
>
> >>>> > Sslfilter, it should be safe.
>
> >>>> >
>
> >>>> >>
>
> >>>> >> The more I think about it the more concerned I am that we’re
>
> >>>> following a
>
> >>>> >> rabbit down a hole.
>
> >>>> >>
>
> >>>> >> @Kishore Mokkarala <kishore....@gmail.com> have you tried NOT
>
> >>>> using
>
> >>>> >> the SSL
>
> >>>> >> and instead creating a dummy filter which simply added synchronized
>
> >>>> to
>
> >>>> >> the
>
> >>>> >> receive and write method?  I would be interested to know if that
>
> >>>> >> causes the
>
> >>>> >> problem also.  Put this dummy filter in the same place as the SSL
>
> >>>> >> would be.
>
> >>>> >
>
> >>>> > Another way to deal with the lock would be to check for the
>
> >>>> > SessioSnecured event in the IoHandler side:
>
> >>>> > - if the event has not be received, then don't send writes, but
>
> >>>> enqueue
>
> >>>> > them
>
> >>>> > - if the session has been secured, then you can write at will
>
> >>>> > - when teh sessionSecured even is received, unqueue the write
>
> >>>> messages.
>
> >>>> >
>
> >>>> > Somehow, that should replace what I think we should do in the
>
> >>>> SslFilter.
>
> >>>> >
>
> >>>> > But I don't think the burden should be put on the MINA library
>
> >>>> user...
>
> >>>> >
>
> >>>> >>
>
> >>>> >> On Feb 17, 2024 at 2:00:30 AM, Emmanuel Lécharny <
>
> >>>> elecha...@gmail.com>
>
> >>>> >> wrote:
>
> >>>> >>
>
> >>>> >>> Hi Jonathan,
>
> >>>> >>>
>
> >>>> >>> there are two aspects to consider:
>
> >>>> >>>
>
> >>>> >>> - first the establishemnt of the secured session
>
> >>>> >>> - second the standard exchange of data when the session has been
>
> >>>> >>> secured.
>
> >>>> >>>
>
> >>>> >>> In the first case, we should *never* have any write done by the
>
> >>>> >>> IoHandler, or those writes should be enqueued until the session
>
> >>>> has been
>
> >>>> >>> secured. Here, the upstream filters should not be aware that the
>
> >>>> session
>
> >>>> >>> has been secured or not (all in all, filters are supposed to be
>
> >>>> >>> independenct)
>
> >>>> >>>
>
> >>>> >>> In the second case, the SslFilter is responsible for handling the
>
> >>>> >>> encoding and decoding of the data, regardless of what the upper
>
> >>>> filters
>
> >>>> >>> are doing
>
> >>>> >>>
>
> >>>> >>> So there should not be any assumption made on what wcould or
>
> >>>> should do
>
> >>>> >>> the upstream filters (that's because anyone can add a filter, and
>
> >>>> we
>
> >>>> >>> should not force the implementors to take care of unerlying
> filters
>
> >>>> >>> constraints).
>
> >>>> >>>
>
> >>>> >>> So the best way to deal with writes while the Secured session
>
> >>>> >>> establishment is ongoing is to enqueue the writes until the
>
> >>>> session is
>
> >>>> >>> secured. It adds some complexity, but it's safe for the full stack
>
> >>>> >>> (reads are a different beast: we have to assume that we can only
>
> >>>> read
>
> >>>> >>> Handshake packets until the HS is completed)
>
> >>>> >>>
>
> >>>> >>> I guess it fits with what you have in mind.
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>> On 17/02/2024 04:12, Jonathan Valliere wrote:
>
> >>>> >>>
>
> >>>> >>> I was thinking this over last weekend….
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>> If I simply removed the synchronization then there COULD be
> several
>
> >>>> >>>
>
> >>>> >>> incoming data corruption problems unless the upstream filters/
>
> >>>> >>> processors
>
> >>>> >>>
>
> >>>> >>> MUST guarantee FIFO of the data stream.
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>> What I would have todo is push OR copy the incoming buffer into a
>
> >>>> Queue
>
> >>>> >>>
>
> >>>> >>> then perform processing off the head of that Queue.  Essentially,
>
> >>>> do the
>
> >>>> >>>
>
> >>>> >>> same as the mEncodeQueue but for Decodes.  The lock would then
>
> >>>> only
>
> >>>> >>> be held
>
> >>>> >>>
>
> >>>> >>> when processing data off of that Decode queue.  Following this
>
> >>>> >>> pattern, I
>
> >>>> >>>
>
> >>>> >>> could probably remove both the READ and WRITE synchronization
>
> >>>> blocks.
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>> My understanding, for MINA, that the assumption is that it SHOULD
>
> >>>> be
>
> >>>> >>> safe
>
> >>>> >>>
>
> >>>> >>> to hold on to any object passed into a Filter since object
>
> >>>> lifecycles
>
> >>>> >>>
>
> >>>> >>> SHOULD be controlled by the VM and not the User’s code.
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>> If we’re in agreement, I can make the change.
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>> On Feb 10, 2024 at 2:14:01 PM, Kishore Mokkarala <
>
> >>>> kishore....@gmail.com>
>
> >>>> >>>
>
> >>>> >>> wrote:
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>>> Any time line for removing synchronization block in SSLFilter?
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> On Sat, 10 Feb, 2024, 9:48 pm Emmanuel Lécharny, <
>
> >>>> elecha...@gmail.com>
>
> >>>> >>>
>
> >>>> >>>> wrote:
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> Netty is not Apache, but Eclipse.
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> We are discussing the error at the moment, trying to move away
> the
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> SSLFilter synchronized block.
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> On 10/02/2024 08:10, Kishore Mokkarala wrote:
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>> We had to revert mina version to 2.0.25 from 2.2.1 to make it
>
> >>>> work in
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>> production and  trying for other alternatives like apache netty.
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>> On Fri, 9 Feb, 2024, 1:59 pm Emmanuel Lécharny, <
>
> >>>> elecha...@gmail.com
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>> <mailto:elecha...@gmail.com>> wrote:
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       Hi Jonathan,
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       in this very case, I think there is a race condition when
>
> >>>> >>>>> using the
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       SSLFilter in conjonction with the StateMachine filter.
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       On 09/02/2024 05:33, Jonathan Valliere wrote:
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >   No, you should not have to create multiple
>
> >>>> instances.  The
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       necessary
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        > stateful data is saved to the Connection.
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        > On Feb 1, 2024 at 5:22:36 AM, Kishore Mokkarala
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       <kishore....@gmail.com <mailto:kishore....@gmail.com>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        > wrote:
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> Any response would be greatly appreciated.
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> ------------------------------------------
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> M.V.S.Kishore
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> 91-9886412814
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> On Wed, 31 Jan 2024 at 22:17, Kishore Mokkarala
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       <kishore....@gmail.com <mailto:kishore....@gmail.com>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> wrote:
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> Hi Emmanuel,
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> Do we need to create a new instance of SSLFilter per
>
> >>>> tcp ip
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       connection or
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> can we reuse it ?
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> For example, do we need to repeat the same code for
>
> >>>> each
>
> >>>> >>>>> tcp ip
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       connection
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> ?
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> *Approach 1:*
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> for(int i=0;i< 500;i++)
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> NioSocketConnector connector = new
>
> >>>> NioSocketConnector();
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connector.getFilterChain().addLast("LoggingFilter",
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> G10CaptureService.loggingFilter);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connector.getFilterChain().addLast("codecFilter",
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> G10CaptureService.probeCodecFilter);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connector.getFilterChain().addLast("executorFilter",
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> G10CaptureService.executorFilter);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connector.getFilterChain().addLast("gpbMessageFilter",
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> G10CaptureService.gpbMessageFilter);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connector.getFilterChain().addLast("keepAliveFilter",
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> G10CaptureService.keepAliveFilter);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> SslFilter sslFilter;
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> try {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> SSLContext sslContext = TLSUtil.getSSLContext();
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> sslFilter = new CustomSslFilter(sslContext);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connector.getFilterChain().addFirst("sslFilter",
>
> >>>> sslFilter);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> } catch (Exception e) {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> e.printStackTrace();
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> LOG.error("Exception during creating SSL context..." +
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> XError.getStackTrace(e));
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> }
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> //io handler creation
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> StateMachine stateMachine =
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>
> StateMachineFactory.getInstance(IoHandlerTransition.class).create(
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>                  G10MinaClient.CONNECTED, new
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       G10MinaClient(processor));
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>          IoHandler ioHandler = new
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> StateMachineProxyBuilder().setStateContextLookup(
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>                  new IoSessionStateContextLookup(new
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       StateContextFactory() {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>                      @Override
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>                      public StateContext create() {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>                          final G10StateContext
>
> >>>> >>>>> stateContext =
>
> >>>> >>> new
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> G10StateContext();
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> stateContext.setStartedTime(new
>
> >>>> >>> Date());
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>                          LOG.info("G10StateContext
>
> >>>> >>>>> initialized
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> at:{}
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> ",System.currentTimeMillis());
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>                          return stateContext;
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>                      }
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>                  })).create(IoHandler.class,
>
> >>>> stateMachine);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connector.setHandler(ioHandler);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connector.connect(primaryAddress);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connectFuture.awaitUninterruptibly();
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> if (connectFuture.isConnected()) {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> IoSession session = connectFuture.getSession();
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> // Do something with the session if needed
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> } else {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> System.err.println("Connection failed for iteration: "
>
> >>>> + i);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> }
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> }
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> *Approach 2:*
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> Reuse the generic connector implemented above for
>
> >>>> opening
>
> >>>> >>>>> all
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> TCP/IP
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connections.
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> //just do the below for getting connections for
> example
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> NioSocketConnector connector = new
>
> >>>> NioSocketConnector();
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> //filter chain creation
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> //add SSLFilter to filer chain
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> for(int i=0;i< 500;i++)
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> ConnectFuture connectFuture =
>
> >>>> >>>>> connector.connect(serverAddress);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> connectFuture.awaitUninterruptibly();
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> if (connectFuture.isConnected()) {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> IoSession session = connectFuture.getSession();
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> // Do something with the session if needed
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> } else {
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> System.err.println("Connection failed for iteration: "
>
> >>>> + i);
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> }
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> }
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> Which approach is better ?
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> Regards,
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> ------------------------------------------
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> M.V.S.Kishore
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >> 91-9886412814
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>        >
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       --
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       elecha...@apache.org <mailto:elecha...@apache.org>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> ---------------------------------------------------------------------
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       To unsubscribe, e-mail: users-unsubscr...@mina.apache.org
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       <mailto:users-unsubscr...@mina.apache.org>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       For additional commands, e-mail:
>
> >>>> users-h...@mina.apache.org
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>       <mailto:users-h...@mina.apache.org>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> --
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>> elecha...@apache.org
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>>
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>>
>
> >>>> >>> --
>
> >>>> >>> *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
>
> >>>> >>> elecha...@apache.org
>
> >>>> >>>
>
> >>>> >>
>
> >>>> >
>
> >>>>
>
> >>>> --
>
> >>>> *Emmanuel Lécharny* P. +33 (0)6 08 33 32 61
>
> >>>> elecha...@apache.org
>
> >>>>
>
> >>>> ---------------------------------------------------------------------
>
> >>>> To unsubscribe, e-mail: users-unsubscr...@mina.apache.org
>
> >>>> For additional commands, e-mail: users-h...@mina.apache.org
>
> >>>>
>
> >>>>
>
>

Reply via email to