Author: violetagg Date: Mon Aug 29 16:55:54 2016 New Revision: 1758261 URL: http://svn.apache.org/viewvc?rev=1758261&view=rev Log: Implement o.a.catalina.connector.OutputBuffer.realWriteBytes(ByteBuffer)
Modified: tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java tomcat/trunk/java/org/apache/coyote/Response.java Modified: tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java?rev=1758261&r1=1758260&r2=1758261&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java Mon Aug 29 16:55:54 2016 @@ -395,7 +395,27 @@ public class OutputBuffer extends Writer */ @Override public void realWriteBytes(ByteBuffer buf) throws IOException { - // To be implemented + + if (closed) { + return; + } + if (coyoteResponse == null) { + return; + } + + // If we really have something to write + if (buf.remaining() > 0) { + // real write to the adapter + try { + coyoteResponse.doWrite(buf.slice()); + } catch (IOException e) { + // An IOException on a write is almost always due to + // the remote client aborting the request. Wrap this + // so that it can be handled better by the error dispatcher. + throw new ClientAbortException(e); + } + } + } Modified: tomcat/trunk/java/org/apache/coyote/Response.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Response.java?rev=1758261&r1=1758260&r2=1758261&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/Response.java (original) +++ tomcat/trunk/java/org/apache/coyote/Response.java Mon Aug 29 16:55:54 2016 @@ -18,6 +18,7 @@ package org.apache.coyote; import java.io.IOException; import java.io.StringReader; +import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.Locale; import java.util.concurrent.atomic.AtomicBoolean; @@ -500,6 +501,20 @@ public final class Response { contentWritten+=chunk.getLength(); } + + /** + * Write a chunk of bytes. + * + * @param chunk The ByteBuffer to write + * + * @throws IOException If an I/O error occurs during the write + */ + public void doWrite(ByteBuffer chunk) throws IOException { + int len = chunk.remaining(); + outputBuffer.doWrite(chunk); + contentWritten += len - chunk.remaining(); + } + // -------------------- public void recycle() { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org