directory-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From trus...@apache.org
Subject svn commit: r359355 [4/4] - in /directory/network/trunk: ./ src/java/org/apache/mina/common/ src/java/org/apache/mina/transport/socket/nio/support/ src/java/org/apache/mina/transport/vmpipe/support/ src/test/org/apache/mina/common/ xdocs/
Date Wed, 28 Dec 2005 02:49:51 GMT
Modified: directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeFilterChain.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeFilterChain.java?rev=359355&r1=359354&r2=359355&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeFilterChain.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/transport/vmpipe/support/VmPipeFilterChain.java Tue Dec 27 18:49:31 2005
@@ -1,106 +1,106 @@
-package org.apache.mina.transport.vmpipe.support;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.CloseFuture;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.IoFilter.WriteRequest;
-import org.apache.mina.common.support.AbstractIoFilterChain;
-
-public class VmPipeFilterChain extends AbstractIoFilterChain {
-
-    public VmPipeFilterChain( IoSession session )
-    {
-        super( session );
-    }
-
-    public void messageReceived( IoSession session, Object message )
-    {
-        VmPipeSessionImpl s = ( VmPipeSessionImpl ) session;
-        synchronized( s.lock )
-        {
-            if( !s.getTrafficMask().isReadable() )
-            {
-                synchronized( s.pendingDataQueue )
-                {
-                    s.pendingDataQueue.push( message );
-                }
-            }
-            else
-            {
-                int byteCount = 1;
-                if( message instanceof ByteBuffer )
-                {
-                    byteCount = ( ( ByteBuffer ) message ).remaining();
-                }
-                
-                s.increaseReadBytes( byteCount );
-                
-                super.messageReceived( s, message );
-            }
-        }
-    }
-
-    protected void doWrite( IoSession session, WriteRequest writeRequest )
-    {
-        VmPipeSessionImpl s = ( VmPipeSessionImpl ) session;
-        synchronized( s.lock )
-        {
-            if( s.isConnected() )
-            {
-                
-                if( !s.getTrafficMask().isWritable() )
-                {
-                    synchronized( s.pendingDataQueue )
-                    {
-                        s.pendingDataQueue.push( writeRequest );
-                    }
-                }
-                else
-                {
-                
-                    Object message = writeRequest.getMessage();
-                    
-                    int byteCount = 1;
-                    Object messageCopy = message;
-                    if( message instanceof ByteBuffer )
-                    {
-                        ByteBuffer rb = ( ByteBuffer ) message;
-                        byteCount = rb.remaining();
-                        ByteBuffer wb = ByteBuffer.allocate( rb.remaining() );
-                        wb.put( rb );
-                        wb.flip();
-                        messageCopy = wb;
-                    }
-                    
-                    s.increaseWrittenBytes( byteCount );
-                    s.increaseWrittenWriteRequests();
-    
-                    ( ( VmPipeFilterChain ) s.getFilterChain() ).messageSent( s, message );
-                    ( ( VmPipeFilterChain ) s.remoteSession.getFilterChain() )
-                                .messageReceived( s.remoteSession, messageCopy );
-                    
-                    writeRequest.getFuture().setWritten( true );
-                }
-            }
-            else 
-            {
-                writeRequest.getFuture().setWritten( false );
-            }
-        }
-    }
-
-    protected void doClose( IoSession session, CloseFuture closeFuture )
-    {
-        VmPipeSessionImpl s = ( VmPipeSessionImpl ) session;
-        synchronized( s.lock )
-        {
-            if( !closeFuture.isClosed() )
-            {
-                ( ( VmPipeFilterChain ) s.getFilterChain() ).sessionClosed( session );
-                closeFuture.setClosed();
-                s.remoteSession.close();
-            }
-        }
-    }
-    
-}
+package org.apache.mina.transport.vmpipe.support;
+
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.CloseFuture;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.IoFilter.WriteRequest;
+import org.apache.mina.common.support.AbstractIoFilterChain;
+
+public class VmPipeFilterChain extends AbstractIoFilterChain {
+
+    public VmPipeFilterChain( IoSession session )
+    {
+        super( session );
+    }
+
+    public void messageReceived( IoSession session, Object message )
+    {
+        VmPipeSessionImpl s = ( VmPipeSessionImpl ) session;
+        synchronized( s.lock )
+        {
+            if( !s.getTrafficMask().isReadable() )
+            {
+                synchronized( s.pendingDataQueue )
+                {
+                    s.pendingDataQueue.push( message );
+                }
+            }
+            else
+            {
+                int byteCount = 1;
+                if( message instanceof ByteBuffer )
+                {
+                    byteCount = ( ( ByteBuffer ) message ).remaining();
+                }
+                
+                s.increaseReadBytes( byteCount );
+                
+                super.messageReceived( s, message );
+            }
+        }
+    }
+
+    protected void doWrite( IoSession session, WriteRequest writeRequest )
+    {
+        VmPipeSessionImpl s = ( VmPipeSessionImpl ) session;
+        synchronized( s.lock )
+        {
+            if( s.isConnected() )
+            {
+                
+                if( !s.getTrafficMask().isWritable() )
+                {
+                    synchronized( s.pendingDataQueue )
+                    {
+                        s.pendingDataQueue.push( writeRequest );
+                    }
+                }
+                else
+                {
+                
+                    Object message = writeRequest.getMessage();
+                    
+                    int byteCount = 1;
+                    Object messageCopy = message;
+                    if( message instanceof ByteBuffer )
+                    {
+                        ByteBuffer rb = ( ByteBuffer ) message;
+                        byteCount = rb.remaining();
+                        ByteBuffer wb = ByteBuffer.allocate( rb.remaining() );
+                        wb.put( rb );
+                        wb.flip();
+                        messageCopy = wb;
+                    }
+                    
+                    s.increaseWrittenBytes( byteCount );
+                    s.increaseWrittenWriteRequests();
+    
+                    ( ( VmPipeFilterChain ) s.getFilterChain() ).messageSent( s, message );
+                    ( ( VmPipeFilterChain ) s.remoteSession.getFilterChain() )
+                                .messageReceived( s.remoteSession, messageCopy );
+                    
+                    writeRequest.getFuture().setWritten( true );
+                }
+            }
+            else 
+            {
+                writeRequest.getFuture().setWritten( false );
+            }
+        }
+    }
+
+    protected void doClose( IoSession session, CloseFuture closeFuture )
+    {
+        VmPipeSessionImpl s = ( VmPipeSessionImpl ) session;
+        synchronized( s.lock )
+        {
+            if( !closeFuture.isClosed() )
+            {
+                ( ( VmPipeFilterChain ) s.getFilterChain() ).sessionClosed( session );
+                closeFuture.setClosed();
+                s.remoteSession.close();
+            }
+        }
+    }
+    
+}

