io.undertow.server.protocol.http

## Class PipeliningBufferingStreamSinkConduit

- java.lang.Object
- - org.xnio.conduits.AbstractConduit<D>
  - - org.xnio.conduits.AbstractSinkConduit<D>
    - - org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>
      - - io.undertow.server.protocol.http.PipeliningBufferingStreamSinkConduit

All Implemented Interfaces:
  org.xnio.conduits.Conduit, org.xnio.conduits.SinkConduit, org.xnio.conduits.StreamSinkConduit

    public class PipeliningBufferingStreamSinkConduit
    extends org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>

A buffer that is used when processing pipelined requests, that allows the server to buffer multiple responses into a single write() call.

This can improve performance when pipelining requests.

Author:
  Stuart Douglas

### Field Summary

### Fields inherited from class org.xnio.conduits.AbstractConduit

`next`

### Constructor Summary

Constructors
Constructor and Description
`PipeliningBufferingStreamSinkConduit(org.xnio.conduits.StreamSinkConduit next, ByteBufferPool pool)`

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `awaitWritable()`
`void` `awaitWritable(long time, TimeUnit timeUnit)`
`void` `exchangeComplete(HttpServerExchange exchange)`
`boolean` `flush()`
`boolean` `flushPipelinedData()` Flushes the cached data.
`void` `setupPipelineBuffer(HttpServerExchange exchange)` Gets the channel wrapper that implements the buffering
`void` `terminateWrites()`
`long` `transferFrom(FileChannel src, long position, long count)`
`long` `transferFrom(org.xnio.channels.StreamSourceChannel source, long count, ByteBuffer throughBuffer)`
`void` `truncateWrites()`
`int` `write(ByteBuffer src)`
`long` `write(ByteBuffer[] srcs, int offset, int length)`
`int` `writeFinal(ByteBuffer src)`
`long` `writeFinal(ByteBuffer[] srcs, int offset, int length)`

### Methods inherited from class org.xnio.conduits.AbstractSinkConduit

`getWriteThread, isWriteResumed, isWriteShutdown, resumeWrites, setWriteReadyHandler, suspendWrites, wakeupWrites`

### Methods inherited from class org.xnio.conduits.AbstractConduit

`getWorker`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.xnio.conduits.SinkConduit

`getWriteThread, isWriteResumed, isWriteShutdown, resumeWrites, setWriteReadyHandler, suspendWrites, wakeupWrites`

### Methods inherited from interface org.xnio.conduits.Conduit

`getWorker`

### Constructor Detail

#### PipeliningBufferingStreamSinkConduit

    public PipeliningBufferingStreamSinkConduit(org.xnio.conduits.StreamSinkConduit next,
                                                ByteBufferPool pool)

### Method Detail

#### transferFrom

    public long transferFrom(FileChannel src,
                             long position,
                             long count)
                      throws IOException

Specified by:
  `transferFrom` in interface `org.xnio.conduits.StreamSinkConduit`
Overrides:
  `transferFrom` in class `org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### transferFrom

    public long transferFrom(org.xnio.channels.StreamSourceChannel source,
                             long count,
                             ByteBuffer throughBuffer)
                      throws IOException

Specified by:
  `transferFrom` in interface `org.xnio.conduits.StreamSinkConduit`
Overrides:
  `transferFrom` in class `org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### write

    public long write(ByteBuffer[] srcs,
                      int offset,
                      int length)
               throws IOException

Specified by:
  `write` in interface `org.xnio.conduits.StreamSinkConduit`
Overrides:
  `write` in class `org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### write

    public int write(ByteBuffer src)
              throws IOException

Specified by:
  `write` in interface `org.xnio.conduits.StreamSinkConduit`
Overrides:
  `write` in class `org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### writeFinal

    public int writeFinal(ByteBuffer src)
                   throws IOException

Specified by:
  `writeFinal` in interface `org.xnio.conduits.StreamSinkConduit`
Overrides:
  `writeFinal` in class `org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### writeFinal

    public long writeFinal(ByteBuffer[] srcs,
                           int offset,
                           int length)
                    throws IOException

Specified by:
  `writeFinal` in interface `org.xnio.conduits.StreamSinkConduit`
Overrides:
  `writeFinal` in class `org.xnio.conduits.AbstractStreamSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### flushPipelinedData

    public boolean flushPipelinedData()
                               throws IOException

Flushes the cached data.

This should be called when a read thread fails to read any more request data, to make sure that any buffered data is flushed after the last pipelined request.

If this returns false the read thread should suspend reads and resume writes

Returns:
  `true` If the flush succeeded, false otherwise
Throws:
  `IOException`

#### setupPipelineBuffer

    public void setupPipelineBuffer(HttpServerExchange exchange)

Gets the channel wrapper that implements the buffering

#### awaitWritable

    public void awaitWritable(long time,
                              TimeUnit timeUnit)
                       throws IOException

Specified by:
  `awaitWritable` in interface `org.xnio.conduits.SinkConduit`
Overrides:
  `awaitWritable` in class `org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### awaitWritable

    public void awaitWritable()
                       throws IOException

Specified by:
  `awaitWritable` in interface `org.xnio.conduits.SinkConduit`
Overrides:
  `awaitWritable` in class `org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### flush

    public boolean flush()
                  throws IOException

Specified by:
  `flush` in interface `org.xnio.conduits.SinkConduit`
Overrides:
  `flush` in class `org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### terminateWrites

    public void terminateWrites()
                         throws IOException

Specified by:
  `terminateWrites` in interface `org.xnio.conduits.SinkConduit`
Overrides:
  `terminateWrites` in class `org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### truncateWrites

    public void truncateWrites()
                        throws IOException

Specified by:
  `truncateWrites` in interface `org.xnio.conduits.SinkConduit`
Overrides:
  `truncateWrites` in class `org.xnio.conduits.AbstractSinkConduit<org.xnio.conduits.StreamSinkConduit>`
Throws:
  `IOException`

#### exchangeComplete

    public void exchangeComplete(HttpServerExchange exchange)