Class Http11OutputBuffer

  • All Implemented Interfaces:
    HttpOutputBuffer, OutputBuffer

    public class Http11OutputBuffer
    extends java.lang.Object
    implements HttpOutputBuffer
    Provides buffering for the HTTP headers (allowing responses to be reset before they have been committed) and the link to the Socket for writing the headers (once committed) and the response body. Note that buffering of the response body happens at a higher level.
    • Field Detail

      • sm

        protected static final StringManager sm
        The string manager for this package.
      • response

        protected final Response response
        Associated Coyote response.
      • responseFinished

        protected boolean responseFinished
        Finished flag.
      • headerBuffer

        protected final java.nio.ByteBuffer headerBuffer
        The buffer used for header composition.
      • filterLibrary

        protected OutputFilter[] filterLibrary
        Filter library for processing the response body.
      • activeFilters

        protected OutputFilter[] activeFilters
        Active filters for the current request.
      • lastActiveFilter

        protected int lastActiveFilter
        Index of the last active filter.
      • outputStreamOutputBuffer

        protected HttpOutputBuffer outputStreamOutputBuffer
        Underlying output buffer.
      • socketWrapper

        protected SocketWrapperBase<?> socketWrapper
        Wrapper for socket where data will be written to.
      • byteCount

        protected long byteCount
        Bytes written to client for the current request
    • Constructor Detail

      • Http11OutputBuffer

        protected Http11OutputBuffer​(Response response,
                                     int headerBufferSize)
    • Method Detail

      • addFilter

        public void addFilter​(OutputFilter filter)
        Add an output filter to the filter library. Note that calling this method resets the currently active filters to none.
        Parameters:
        filter - The filter to add
      • getFilters

        public OutputFilter[] getFilters()
        Get filters.
        Returns:
        The current filter library containing all possible filters
      • addActiveFilter

        public void addActiveFilter​(OutputFilter filter)
        Add an output filter to the active filters for the current response.

        The filter does not have to be present in getFilters().

        A filter can only be added to a response once. If the filter has already been added to this response then this method will be a NO-OP.

        Parameters:
        filter - The filter to add
      • doWrite

        public int doWrite​(java.nio.ByteBuffer chunk)
                    throws java.io.IOException
        Description copied from interface: OutputBuffer
        Write the given data to the response. The caller owns the chunks.
        Specified by:
        doWrite in interface OutputBuffer
        Parameters:
        chunk - data to write
        Returns:
        The number of bytes written which may be less than available in the input chunk
        Throws:
        java.io.IOException - an underlying I/O error occurred
      • getBytesWritten

        public long getBytesWritten()
        Description copied from interface: OutputBuffer
        Bytes written to the underlying socket. This includes the effects of chunking, compression, etc.
        Specified by:
        getBytesWritten in interface OutputBuffer
        Returns:
        Bytes written for the current request
      • flush

        public void flush()
                   throws java.io.IOException
        Flush the response.
        Specified by:
        flush in interface HttpOutputBuffer
        Throws:
        java.io.IOException - an underlying I/O error occurred
      • end

        public void end()
                 throws java.io.IOException
        Description copied from interface: HttpOutputBuffer
        Finish writing the current response. It is acceptable to write extra bytes using OutputBuffer.doWrite(java.nio.ByteBuffer) during the execution of this method.
        Specified by:
        end in interface HttpOutputBuffer
        Throws:
        java.io.IOException - If an I/O error occurs while writing to the client
      • recycle

        public void recycle()
        Recycle the output buffer. This should be called when closing the connection.
      • nextRequest

        public void nextRequest()
        End processing of current HTTP request. Note: All bytes of the current request should have been already consumed. This method only resets all the pointers so that we are ready to parse the next HTTP request.
      • sendAck

        public void sendAck()
                     throws java.io.IOException
        Throws:
        java.io.IOException
      • commit

        protected void commit()
                       throws java.io.IOException
        Commit the response.
        Throws:
        java.io.IOException - an underlying I/O error occurred
      • sendStatus

        public void sendStatus()
        Send the response status line.
      • sendHeader

        public void sendHeader​(MessageBytes name,
                               MessageBytes value)
        Send a header.
        Parameters:
        name - Header name
        value - Header value
      • endHeaders

        public void endHeaders()
        End the header block.
      • write

        public void write​(byte[] b)
        This method will write the contents of the specified byte buffer to the output stream, without filtering. This method is meant to be used to write the response header.
        Parameters:
        b - data to be written
      • flushBuffer

        protected boolean flushBuffer​(boolean block)
                               throws java.io.IOException
        Writes any remaining buffered data.
        Parameters:
        block - Should this method block until the buffer is empty
        Returns:
        true if data remains in the buffer (which can only happen in non-blocking mode) else false.
        Throws:
        java.io.IOException - Error writing data
      • isBlocking

        protected final boolean isBlocking()
        Is standard Servlet blocking IO being used for output?
        Returns:
        true if this is blocking IO
      • isReady

        protected final boolean isReady()
      • hasDataToWrite

        public boolean hasDataToWrite()
      • registerWriteInterest

        public void registerWriteInterest()