Modified: directory/network/trunk/src/test/org/apache/mina/common/DefaultIoFilterChainBuilderTest.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/test/org/apache/mina/common/DefaultIoFilterChainBuilderTest.java?rev=359355&r1=359354&r2=359355&view=diff
==============================================================================
--- directory/network/trunk/src/test/org/apache/mina/common/DefaultIoFilterChainBuilderTest.java (original)
+++ directory/network/trunk/src/test/org/apache/mina/common/DefaultIoFilterChainBuilderTest.java Tue Dec 27 18:49:31 2005
@@ -1,153 +1,153 @@
-/*
- *   @(#) $Id: ExceptionMonitor.java 326586 2005-10-19 15:50:29Z trustin $
- *
- *   Copyright 2004 The Apache Software Foundation
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- */
-package org.apache.mina.common;
-
-import java.util.Iterator;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.apache.mina.common.IoFilterChain.Entry;
-
-/**
- * Tests {@link DefaultIoFilterChainBuilder}.
- *
- * @author The Apache Directory Project (dev@directory.apache.org)
- * @version $Rev$, $Date$
- */
-public class DefaultIoFilterChainBuilderTest extends TestCase
-{
-    public static void main( String[] args )
-    {
-        junit.textui.TestRunner.run( DefaultIoFilterChainBuilderTest.class );
-    }
-
-    protected void setUp() throws Exception
-    {
-    }
-
-    protected void tearDown() throws Exception
-    {
-    }
-    
-    public void testAdd() throws Exception
-    {
-        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
-        
-        builder.addFirst( "A", new IoFilterAdapter() );
-        builder.addLast( "B", new IoFilterAdapter() );
-        builder.addFirst( "C", new IoFilterAdapter() );
-        builder.addLast( "D", new IoFilterAdapter() );
-        builder.addBefore( "B", "E", new IoFilterAdapter() );
-        builder.addBefore( "C", "F", new IoFilterAdapter() );
-        builder.addAfter( "B", "G", new IoFilterAdapter() );
-        builder.addAfter( "D", "H", new IoFilterAdapter() );
-        
-        String actual = "";
-        for( Iterator i = builder.getAll().iterator(); i.hasNext(); ) 
-        {
-            Entry e = ( Entry ) i.next();
-            actual += e.getName();
-        }
-        
-        Assert.assertEquals( "FCAEBGDH", actual );
-    }
-    
-    public void testGet() throws Exception
-    {
-        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
-        
-        IoFilter filterA = new IoFilterAdapter();
-        IoFilter filterB = new IoFilterAdapter();
-        IoFilter filterC = new IoFilterAdapter();
-        IoFilter filterD = new IoFilterAdapter();
-        
-        builder.addFirst( "A", filterA );
-        builder.addLast( "B", filterB );
-        builder.addBefore( "B", "C", filterC );
-        builder.addAfter( "A", "D", filterD );
-        
-        Assert.assertSame( filterA, builder.get( "A" ) );
-        Assert.assertSame( filterB, builder.get( "B" ) );
-        Assert.assertSame( filterC, builder.get( "C" ) );
-        Assert.assertSame( filterD, builder.get( "D" ) );
-    }
-    
-    public void testRemove() throws Exception
-    {
-        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
-        
-        builder.addLast( "A", new IoFilterAdapter() );
-        builder.addLast( "B", new IoFilterAdapter() );
-        builder.addLast( "C", new IoFilterAdapter() );
-        builder.addLast( "D", new IoFilterAdapter() );
-        builder.addLast( "E", new IoFilterAdapter() );
-        
-        builder.remove( "A" );
-        builder.remove( "E" );
-        builder.remove( "C" );
-        builder.remove( "B" );
-        builder.remove( "D" );
-        
-        Assert.assertEquals( 0, builder.getAll().size() );
-    }
-    
-    public void testClear() throws Exception
-    {
-        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
-        
-        builder.addLast( "A", new IoFilterAdapter() );
-        builder.addLast( "B", new IoFilterAdapter() );
-        builder.addLast( "C", new IoFilterAdapter() );
-        builder.addLast( "D", new IoFilterAdapter() );
-        builder.addLast( "E", new IoFilterAdapter() );
-        
-        builder.clear();
-        
-        Assert.assertEquals( 0, builder.getAll().size() );
-    }
-    
-    public void testToString()
-    {
-        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
-        
-        // When the chain is empty
-        Assert.assertEquals( "{ empty }", builder.toString() );
-        
-        // When there's one filter
-        builder.addLast( "A", new IoFilterAdapter()
-        {
-            public String toString()
-            {
-                return "B";
-            }
-        } );
-        Assert.assertEquals( "{ (A:B) }", builder.toString() );
-        
-        // When there are two
-        builder.addLast( "C", new IoFilterAdapter()
-        {
-            public String toString()
-            {
-                return "D";
-            }
-        } );
-        Assert.assertEquals( "{ (A:B), (C:D) }", builder.toString() );
-    }
-}
+/*
+ *   @(#) $Id: ExceptionMonitor.java 326586 2005-10-19 15:50:29Z trustin $
+ *
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.mina.common;
+
+import java.util.Iterator;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.mina.common.IoFilterChain.Entry;
+
+/**
+ * Tests {@link DefaultIoFilterChainBuilder}.
+ *
+ * @author The Apache Directory Project (dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class DefaultIoFilterChainBuilderTest extends TestCase
+{
+    public static void main( String[] args )
+    {
+        junit.textui.TestRunner.run( DefaultIoFilterChainBuilderTest.class );
+    }
+
+    protected void setUp() throws Exception
+    {
+    }
+
+    protected void tearDown() throws Exception
+    {
+    }
+    
+    public void testAdd() throws Exception
+    {
+        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
+        
+        builder.addFirst( "A", new IoFilterAdapter() );
+        builder.addLast( "B", new IoFilterAdapter() );
+        builder.addFirst( "C", new IoFilterAdapter() );
+        builder.addLast( "D", new IoFilterAdapter() );
+        builder.addBefore( "B", "E", new IoFilterAdapter() );
+        builder.addBefore( "C", "F", new IoFilterAdapter() );
+        builder.addAfter( "B", "G", new IoFilterAdapter() );
+        builder.addAfter( "D", "H", new IoFilterAdapter() );
+        
+        String actual = "";
+        for( Iterator i = builder.getAll().iterator(); i.hasNext(); ) 
+        {
+            Entry e = ( Entry ) i.next();
+            actual += e.getName();
+        }
+        
+        Assert.assertEquals( "FCAEBGDH", actual );
+    }
+    
+    public void testGet() throws Exception
+    {
+        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
+        
+        IoFilter filterA = new IoFilterAdapter();
+        IoFilter filterB = new IoFilterAdapter();
+        IoFilter filterC = new IoFilterAdapter();
+        IoFilter filterD = new IoFilterAdapter();
+        
+        builder.addFirst( "A", filterA );
+        builder.addLast( "B", filterB );
+        builder.addBefore( "B", "C", filterC );
+        builder.addAfter( "A", "D", filterD );
+        
+        Assert.assertSame( filterA, builder.get( "A" ) );
+        Assert.assertSame( filterB, builder.get( "B" ) );
+        Assert.assertSame( filterC, builder.get( "C" ) );
+        Assert.assertSame( filterD, builder.get( "D" ) );
+    }
+    
+    public void testRemove() throws Exception
+    {
+        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
+        
+        builder.addLast( "A", new IoFilterAdapter() );
+        builder.addLast( "B", new IoFilterAdapter() );
+        builder.addLast( "C", new IoFilterAdapter() );
+        builder.addLast( "D", new IoFilterAdapter() );
+        builder.addLast( "E", new IoFilterAdapter() );
+        
+        builder.remove( "A" );
+        builder.remove( "E" );
+        builder.remove( "C" );
+        builder.remove( "B" );
+        builder.remove( "D" );
+        
+        Assert.assertEquals( 0, builder.getAll().size() );
+    }
+    
+    public void testClear() throws Exception
+    {
+        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
+        
+        builder.addLast( "A", new IoFilterAdapter() );
+        builder.addLast( "B", new IoFilterAdapter() );
+        builder.addLast( "C", new IoFilterAdapter() );
+        builder.addLast( "D", new IoFilterAdapter() );
+        builder.addLast( "E", new IoFilterAdapter() );
+        
+        builder.clear();
+        
+        Assert.assertEquals( 0, builder.getAll().size() );
+    }
+    
+    public void testToString()
+    {
+        DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
+        
+        // When the chain is empty
+        Assert.assertEquals( "{ empty }", builder.toString() );
+        
+        // When there's one filter
+        builder.addLast( "A", new IoFilterAdapter()
+        {
+            public String toString()
+            {
+                return "B";
+            }
+        } );
+        Assert.assertEquals( "{ (A:B) }", builder.toString() );
+        
+        // When there are two
+        builder.addLast( "C", new IoFilterAdapter()
+        {
+            public String toString()
+            {
+                return "D";
+            }
+        } );
+        Assert.assertEquals( "{ (A:B), (C:D) }", builder.toString() );
+    }
+}

Modified: directory/network/trunk/xdocs/features.xml
URL: http://svn.apache.org/viewcvs/directory/network/trunk/xdocs/features.xml?rev=359355&r1=359354&r2=359355&view=diff
==============================================================================
--- directory/network/trunk/xdocs/features.xml (original)
+++ directory/network/trunk/xdocs/features.xml Tue Dec 27 18:49:31 2005
@@ -1,44 +1,44 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document>
-  <properties>
-    <author email="trustin@apache.org">Trustin Lee</author>
-    <title>Features</title>
-  </properties>
-
-  <body>
-    <section name="Features">
-      <p>
-        MINA is a simple yet full-featured network application framework
-        which provides:
-        <ul>
-          <li>Unified API for various transport types:
-            <ul>
-              <li>TCP/IP</li>
-    			    <li>UDP/IP</li>
-              <li>In-VM pipe communication</li>
-              <li>You can implement your own!</li>
-            </ul></li>
-          <li>Low-level and high-level API:
-		        <ul>
-              <li>Low-level: uses ByteBuffers</li>
-    			    <li>High-level: uses user-defined message objects and codecs</li>
-      			</ul></li>
-  		    <li>Stream-based I/O support via <code>StreamIoHandler</code></li>
-    	    <li>Filter interface as an extension point; similar to <a href="http://java.sun.com/products/servlet/Filters.html">Servlet filters</a>
-		        <ul>
-        	    <li>SSL support via <code>SSLFilter</code> thanks to Java 5 <code>SSLEngine</code></li>
-              <li>Thread pools are implemented as filters so that users can customize thread model.</li>
-            </ul></li>
-          <li>Unit testability using <a href="http://www.mockobjects.com/">mock objects</a>,</li>
-          <li>JMX managability, (coming soon)</li>
-          <li>Traffic throttling, (coming soon)</li>
-          <li>Overload shielding, (coming soon)</li>
-          <li>Integration with well known containers such as Spring
-            	and OSGi, (coming soon)</li>
-          <li>Smooth migration from Netty, a popular NIO framework.
-            	(See <a href="http://gleamynode.net/dev/tl-netty2-example-sumup/docs/">Netty Tutorial</a>)</li>
-        </ul>
-      </p>
-    </section>
-  </body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<document>
+  <properties>
+    <author email="trustin@apache.org">Trustin Lee</author>
+    <title>Features</title>
+  </properties>
+
+  <body>
+    <section name="Features">
+      <p>
+        MINA is a simple yet full-featured network application framework
+        which provides:
+        <ul>
+          <li>Unified API for various transport types:
+            <ul>
+              <li>TCP/IP</li>
+    			    <li>UDP/IP</li>
+              <li>In-VM pipe communication</li>
+              <li>You can implement your own!</li>
+            </ul></li>
+          <li>Low-level and high-level API:
+		        <ul>
+              <li>Low-level: uses ByteBuffers</li>
+    			    <li>High-level: uses user-defined message objects and codecs</li>
+      			</ul></li>
+  		    <li>Stream-based I/O support via <code>StreamIoHandler</code></li>
+    	    <li>Filter interface as an extension point; similar to <a href="http://java.sun.com/products/servlet/Filters.html">Servlet filters</a>
+		        <ul>
+        	    <li>SSL support via <code>SSLFilter</code> thanks to Java 5 <code>SSLEngine</code></li>
+              <li>Thread pools are implemented as filters so that users can customize thread model.</li>
+            </ul></li>
+          <li>Unit testability using <a href="http://www.mockobjects.com/">mock objects</a>,</li>
+          <li>JMX managability, (coming soon)</li>
+          <li>Traffic throttling, (coming soon)</li>
+          <li>Overload shielding, (coming soon)</li>
+          <li>Integration with well known containers such as Spring
+            	and OSGi, (coming soon)</li>
+          <li>Smooth migration from Netty, a popular NIO framework.
+            	(See <a href="http://gleamynode.net/dev/tl-netty2-example-sumup/docs/">Netty Tutorial</a>)</li>
+        </ul>
+      </p>
+    </section>
+  </body>
+</document>

Modified: directory/network/trunk/xdocs/getting_started.xml
URL: http://svn.apache.org/viewcvs/directory/network/trunk/xdocs/getting_started.xml?rev=359355&r1=359354&r2=359355&view=diff
==============================================================================
--- directory/network/trunk/xdocs/getting_started.xml (original)
+++ directory/network/trunk/xdocs/getting_started.xml Tue Dec 27 18:49:31 2005
@@ -1,84 +1,84 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document>
-  <properties>
-    <author email="trustin@apache.org">Trustin Lee</author>
-    <title>Getting Started</title>
-  </properties>
-
-  <body>
-    <section name="Getting Started">
-      <p>
-        Must-reads:
-        <ul>
-          <li>Introduction to MINA (from ApacheCon US 2005)
-            <ul>
-              <li><a href="mina.ppt" target="_blank">PPT version with animations</a></li>
-              <li><a href="mina.pdf" target="_blank">PDF version without animations</a></li>
-              <li><a href="demo.htm" target="_blank">Demo movie</a></li>
-            </ul>
-          </li>
-          <li><a href="http://wiki.apache.org/directory/MinaTutorial" target="_blank">MINA Tutorial</a></li>
-        </ul>
-      </p>
-      
-      <subsection name="Examples">
-        <p>
-          You'll learn faster with
-          <a target="_blank" href="xref-examples/index.html">examples</a>
-          referring to
-          <a target="_blank" href="apidocs/index.html">JavaDocs</a>.
-          <table>
-            <tr>
-              <th>Name</th>
-              <th>Feature it demonstrates</th>
-              <th>Side</th>
-            </tr>
-            <tr>
-              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/reverser/package-summary.html">Reverser</a></td>
-              <td>High-level protocol layer</td>
-              <td>Server</td>
-            </tr>
-            <tr>
-              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/sumup/package-summary.html">SumUp server</a></td>
-              <td>High-level protocol layer and DemuxingProtocolCodec</td>
-              <td>Both</td>
-            </tr>
-            <tr>
-              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/echoserver/package-summary.html">Echo server</a></td>
-              <td>Low-level I/O layer and SSL support</td>
-              <td>Server</td>
-            </tr>
-            <tr>
-              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/netcat/package-summary.html">NetCat</a></td>
-              <td>Low-level I/O layer</td>
-              <td>Client</td>
-            </tr>
-            <tr>
-              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/httpserver/package-summary.html">HTTP server</a></td>
-              <td>Stream-based synchronous I/O support.</td>
-              <td>Server</td>
-            </tr>
-            <tr>
-              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/tennis/package-summary.html">Tennis</a></td>
-              <td>In-VM pipe communication support in protocol layer.</td>
-              <td>Both</td>
-            </tr>
-          </table>
-        </p>
-      </subsection>
-      
-      <subsection name="Source code">
-        <p>
-          Source code:
-<source>
-$ svn co https://svn.apache.org/repos/asf/directory/network/trunk mina
-$ cd mina
-$ maven jar     # Build JAR
-$ maven site    # Generate documentation
-$ maven eclipse # Generate Eclipse project file if you want
-</source>
-        </p>
-      </subsection>
-    </section>
-  </body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<document>
+  <properties>
+    <author email="trustin@apache.org">Trustin Lee</author>
+    <title>Getting Started</title>
+  </properties>
+
+  <body>
+    <section name="Getting Started">
+      <p>
+        Must-reads:
+        <ul>
+          <li>Introduction to MINA (from ApacheCon US 2005)
+            <ul>
+              <li><a href="mina.ppt" target="_blank">PPT version with animations</a></li>
+              <li><a href="mina.pdf" target="_blank">PDF version without animations</a></li>
+              <li><a href="demo.htm" target="_blank">Demo movie</a></li>
+            </ul>
+          </li>
+          <li><a href="http://wiki.apache.org/directory/MinaTutorial" target="_blank">MINA Tutorial</a></li>
+        </ul>
+      </p>
+      
+      <subsection name="Examples">
+        <p>
+          You'll learn faster with
+          <a target="_blank" href="xref-examples/index.html">examples</a>
+          referring to
+          <a target="_blank" href="apidocs/index.html">JavaDocs</a>.
+          <table>
+            <tr>
+              <th>Name</th>
+              <th>Feature it demonstrates</th>
+              <th>Side</th>
+            </tr>
+            <tr>
+              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/reverser/package-summary.html">Reverser</a></td>
+              <td>High-level protocol layer</td>
+              <td>Server</td>
+            </tr>
+            <tr>
+              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/sumup/package-summary.html">SumUp server</a></td>
+              <td>High-level protocol layer and DemuxingProtocolCodec</td>
+              <td>Both</td>
+            </tr>
+            <tr>
+              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/echoserver/package-summary.html">Echo server</a></td>
+              <td>Low-level I/O layer and SSL support</td>
+              <td>Server</td>
+            </tr>
+            <tr>
+              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/netcat/package-summary.html">NetCat</a></td>
+              <td>Low-level I/O layer</td>
+              <td>Client</td>
+            </tr>
+            <tr>
+              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/httpserver/package-summary.html">HTTP server</a></td>
+              <td>Stream-based synchronous I/O support.</td>
+              <td>Server</td>
+            </tr>
+            <tr>
+              <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/tennis/package-summary.html">Tennis</a></td>
+              <td>In-VM pipe communication support in protocol layer.</td>
+              <td>Both</td>
+            </tr>
+          </table>
+        </p>
+      </subsection>
+      
+      <subsection name="Source code">
+        <p>
+          Source code:
+<source>
+$ svn co https://svn.apache.org/repos/asf/directory/network/trunk mina
+$ cd mina
+$ maven jar     # Build JAR
+$ maven site    # Generate documentation
+$ maven eclipse # Generate Eclipse project file if you want
+</source>
+        </p>
+      </subsection>
+    </section>
+  </body>
+</document>

Modified: directory/network/trunk/xdocs/history.xml
URL: http://svn.apache.org/viewcvs/directory/network/trunk/xdocs/history.xml?rev=359355&r1=359354&r2=359355&view=diff
==============================================================================
--- directory/network/trunk/xdocs/history.xml (original)
+++ directory/network/trunk/xdocs/history.xml Tue Dec 27 18:49:31 2005
@@ -1,51 +1,51 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document>
-  <properties>
-    <author email="trustin@apache.org">Trustin Lee</author>
-    <title>History</title>
-  </properties>
-
-  <body>
-    <section name="History">
-      <p>
-        by Trustin Lee (trustin at apache dot org)
-      </p>
-      <p>
-        In June 2004, I released a network application framework,
-        '<a href="http://gleamynode.net/dev/tl-netty2/docs/" target="_blank">Netty2</a>'.
-        It was the first network application framework that provides event-based
-        architecture in Java community.  It attracted network application
-        programmers because of its simplicity and ease of use.  As Netty2
-        community grows up, its problems also arose.  Netty2 didn’t work fine
-        with text protocols and had severe architectural flaw that prevents users
-        from using it for applications with many concurrent clients.
-      </p>
-      <p>
-        Quite large amount of information was collected about what users like
-        about Netty2 and what improvements they want from it for 6 months.  It
-        was clear they like its ease of use and unit-testability.  They wanted
-        support for UDP/IP and text protocols.  I had to invent cleaner, more
-        flexible, and more extensible API so that it is easy to learn yet
-        full-featured.
-      </p>
-      <p>
-        In September 2004, I joined the Apache Directory team to improve
-        another network application framework, Apache SEDA.  It was based
-        on generic event model with predefined stages.  I liked its main idea,
-        but its core was too abstract to call it a network application
-        framework.  I saw many highly abstract but dead frameworks claiming
-        they can do whatever users want, and it was one of them.  So I urged
-        to create a new network application framework ‘MINA’ which is based on
-        my idea on Netty2-NG.
-      </p>
-      <p>
-         Although there was some competition between next generations of
-         Apache SEDA, MINA has finally won and it is now the only network
-         application framework our team uses.  We have implemented several
-         complex protocols such as LDAP, Kerberos, DNS and NTP, and realized
-         that implementing protocols can be a lot of fun instead of tedious
-         coding.
-      </p>
-    </section>
-  </body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<document>
+  <properties>
+    <author email="trustin@apache.org">Trustin Lee</author>
+    <title>History</title>
+  </properties>
+
+  <body>
+    <section name="History">
+      <p>
+        by Trustin Lee (trustin at apache dot org)
+      </p>
+      <p>
+        In June 2004, I released a network application framework,
+        '<a href="http://gleamynode.net/dev/tl-netty2/docs/" target="_blank">Netty2</a>'.
+        It was the first network application framework that provides event-based
+        architecture in Java community.  It attracted network application
+        programmers because of its simplicity and ease of use.  As Netty2
+        community grows up, its problems also arose.  Netty2 didn’t work fine
+        with text protocols and had severe architectural flaw that prevents users
+        from using it for applications with many concurrent clients.
+      </p>
+      <p>
+        Quite large amount of information was collected about what users like
+        about Netty2 and what improvements they want from it for 6 months.  It
+        was clear they like its ease of use and unit-testability.  They wanted
+        support for UDP/IP and text protocols.  I had to invent cleaner, more
+        flexible, and more extensible API so that it is easy to learn yet
+        full-featured.
+      </p>
+      <p>
+        In September 2004, I joined the Apache Directory team to improve
+        another network application framework, Apache SEDA.  It was based
+        on generic event model with predefined stages.  I liked its main idea,
+        but its core was too abstract to call it a network application
+        framework.  I saw many highly abstract but dead frameworks claiming
+        they can do whatever users want, and it was one of them.  So I urged
+        to create a new network application framework ‘MINA’ which is based on
+        my idea on Netty2-NG.
+      </p>
+      <p>
+         Although there was some competition between next generations of
+         Apache SEDA, MINA has finally won and it is now the only network
+         application framework our team uses.  We have implemented several
+         complex protocols such as LDAP, Kerberos, DNS and NTP, and realized
+         that implementing protocols can be a lot of fun instead of tedious
+         coding.
+      </p>
+    </section>
+  </body>
+</document>

Modified: directory/network/trunk/xdocs/index.xml
URL: http://svn.apache.org/viewcvs/directory/network/trunk/xdocs/index.xml?rev=359355&r1=359354&r2=359355&view=diff
==============================================================================
--- directory/network/trunk/xdocs/index.xml (original)
+++ directory/network/trunk/xdocs/index.xml Tue Dec 27 18:49:31 2005
@@ -1,26 +1,26 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document>
-  <properties>
-    <author email="trustin@apache.org">Trustin Lee</author>
-    <title>Overview</title>
-  </properties>
-
-  <body>
-    <section name="Overview">
-      <p>
-        MINA (Multipurpose Infrastructure for Network Applications) is a
-        network application framework which helps users develop high
-        performance and high scalability network applications easily.
-        
-        <ul>
-          <li><a href="features.html">Feature List</a></li>
-          <li><a href="testimonials.html">Testimonials</a></li>
-          <li><a href="getting_started.html">Getting Started</a></li>
-          <li><a href="http://svn.apache.org/repository/directory-network/">Downloads</a></li>
-          <li><a href="apidocs/index.html">JavaDocs</a></li>
-          <li><a href="faq.html">F.A.Q</a></li>
-        </ul>
-      </p>
-    </section>
-  </body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<document>
+  <properties>
+    <author email="trustin@apache.org">Trustin Lee</author>
+    <title>Overview</title>
+  </properties>
+
+  <body>
+    <section name="Overview">
+      <p>
+        MINA (Multipurpose Infrastructure for Network Applications) is a
+        network application framework which helps users develop high
+        performance and high scalability network applications easily.
+        
+        <ul>
+          <li><a href="features.html">Feature List</a></li>
+          <li><a href="testimonials.html">Testimonials</a></li>
+          <li><a href="getting_started.html">Getting Started</a></li>
+          <li><a href="http://svn.apache.org/repository/directory-network/">Downloads</a></li>
+          <li><a href="apidocs/index.html">JavaDocs</a></li>
+          <li><a href="faq.html">F.A.Q</a></li>
+        </ul>
+      </p>
+    </section>
+  </body>
+</document>

Modified: directory/network/trunk/xdocs/navigation.xml
URL: http://svn.apache.org/viewcvs/directory/network/trunk/xdocs/navigation.xml?rev=359355&r1=359354&r2=359355&view=diff
==============================================================================
--- directory/network/trunk/xdocs/navigation.xml (original)
+++ directory/network/trunk/xdocs/navigation.xml Tue Dec 27 18:49:31 2005
@@ -1,53 +1,53 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
-
- <title>MINA</title>
-
- <body>
-   <links>
-     <item name="Directory" href="http://directory.apache.org/" />
-     <item name="ApacheDS" href="http://directory.apache.org/subprojects/apacheds/"/>
-     <item name="LDAP" href="http://directory.apache.org/subprojects/ldap.html"/>
-     <item name="Naming" href="http://directory.apache.org/subprojects/naming/"/>
-     <item name="ASN.1" href="http://directory.apache.org/subprojects/asn1/"/>
-     <item name="Kerberos" href="http://directory.apache.org/subprojects/"/>
-     <item name="AuthX" href="http://directory.apache.org/subprojects/authx/"/>
-     <item name="MINA" href="http://directory.apache.org/subprojects/network/"/>
-     <item name="Protocols" href="http://directory.apache.org/subprojects/providers.html"/>
-   </links>
-
-   <menu name="Stable Versions">
-     <item name="0.8" href="http://directory.apache.org/subprojects/network/branches/0.8/"/>
-   </menu>
-
-   <menu name="MINA">
-     <item name="Overview" href="/index.html"/>
-     <item name="Features" href="/features.html"/>
-     <item name="Testimonials" href="/testimonials.html"/>
-     <item name="Getting Started" href="/getting_started.html"/>
-     <item name="Downloads" href="http://svn.apache.org/repository/directory-network/"/>
-     <item name="F.A.Q" href="/faq.html"/>
-     <item name="Roadmap" href="/roadmap.html"/>
-     <item name="Changes" href="http://issues.apache.org/jira/browse/DIRMINA?report=com.atlassian.jira.plugin.system.project:changelog-panel&amp;subset=-1"/>
-     <item name="History" href="/history.html"/>
-   </menu>
-   
-   <menu name="MINA Community">
-     <item name="Mailing List" href="mail-lists.html"/>
-     <item name="Issue Tracker" href="http://issues.apache.org/jira/browse/DIRMINA"/>
-     <item name="Wiki Pages" href="http://wiki.apache.org/directory/MinaHome"/>
-   </menu>
-
-   <menu name="MINA Examples">
-     <item name="JavaDocs" href="/apidocs-examples/index.html"/>
-     <item name="Source code" href="/xref-examples/index.html"/>
-   </menu>
-
-   <menu name="MINA References">
-     <item name="JavaDocs" href="/apidocs/index.html"/>
-     <item name="Source code" href="/xref/index.html"/>
-     <item name="Source code (SVN)" href="http://svn.apache.org/viewcvs.cgi/directory/network/trunk/?root=Apache-SVN"/>
-     <item name="Wiki" href="http://wiki.apache.org/directory/MinaHome"/>
-   </menu>
-  </body>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+
+ <title>MINA</title>
+
+ <body>
+   <links>
+     <item name="Directory" href="http://directory.apache.org/" />
+     <item name="ApacheDS" href="http://directory.apache.org/subprojects/apacheds/"/>
+     <item name="LDAP" href="http://directory.apache.org/subprojects/ldap.html"/>
+     <item name="Naming" href="http://directory.apache.org/subprojects/naming/"/>
+     <item name="ASN.1" href="http://directory.apache.org/subprojects/asn1/"/>
+     <item name="Kerberos" href="http://directory.apache.org/subprojects/"/>
+     <item name="AuthX" href="http://directory.apache.org/subprojects/authx/"/>
+     <item name="MINA" href="http://directory.apache.org/subprojects/network/"/>
+     <item name="Protocols" href="http://directory.apache.org/subprojects/providers.html"/>
+   </links>
+
+   <menu name="Stable Versions">
+     <item name="0.8" href="http://directory.apache.org/subprojects/network/branches/0.8/"/>
+   </menu>
+
+   <menu name="MINA">
+     <item name="Overview" href="/index.html"/>
+     <item name="Features" href="/features.html"/>
+     <item name="Testimonials" href="/testimonials.html"/>
+     <item name="Getting Started" href="/getting_started.html"/>
+     <item name="Downloads" href="http://svn.apache.org/repository/directory-network/"/>
+     <item name="F.A.Q" href="/faq.html"/>
+     <item name="Roadmap" href="/roadmap.html"/>
+     <item name="Changes" href="http://issues.apache.org/jira/browse/DIRMINA?report=com.atlassian.jira.plugin.system.project:changelog-panel&amp;subset=-1"/>
+     <item name="History" href="/history.html"/>
+   </menu>
+   
+   <menu name="MINA Community">
+     <item name="Mailing List" href="mail-lists.html"/>
+     <item name="Issue Tracker" href="http://issues.apache.org/jira/browse/DIRMINA"/>
+     <item name="Wiki Pages" href="http://wiki.apache.org/directory/MinaHome"/>
+   </menu>
+
+   <menu name="MINA Examples">
+     <item name="JavaDocs" href="/apidocs-examples/index.html"/>
+     <item name="Source code" href="/xref-examples/index.html"/>
+   </menu>
+
+   <menu name="MINA References">
+     <item name="JavaDocs" href="/apidocs/index.html"/>
+     <item name="Source code" href="/xref/index.html"/>
+     <item name="Source code (SVN)" href="http://svn.apache.org/viewcvs.cgi/directory/network/trunk/?root=Apache-SVN"/>
+     <item name="Wiki" href="http://wiki.apache.org/directory/MinaHome"/>
+   </menu>
+  </body>
+</project>

Modified: directory/network/trunk/xdocs/testimonials.xml
URL: http://svn.apache.org/viewcvs/directory/network/trunk/xdocs/testimonials.xml?rev=359355&r1=359354&r2=359355&view=diff
==============================================================================
--- directory/network/trunk/xdocs/testimonials.xml (original)
+++ directory/network/trunk/xdocs/testimonials.xml Tue Dec 27 18:49:31 2005
@@ -1,99 +1,99 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document>
-  <properties>
-    <author email="trustin@apache.org">Trustin Lee</author>
-    <title>Testimonials</title>
-  </properties>
-
-  <body>
-    <section name="Testimonials">
-      <p>
-        Alex Burmester says:
-        <blockquote>
-          <p>
-            We are using MINA at a telco to route low level protocol packets
-            to a third party.  We already had a SOAP and also a CORBA interface
-            but for speed purposes we are trying out a lower level protocol and
-            we needed a gateway of sorts to route messages between our cluster of
-            servers and the third party's servers.
-          </p>
-          <p>
-            I had been planning on using NIO and some aspects of
-            <a href="http://www.eecs.harvard.edu/~mdw/proj/seda/">SEDA</a> but
-            finding MINA was a real treat as it saved a lot of time, is well
-            written and gets more testing than our in house QA would be able to
-            cover.
-          </p>
-          <p>
-            The speed and stability of our app on top of MINA has been excellent.
-          </p>
-        </blockquote>
-      </p>
-      
-      <p>Jean-François Daune says:
-        <blockquote>
-          <p>
-            We use MINA to communicate with
-            <a href="http://www.banksys.com/">Banksys</a> 'point of sale'
-            terminals (Visa, Mastercard...) for technical management operations.
-            (software upgrade, remote monitoring, log transfer...)
-          </p>
-          <p>
-            So far, MINA has worked really well for us. We used
-            <a href="http://gleamynode.net/dev/tl-netty2/docs/">Netty2</a>,
-            and clearly saw the improvements in MINA. I like the MINA API
-            more. MINA really makes it easier to write applications using NIO.
-          </p>
-        </blockquote>
-      </p>
-
-      <p>Luke Hubbard says:
-        <blockquote>
-          We are using it for the network layer of
-          <a href="http://www.osflash.org/red5">Red5</a>, an open source flash
-          server. At the moment we have RTMP and AMF working and hope to add
-          more protocols in the future.  MINA's design and ease of use has
-          helped us get a prototype up and running quickly.
-        </blockquote>
-      </p>
-      
-      <p>Thomas Muller says:
-        <blockquote>
-          What a fantastic API! Definately the best I've seen since
-          <a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html">Doug Lea's Concurrency API</a>.
-        </blockquote>
-      </p>
-      
-      <p>Paolo Perrucci says:
-        <blockquote>
-          We are using MINA to build the network layer of our multiplayer
-          game server at <a href="http://ludonet.leonardo.it/">Leonardo.it</a>.
-          Using MINA, we implemented different protocols in a few days;
-          Game and HTTP tunneling.  In the past, we used NIO, and the advantage
-          of using MINA is evident; the MINA API is elegant and very simple to
-          use.  Last, but not least, MINA have a really responsive support.
-        </blockquote>
-      </p>
-      
-      <p>Julien Vermillard says:
-        <blockquote>
-          I'm using MINA for supervisory control and data acquisition (SCADA)
-          embedded application. It's used for several tasks; connecting
-          supervision clients to the server, interaction of the server with
-          different hardware (other SCADA systems, media stream matrix,
-          programmable automaton, remote data aquisition systems), custom
-          replication protocols for fail-over service. I found MINA when I
-          started implementation using NIO and it was a great time saver.
-          You can switch from RS232 to TCP/IP and add SSL connectivity easly.
-          The stability and the support is really great. The code and the
-          design are simple and efficient, so you can easly implement high
-          quality protocol logic without bothering with all the NIO quirks.
-          I didn't really tested the maximum performance you can get out of
-          MINA, but all I can say is that MINA is running 24/7 with an amazing
-          stability and I'm not afraid of using it in harsh evironement.
-        </blockquote>
-      </p>
-
-    </section>
-  </body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<document>
+  <properties>
+    <author email="trustin@apache.org">Trustin Lee</author>
+    <title>Testimonials</title>
+  </properties>
+
+  <body>
+    <section name="Testimonials">
+      <p>
+        Alex Burmester says:
+        <blockquote>
+          <p>
+            We are using MINA at a telco to route low level protocol packets
+            to a third party.  We already had a SOAP and also a CORBA interface
+            but for speed purposes we are trying out a lower level protocol and
+            we needed a gateway of sorts to route messages between our cluster of
+            servers and the third party's servers.
+          </p>
+          <p>
+            I had been planning on using NIO and some aspects of
+            <a href="http://www.eecs.harvard.edu/~mdw/proj/seda/">SEDA</a> but
+            finding MINA was a real treat as it saved a lot of time, is well
+            written and gets more testing than our in house QA would be able to
+            cover.
+          </p>
+          <p>
+            The speed and stability of our app on top of MINA has been excellent.
+          </p>
+        </blockquote>
+      </p>
+      
+      <p>Jean-François Daune says:
+        <blockquote>
+          <p>
+            We use MINA to communicate with
+            <a href="http://www.banksys.com/">Banksys</a> 'point of sale'
+            terminals (Visa, Mastercard...) for technical management operations.
+            (software upgrade, remote monitoring, log transfer...)
+          </p>
+          <p>
+            So far, MINA has worked really well for us. We used
+            <a href="http://gleamynode.net/dev/tl-netty2/docs/">Netty2</a>,
+            and clearly saw the improvements in MINA. I like the MINA API
+            more. MINA really makes it easier to write applications using NIO.
+          </p>
+        </blockquote>
+      </p>
+
+      <p>Luke Hubbard says:
+        <blockquote>
+          We are using it for the network layer of
+          <a href="http://www.osflash.org/red5">Red5</a>, an open source flash
+          server. At the moment we have RTMP and AMF working and hope to add
+          more protocols in the future.  MINA's design and ease of use has
+          helped us get a prototype up and running quickly.
+        </blockquote>
+      </p>
+      
+      <p>Thomas Muller says:
+        <blockquote>
+          What a fantastic API! Definately the best I've seen since
+          <a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html">Doug Lea's Concurrency API</a>.
+        </blockquote>
+      </p>
+      
+      <p>Paolo Perrucci says:
+        <blockquote>
+          We are using MINA to build the network layer of our multiplayer
+          game server at <a href="http://ludonet.leonardo.it/">Leonardo.it</a>.
+          Using MINA, we implemented different protocols in a few days;
+          Game and HTTP tunneling.  In the past, we used NIO, and the advantage
+          of using MINA is evident; the MINA API is elegant and very simple to
+          use.  Last, but not least, MINA have a really responsive support.
+        </blockquote>
+      </p>
+      
+      <p>Julien Vermillard says:
+        <blockquote>
+          I'm using MINA for supervisory control and data acquisition (SCADA)
+          embedded application. It's used for several tasks; connecting
+          supervision clients to the server, interaction of the server with
+          different hardware (other SCADA systems, media stream matrix,
+          programmable automaton, remote data aquisition systems), custom
+          replication protocols for fail-over service. I found MINA when I
+          started implementation using NIO and it was a great time saver.
+          You can switch from RS232 to TCP/IP and add SSL connectivity easly.
+          The stability and the support is really great. The code and the
+          design are simple and efficient, so you can easly implement high
+          quality protocol logic without bothering with all the NIO quirks.
+          I didn't really tested the maximum performance you can get out of
+          MINA, but all I can say is that MINA is running 24/7 with an amazing
+          stability and I'm not afraid of using it in harsh evironement.
+        </blockquote>
+      </p>
+
+    </section>
+  </body>
+</document>



Mime
View raw message