Author: buildbot
Date: Wed Apr  3 11:31:50 2019
New Revision: 1043107

Log:
Staging update by buildbot for mina

Modified:
    websites/staging/mina/trunk/content/   (props changed)
    
websites/staging/mina/trunk/content/mina-project/technical-documentation/message-flow.html

Propchange: websites/staging/mina/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Wed Apr  3 11:31:50 2019
@@ -1 +1 @@
-1856869
+1856870

Modified: 
websites/staging/mina/trunk/content/mina-project/technical-documentation/message-flow.html
==============================================================================
--- 
websites/staging/mina/trunk/content/mina-project/technical-documentation/message-flow.html
 (original)
+++ 
websites/staging/mina/trunk/content/mina-project/technical-documentation/message-flow.html
 Wed Apr  3 11:31:50 2019
@@ -169,149 +169,155 @@ h2:hover > .headerlink, h3:hover > .head
 <h1 id="message-flow">Message flow<a class="headerlink" href="#message-flow" 
title="Permanent link">&para;</a></h1>
 <p>When a selector receives some <em>OP_READ</em> event, the associated 
<em>IoProcessor</em> is awaken and starts to process this event. It all starts 
with reading the channel, then pushing the read data through the filter chain 
down to the <em>IoHandler</em> (aka, the application). If the application 
decides to write back a response, it goes through the chain again, 
andultimately the data to be pushed into the channel is pushed into a queue 
(<em>writeRequestQueue), then the stack is unfolled, down to the 
_IoProcessor</em>, which pops the data from the queue and writes it into the 
channel.</p>
 <p>Here is the representation of such a flow, where the <em>SslFilter</em> has 
been included (we will come back to it later)</p>
-<p>::: text
-                     +-------------------+
-                     |     IoAcceptor    |
-                     |    +---------+    |
-                     |    | Select  |    |
-                     |    +----+----+    |
-                     |         |         |
-                     +---------+---------+
-                               .                                           
flush/
-  +---------+                  .                  +---------+              
wakeup
-  | Channel &lt;-----read------+  .  +-----write-----&gt; Channel |            
  +----+
-  +---------+               |  |  |               +---------+              |   
 |
-                        +---+--v--+---+                               
+----v----+---+
-                        |             |       writeRequestQueue       |        
     |
-                        | IoProcessor |       +-+-+-+-+-+-+-+-+       | 
IoProcessor |
-                        |             &lt;- pop -+ | | | | | | | &lt;- put- |  
           |
-                        +---+-----^---+       +-+-+-+-+-+-+-+-+       
+---------^---+
-                            |     .                                       .    
 |
-        fireMessageReceived |     .                                       .    
 | write
-                            |     .                                       .    
 |
-                        +---v---------+                               
+---v-----+---+
-                        | HeadFilter  |                               | 
HeadFilter  &lt;---------------filterWrite---------------+
-                        +---+-----^---+                               
+-------------+                                         |
-                            |     .                                       .    
                                         +-----+------+
-            MessageReceived |     .                                       .    
  +----------flushScheduledEvents--------&gt; SslHandler |
-                            |     .                                       .    
  |                                      +-----+------+
-                        +---v---------+                               
+---v------+--+                                         |
-                        | SslFilter   |                               | 
SslFilter   +----put----+                             |
-                        +---+-----^---+                               
+---------^---+           |                             |
-                            |     .                                       .    
 |               |  filterWriteQueue           |
-            MessageReceived |     .                                       .    
 | filterWrite   |  +-+-+-+-+-+-+-+-+          |
-                            |     .                                       .    
 |               +--&gt; | | | | | | | &lt;----pop---+
-                        +---v---------+                               
+---v---------+              +-+-+-+-+-+-+-+-+
-                        | <filters>   |                               | 
<filters>   |
-                        +---+-----v---+                               
+-------------+
-                            |     .                                       .    
 |
-            MessageReceived |     .                                       .    
 | filterWrite
-                            |     .                                       .    
 |
-                        +---v---------+                               
+---v-----+---+
-                        | TailFilter  |                               | 
TailFilter  |
-                        +---+-----^---+                               
+---------^---+
-                            |     .                                       .    
 |
