You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by vi...@apache.org on 2016/08/29 16:55:54 UTC

svn commit: r1758261 - in /tomcat/trunk/java/org/apache: catalina/connector/OutputBuffer.java coyote/Response.java

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org