Author: trustin
Date: Fri Apr 13 05:31:06 2007
New Revision: 528463

URL: http://svn.apache.org/viewvc?view=rev&rev=528463
Log:
Fixed issue: DIRMINA-369 (StreamIoHandler can flush garbled data.)
* Applied defensive copying to IoSessionOutputStream
* Fixed BindException problem in http server


Modified:
    
mina/branches/1.0/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
    
mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
    
mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
    
mina/branches/1.1/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
    
mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
    
mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
    
mina/trunk/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
    
mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java

Modified: 
mina/branches/1.0/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java?view=diff&rev=528463&r1=528462&r2=528463
==============================================================================
--- 
mina/branches/1.0/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
 (original)
+++ 
mina/branches/1.0/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
 Fri Apr 13 05:31:06 2007
@@ -44,9 +44,13 @@
         this.session = session;
     }
     
-    public void close()
+    public void close() throws IOException
     {
-        session.close().join();
+        try {
+            flush();
+        } finally {
+            session.close().join();
+        }
     }
 
     private void checkClosed() throws IOException
@@ -66,7 +70,7 @@
     
     public void write( byte[] b, int off, int len ) throws IOException
     {
-        write( ByteBuffer.wrap( b, off, len ) );
+        write( ByteBuffer.wrap( (byte[]) b.clone(), off, len ) );
     }
 
     public void write( int b ) throws IOException

Modified: 
mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java?view=diff&rev=528463&r1=528462&r2=528463
==============================================================================
--- 
mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
 (original)
+++ 
mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
 Fri Apr 13 05:31:06 2007
@@ -94,17 +94,22 @@
                 // Write content
                 out.println( "<html><head></head><body>" );
                 out.println( "<h3>Request Summary for: " + url + "</h3>" );
-                out.println( "<table 
border=\"1\"><tr><th>Key</th><th>Value</th></tr>" );
-                
+                out.println("<table 
border=\"1\"><tr><th>Key</th><th>Value</th></tr>");
+
                 Iterator it = headers.entrySet().iterator();