-            MessageReceived |     .                                       .    
 | fireFilterWrite
-                            |     .                                       .    
 |
-                        +---v---------+                                   .    
 |
-                        | IoHandler   |                                   .    
 |
-                        +---+-----^---+                                   .    
 |
-                            |     .                                       .    
 |
-                            |     .........................................    
 |
-                            |                                                  
 |
-                            
+-------------------sessionWrite--------------------+</p>
+<div class="codehilite"><pre>                   +-------------------+
+                   |     IoAcceptor    |
+                   |    +---------+    |
+                   |    | Select  |    |
+                   |    +----+----+    |
+                   |         |         |
+                   +---------+---------+
+                             .                                           flush/
++---------+                  .                  +---------+              wakeup
+| Channel &lt;-----read------+  .  +-----write-----&gt; Channel |              
+----+
++---------+               |  |  |               +---------+              |    |
+                      +---+--v--+---+                               
+----v----+---+
+                      |             |       writeRequestQueue       |          
   |
+                      | IoProcessor |       +-+-+-+-+-+-+-+-+       | 
IoProcessor |
+                      |             &lt;- pop -+ | | | | | | | &lt;- put- |    
         |
+                      +---+-----^---+       +-+-+-+-+-+-+-+-+       
+---------^---+
+                          |     .                                       .     |
+      fireMessageReceived |     .                                       .     
| write
+                          |     .                                       .     |
+                      +---v---------+                               
+---v-----+---+
+                      | HeadFilter  |                               | 
HeadFilter  &lt;---------------filterWrite---------------+
+                      +---+-----^---+                               
+-------------+                                         |
+                          |     .                                       .      
                                       +-----+------+
+          MessageReceived |     .                                       .      
+----------flushScheduledEvents--------&gt; SslHandler |
+                          |     .                                       .      
|                                      +-----+------+
+                      +---v---------+                               
+---v------+--+                                         |
+                      | SslFilter   |                               | 
SslFilter   +----put----+                             |
+                      +---+-----^---+                               
+---------^---+           |                             |
+                          |     .                                       .     
|               |  filterWriteQueue           |
+          MessageReceived |     .                                       .     
| filterWrite   |  +-+-+-+-+-+-+-+-+          |
+                          |     .                                       .     
|               +--&gt; | | | | | | | &lt;----pop---+
+                      +---v---------+                               
+---v---------+              +-+-+-+-+-+-+-+-+
+                      | &lt;filters&gt;   |                               | 
&lt;filters&gt;   |
+                      +---+-----v---+                               
+-------------+
+                          |     .                                       .     |
+          MessageReceived |     .                                       .     
| filterWrite
+                          |     .                                       .     |
+                      +---v---------+                               
+---v-----+---+
+                      | TailFilter  |                               | 
TailFilter  |
+                      +---+-----^---+                               
+---------^---+
+                          |     .                                       .     |
+          MessageReceived |     .                                       .     
| fireFilterWrite
+                          |     .                                       .     |
+                      +---v---------+                                   .     |
+                      | IoHandler   |                                   .     |
+                      +---+-----^---+                                   .     |
+                          |     .                                       .     |
+                          |     .........................................     |
+                          |                                                   |
+                          +-------------------sessionWrite--------------------+
+</pre></div>
+
+
 <p>For instance, if we consider an application which filter chain contains the 
