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 )
{