-                while( it.hasNext() )
-                {
-                    Entry e = ( Entry ) it.next();
-                    out.println( "<tr><td>" + e.getKey() + "</td><td>" + 
e.getValue() + "</td></tr>" );
+                while (it.hasNext()) {
+                    Entry e = (Entry) it.next();
+                    out.println("<tr><td>" + e.getKey() + "</td><td>"
+                            + e.getValue() + "</td></tr>");
                 }
-                
-                out.println( "</table>" );
-                out.println( "</body></html>" );
+
+                out.println("</table>");
+
+                for (int i = 0; i < 1024; i++) {
+                    out.println("this is line: " + i + "<br/>");
+                }
+
+                out.println("</body></html>");
             }
             catch( Exception e )
             {

Modified: 
mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java?view=diff&rev=528463&r1=528462&r2=528463
==============================================================================
--- 
mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
 (original)
+++ 
mina/branches/1.0/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
 Fri Apr 13 05:31:06 2007
@@ -28,6 +28,7 @@
 import org.apache.mina.filter.SSLFilter;
 import org.apache.mina.transport.socket.nio.SocketAcceptor;
 import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
+import org.apache.mina.transport.socket.nio.SocketSessionConfig;
 
 /**
  * (<b>Entry point</b>) HTTP server
@@ -48,6 +49,7 @@
         IoAcceptorConfig config = new SocketAcceptorConfig();
         DefaultIoFilterChainBuilder chain = config.getFilterChain();
 
+        ((SocketSessionConfig) 
config.getSessionConfig()).setReuseAddress(true);
         // Add SSL filter if SSL is enabled.
         if( USE_SSL )
         {

Modified: 
mina/branches/1.1/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java?view=diff&rev=528463&r1=528462&r2=528463
==============================================================================
--- 
mina/branches/1.1/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
 (original)
+++ 
mina/branches/1.1/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
 Fri Apr 13 05:31:06 2007
@@ -44,9 +44,13 @@
     }
 
     @Override
-    public void close()
+    public void close() throws IOException
     {
-        session.close().join();
+         try {
+             flush();
+         } finally {
+             session.close().join();
+         }
     }
 
     private void checkClosed() throws IOException
@@ -66,7 +70,7 @@
     @Override
     public void write( byte[] b, int off, int len ) throws IOException
     {
-        write( ByteBuffer.wrap( b, off, len ) );
+        write( ByteBuffer.wrap( b.clone(), off, len ) );
     }
 
     @Override

Modified: 
mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java?view=diff&rev=528463&r1=528462&r2=528463
==============================================================================
--- 
mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
 (original)
+++ 
mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
 Fri Apr 13 05:31:06 2007
@@ -94,17 +94,22 @@
                 // Write content
                 out.println( "<html><head></head><body>" );
                 out.println( "<h3>Request Summary for: " + url + "</h3>" );
-                out.println( "<table 
border=\"1\"><tr><th>Key</th><th>Value</th></tr>" );
-                
+                out.println("<table 
border=\"1\"><tr><th>Key</th><th>Value</th></tr>");
+
                 Iterator it = headers.entrySet().iterator();
-                while( it.hasNext() )
-                {
-                    Entry e = ( Entry ) it.next();
-                    out.println( "<tr><td>" + e.getKey() + "</td><td>" + 
e.getValue() + "</td></tr>" );
+                while (it.hasNext()) {
+                    Entry e = (Entry) it.next();
+                    out.println("<tr><td>" + e.getKey() + "</td><td>"
+                            + e.getValue() + "</td></tr>");
                 }
-                
-                out.println( "</table>" );
-                out.println( "</body></html>" );
+
+                out.println("</table>");
+
+                for (int i = 0; i < 1024; i++) {
+                    out.println("this is line: " + i + "<br/>");
+                }
+
+                out.println("</body></html>");
             }
             catch( Exception e )
             {

Modified: 
mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java?view=diff&rev=528463&r1=528462&r2=528463
==============================================================================
--- 
mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
 (original)
+++ 
mina/branches/1.1/example/src/main/java/org/apache/mina/example/httpserver/stream/Main.java
 Fri Apr 13 05:31:06 2007
@@ -28,6 +28,7 @@
 import org.apache.mina.filter.SSLFilter;
 import org.apache.mina.transport.socket.nio.SocketAcceptor;
 import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
+import org.apache.mina.transport.socket.nio.SocketSessionConfig;
 
 /**
  * (<b>Entry point</b>) HTTP server
@@ -48,6 +49,7 @@
         IoAcceptorConfig config = new SocketAcceptorConfig();
         DefaultIoFilterChainBuilder chain = config.getFilterChain();
 
+        ((SocketSessionConfig) 
config.getSessionConfig()).setReuseAddress(true);
         // Add SSL filter if SSL is enabled.
         if( USE_SSL )
         {

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java?view=diff&rev=528463&r1=528462&r2=528463
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/handler/support/IoSessionOutputStream.java
 Fri Apr 13 05:31:06 2007
@@ -45,9 +45,13 @@
     }
     
     @Override
-    public void close()
+    public void close() throws IOException
     {
-        session.close().join();
+         try {
+             flush();
+         } finally {
+             session.close().join();
+         }
     }
 
     private void checkClosed() throws IOException
@@ -68,7 +72,7 @@
     @Override
     public void write( byte[] b, int off, int len ) throws IOException
     {
-        write( ByteBuffer.wrap( b, off, len ) );
+        write( ByteBuffer.wrap( b.clone(), off, len ) );
     }
 
     @Override

Modified: 
mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java?view=diff&rev=528463&r1=528462&r2=528463
==============================================================================
--- 
mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
 (original)
+++ 
mina/trunk/example/src/main/java/org/apache/mina/example/httpserver/stream/HttpProtocolHandler.java
 Fri Apr 13 05:31:06 2007
@@ -96,17 +96,22 @@
                 // Write content
                 out.println( "<html><head></head><body>" );
                 out.println( "<h3>Request Summary for: " + url + "</h3>" );
-                out.println( "<table 
border=\"1\"><tr><th>Key</th><th>Value</th></tr>" );
-                
+                out.println("<table 
border=\"1\"><tr><th>Key</th><th>Value</th></tr>");
+
                 Iterator it = headers.entrySet().iterator();
-                while( it.hasNext() )
-                {
-                    Entry e = ( Entry ) it.next();
-                    out.println( "<tr><td>" + e.getKey() + "</td><td>" + 
e.getValue() + "</td></tr>" );
+                while (it.hasNext()) {
+                    Entry e = (Entry) it.next();
+                    out.println("<tr><td>" + e.getKey() + "</td><td>"
+                            + e.getValue() + "</td></tr>");
                 }
-                
-                out.println( "</table>" );
-                out.println( "</body></html>" );
+
+                out.println("</table>");
+
+                for (int i = 0; i < 1024; i++) {
+                    out.println("this is line: " + i + "<br/>");
+                }
+
+                out.println("</body></html>");
             }
             catch( Exception e )
             {


Reply via email to