<em>MdcInjectionFilter</em>, <em>SslFilter</em>, <em>CompressionFilter</em>, 
<em>ProtocolCodecFilter</em>, <em>LoggingFilter</em>, we end uo with a stack of 
77 calls, which needs to be emptied before the response can eventually be 
written. Here is the stack (in reverse order, the latest call on top of it):</p>
-<p>::: text
-  NioProcessor(AbstractPollingIoProcessor<S>).flush(S) line: 449<br />
-  NioProcessor(AbstractPollingIoProcessor<S>).write(S, WriteRequest) line: 
436<br />
-  NioProcessor(AbstractPollingIoProcessor<S>).write(IoSession, WriteRequest) 
line: 68 
-  SimpleIoProcessorPool<S>.write(S, WriteRequest) line: 278 
-  SimpleIoProcessorPool<S>.write(IoSession, WriteRequest) line: 80<br />
-  DefaultIoFilterChain$HeadFilter.filterWrite(IoFilter$NextFilter, IoSession, 
WriteRequest) line: 914 
-  DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753<br />
-  DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146<br />
-  IoFilterEvent.fire() line: 131<br />
-  MdcInjectionFilter.filter(IoFilterEvent) line: 162<br />
-  MdcInjectionFilter(CommonEventFilter).filterWrite(IoFilter$NextFilter, 
IoSession, WriteRequest) line: 68<br />
-  DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753<br />
-  DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146<br />
-  SslHandler.flushScheduledEvents() line: 330 
-  SslFilter.filterWrite(IoFilter$NextFilter, IoSession, WriteRequest) line: 
671 
-  DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753<br />
-  DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146<br />
-  CompressionFilter.filterWrite(IoFilter$NextFilter, IoSession, WriteRequest) 
line: 152 
-  DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753<br />
-  DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146<br />
-  ProtocolCodecFilter.filterWrite(IoFilter$NextFilter, IoSession, 
WriteRequest) line: 340 
-  DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753<br />
-  DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146<br />
-  LoggingFilter(IoFilterAdapter).filterWrite(IoFilter$NextFilter, IoSession, 
WriteRequest) line: 138<br />
-  DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753<br />
-  DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146<br />
-  
DefaultIoFilterChain$TailFilter(IoFilterAdapter).filterWrite(IoFilter$NextFilter,
 IoSession, WriteRequest) line: 138<br />
-  DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753<br />
-  DefaultIoFilterChain.fireFilterWrite(WriteRequest) line: 746<br />
-  NioSocketSession(AbstractIoSession).write(Object, SocketAddress) line: 
570<br />
-  NioSocketSession(AbstractIoSession).write(Object) line: 515 
-  ChatProtocolHandler.messageReceived(IoSession, Object) line: 106<br />
-  DefaultIoFilterChain$TailFilter.messageReceived(IoFilter$NextFilter, 
IoSession, Object) line: 1015<br />
-  DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650<br />
-  DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 
1128<br />
-  LoggingFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) line: 
208 
-  DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650<br />
-  DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 
1128<br />
-  ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(IoFilter$NextFilter, 
IoSession) line: 413 
-  ProtocolCodecFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) 
line: 257 
-  DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650<br />
-  DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 
1128<br />
-  CompressionFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) 
line: 169 
-  DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650<br />
-  DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 
1128<br />
-  SslHandler.flushScheduledEvents() line: 335 
-  SslFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) line: 553 
-  DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650<br />
-  DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 
1128<br />
-  IoFilterEvent.fire() line: 105<br />
-  MdcInjectionFilter.filter(IoFilterEvent) line: 162<br />
-  MdcInjectionFilter(CommonEventFilter).messageReceived(IoFilter$NextFilter, 
IoSession, Object) line: 84<br />
-  DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650<br />
-  DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
-  DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 
1128<br />
-  
DefaultIoFilterChain$HeadFilter(IoFilterAdapter).messageReceived(IoFilter$NextFilter,
 IoSession, Object) line: 122<br />
-  DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650<br />
-  DefaultIoFilterChain.fireMessageReceived(Object) line: 643<br />
-  NioProcessor(AbstractPollingIoProcessor<S>).read(S) line: 539 
-  AbstractPollingIoProcessor<S>.access$1200(AbstractPollingIoProcessor, 
AbstractIoSession) line: 68 
-  AbstractPollingIoProcessor$Processor.process(S) line: 1223<br />
-  AbstractPollingIoProcessor$Processor.process() line: 1212 
-  AbstractPollingIoProcessor$Processor.run() line: 683<br />
-  NamePreservingRunnable.run() line: 64 
-  ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1149<br />
-  ThreadPoolExecutor$Worker.run() line: 624 
-  Thread.run() line: 748  </p>
+<div 
class="codehilite"><pre>NioProcessor(AbstractPollingIoProcessor&lt;S&gt;).flush(S)
 line: 449  
+NioProcessor(AbstractPollingIoProcessor&lt;S&gt;).write(S, WriteRequest) line: 
436  
+NioProcessor(AbstractPollingIoProcessor&lt;S&gt;).write(IoSession, 
WriteRequest) line: 68 
+SimpleIoProcessorPool&lt;S&gt;.write(S, WriteRequest) line: 278 
+SimpleIoProcessorPool&lt;S&gt;.write(IoSession, WriteRequest) line: 80  
+DefaultIoFilterChain$HeadFilter.filterWrite(IoFilter$NextFilter, IoSession, 
WriteRequest) line: 914 
+DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753  
+DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
+DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146  
+IoFilterEvent.fire() line: 131  
+MdcInjectionFilter.filter(IoFilterEvent) line: 162  
+MdcInjectionFilter(CommonEventFilter).filterWrite(IoFilter$NextFilter, 
IoSession, WriteRequest) line: 68  
+DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753  
+DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
+DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146  
+SslHandler.flushScheduledEvents() line: 330 
+SslFilter.filterWrite(IoFilter$NextFilter, IoSession, WriteRequest) line: 671 
+DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753  
+DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
+DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146  
+CompressionFilter.filterWrite(IoFilter$NextFilter, IoSession, WriteRequest) 
line: 152 
+DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753  
+DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
+DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146  
+ProtocolCodecFilter.filterWrite(IoFilter$NextFilter, IoSession, WriteRequest) 
line: 340 
+DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753  
+DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
+DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146  
+LoggingFilter(IoFilterAdapter).filterWrite(IoFilter$NextFilter, IoSession, 
WriteRequest) line: 138  
+DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753  
+DefaultIoFilterChain.access$1500(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, WriteRequest) line: 49 
+DefaultIoFilterChain$EntryImpl$1.filterWrite(IoSession, WriteRequest) line: 
1146  
+DefaultIoFilterChain$TailFilter(IoFilterAdapter).filterWrite(IoFilter$NextFilter,
 IoSession, WriteRequest) line: 138  
+DefaultIoFilterChain.callPreviousFilterWrite(IoFilterChain$Entry, IoSession, 
WriteRequest) line: 753  
+DefaultIoFilterChain.fireFilterWrite(WriteRequest) line: 746  
+NioSocketSession(AbstractIoSession).write(Object, SocketAddress) line: 570  
+NioSocketSession(AbstractIoSession).write(Object) line: 515 
+ChatProtocolHandler.messageReceived(IoSession, Object) line: 106  
+DefaultIoFilterChain$TailFilter.messageReceived(IoFilter$NextFilter, 
IoSession, Object) line: 1015  
+DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650  
+DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
+DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 1128 
 
+LoggingFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) line: 
208 
+DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650  
+DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
+DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 1128 
 
+ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(IoFilter$NextFilter, 
IoSession) line: 413 
+ProtocolCodecFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) 
line: 257 
+DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650  
+DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
+DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 1128 
 
+CompressionFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) 
line: 169 
+DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650  
+DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
+DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 1128 
 
+SslHandler.flushScheduledEvents() line: 335 
+SslFilter.messageReceived(IoFilter$NextFilter, IoSession, Object) line: 553 
+DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650  
+DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
+DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 1128 
 
+IoFilterEvent.fire() line: 105  
+MdcInjectionFilter.filter(IoFilterEvent) line: 162  
+MdcInjectionFilter(CommonEventFilter).messageReceived(IoFilter$NextFilter, 
IoSession, Object) line: 84  
+DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650  
+DefaultIoFilterChain.access$1300(DefaultIoFilterChain, IoFilterChain$Entry, 
IoSession, Object) line: 49 
+DefaultIoFilterChain$EntryImpl$1.messageReceived(IoSession, Object) line: 1128 
 
+DefaultIoFilterChain$HeadFilter(IoFilterAdapter).messageReceived(IoFilter$NextFilter,
 IoSession, Object) line: 122  
+DefaultIoFilterChain.callNextMessageReceived(IoFilterChain$Entry, IoSession, 
Object) line: 650  
+DefaultIoFilterChain.fireMessageReceived(Object) line: 643  
+NioProcessor(AbstractPollingIoProcessor&lt;S&gt;).read(S) line: 539 
+AbstractPollingIoProcessor&lt;S&gt;.access$1200(AbstractPollingIoProcessor, 
AbstractIoSession) line: 68 
+AbstractPollingIoProcessor$Processor.process(S) line: 1223  
+AbstractPollingIoProcessor$Processor.process() line: 1212 
+AbstractPollingIoProcessor$Processor.run() line: 683  
+NamePreservingRunnable.run() line: 64 
+ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1149  
+ThreadPoolExecutor$Worker.run() line: 624 
+Thread.run() line: 748
+</pre></div>
+
+
 <p>Writing the data is done when we are back in the 
AbstractPollingIoProcessor$Processor.run() call. Here is the stack for that 
action :</p>
-<p>::: text
-  NioProcessor.write(NioSession, IoBuffer, int) line: 384 
-  NioProcessor.write(AbstractIoSession, IoBuffer, int) line: 47 
-  AbstractPollingIoProcessor$Processor.writeBuffer(S, WriteRequest, boolean, 
int, long) line: 1107<br />
-  AbstractPollingIoProcessor$Processor.flushNow(S, long) line: 994<br />
-  AbstractPollingIoProcessor$Processor.flush(long) line: 921<br />
-  AbstractPollingIoProcessor$Processor.run() line: 688<br />
-  NamePreservingRunnable.run() line: 64 
-  ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1149<br />
-  ThreadPoolExecutor$Worker.run() line: 624 
-  Thread.run() line: 748  </p>
+<div class="codehilite"><pre>NioProcessor.write(NioSession, IoBuffer, int) 
line: 384 
+NioProcessor.write(AbstractIoSession, IoBuffer, int) line: 47 
+AbstractPollingIoProcessor$Processor.writeBuffer(S, WriteRequest, boolean, 
int, long) line: 1107  
+AbstractPollingIoProcessor$Processor.flushNow(S, long) line: 994  
+AbstractPollingIoProcessor$Processor.flush(long) line: 921  
+AbstractPollingIoProcessor$Processor.run() line: 688  
+NamePreservingRunnable.run() line: 64 
+ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1149  
+ThreadPoolExecutor$Worker.run() line: 624 
+Thread.run() line: 748
+</pre></div>
+
+
 <h2 id="the-sslfilter-implementation">The SslFilter implementation<a 
class="headerlink" href="#the-sslfilter-implementation" title="Permanent 
link">&para;</a></h2>
 <p>As we can see,the <em>SslFilter</em> never calls the next filter. It 
delegates that to the <em>SslHandler</em> class. The trick is that it uses a 
queue to store encrypted messages, which will wait until the message is fully 
encrypted before flushing them. The rational is that a message can be pretty 
big, and teh <strong>SSL/TLS</strong> protocol just allows limited encrypted 
data blocks (around 16k), so it keeps each block of encrypted data into the 
queue temporarily.</p>
 <h1 id="room-for-improvements">Room for improvements<a class="headerlink" 
href="#room-for-improvements" title="Permanent link">&para;</a></h1>
@@ -325,12 +331,14 @@ Typically, adding a <em>SslFilter</em> i
 <p>For messages received <em>before</em> the addition of the 
<em>SslFilter</em>, but still in the chain, we should ditch them for the exact 
same reason.</p>
 <p>Bottom line, this is a application issue, and should be handled by the 
application, because <strong>MINA</strong> can't deal with all the possible. 
starties in place of the application.</p>
 <p>That being said, we can use the <em>IoProcessor</em> as a controller. It 
would b eits responsability to propagate events from one filter to the other, 
using such a loop:</p>
-<p>::: text
-  for each filter in the chain 
-    do
-      propagate the event to the filter with the previous result
-      store the result 
-    done</p>
+<div class="codehilite"><pre>for each filter in the chain 
+  do
+    propagate the event to the filter with the previous result
+    store the result 
+  done
+</pre></div>
+
+
 <p>What we call the 'result' is just the transformed data. Typically, when 
calling the <em>ProtocolCodecFilter.messageReceived</em> event, the result will 
be the decoded message, not the <em>IoBuffer</em> (or whatever) input. This 
will be passed to the next filter (remember that the 
<em>IoFilter.messageReceived</em> method takes an <em>Object</em> as a 
parameter).</p>
 
 


Reply via email to