# BidirectionalStream.Callback


```
public abstract class BidirectionalStream.Callback
```

<br />

*** ** * ** ***

Callback class used to receive callbacks from a `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream`.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback#Callback()()` |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback#onCanceled(org.chromium.net.BidirectionalStream,org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked if the stream was canceled via `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#cancel()`. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback#onFailed(org.chromium.net.BidirectionalStream,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException error )` Invoked if the stream failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#start()`. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback#onReadCompleted(org.chromium.net.BidirectionalStream,org.chromium.net.UrlResponseInfo,java.nio.ByteBuffer,boolean)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/nio/ByteBuffer.html buffer, boolean endOfStream )` Invoked when data is read into the buffer passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#read(java.nio.ByteBuffer)`. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback#onResponseHeadersReceived(org.chromium.net.BidirectionalStream,org.chromium.net.UrlResponseInfo)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info )` Invoked when initial response headers are received. |
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback#onResponseTrailersReceived(org.chromium.net.BidirectionalStream,org.chromium.net.UrlResponseInfo,org.chromium.net.UrlResponseInfo.HeaderBlock)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo.HeaderBlock trailers )` Invoked when trailers are received before closing the stream. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback#onStreamReady(org.chromium.net.BidirectionalStream)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream)` Invoked when the stream is ready for reading and writing. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback#onSucceeded(org.chromium.net.BidirectionalStream,org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked when there is no data to be read or written and the stream is closed successfully remotely and locally. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback#onWriteCompleted(org.chromium.net.BidirectionalStream,org.chromium.net.UrlResponseInfo,java.nio.ByteBuffer,boolean)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/nio/ByteBuffer.html buffer, boolean endOfStream )` Invoked when the entire ByteBuffer passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#write(java.nio.ByteBuffer,boolean)` is sent. |

## Public constructors

### Callback

```
public Callback()
```

## Public methods

### onCanceled

```
public void onCanceled(BidirectionalStream stream, UrlResponseInfo info)
```

Invoked if the stream was canceled via `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#cancel()`. Once invoked, no further `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback` methods will be invoked. Default implementation takes no action.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream` | the stream that was canceled |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | the response information. May be `null` if no response was received. |

### onFailed

```
public abstract void onFailed(
    BidirectionalStream stream,
    UrlResponseInfo info,
    CronetException error
)
```

Invoked if the stream failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#start()`. [HTTP/2 error codes](https://tools.ietf.org/html/rfc7540#section-7) are mapped to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkException#getCronetInternalErrorCode()` codes. Once invoked, no further `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback` methods will be invoked.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream` | the stream which has failed |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | the response information. May be `null` if no response was received. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException error` | information about the failure |

### onReadCompleted

```
public abstract void onReadCompleted(
    BidirectionalStream stream,
    UrlResponseInfo info,
    ByteBuffer buffer,
    boolean endOfStream
)
```

Invoked when data is read into the buffer passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#read(java.nio.ByteBuffer)`. Only part of the buffer may be populated. To continue reading, call `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#read(java.nio.ByteBuffer)`. It may be invoked after `
onResponseTrailersReceived()`, if there was pending read data before trailers were received.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream` | the stream on which the read completed |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | the response information |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html buffer` | the buffer that was passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#read(java.nio.ByteBuffer)`, now containing the received data. The buffer's limit is not changed. The buffer's position is set to the end of the received data. If position is not updated, it means the remote side has signaled that it will send no more data. |
| `boolean endOfStream` | if true, this is the last read data, remote will not send more data, and the read side is closed. |

### onResponseHeadersReceived

```
public abstract void onResponseHeadersReceived(
    BidirectionalStream stream,
    UrlResponseInfo info
)
```

Invoked when initial response headers are received. Headers are available from `
info.``https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo#getAllHeaders()`. Consumer may call `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#read(java.nio.ByteBuffer)` to start reading. Consumer may call `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#write(java.nio.ByteBuffer,boolean)` to start writing or close the stream.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream` | the stream on which response headers were received. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | the response information. |

### onResponseTrailersReceived

```
public void onResponseTrailersReceived(
    BidirectionalStream stream,
    UrlResponseInfo info,
    UrlResponseInfo.HeaderBlock trailers
)
```

Invoked when trailers are received before closing the stream. Only invoked when server sends trailers, which it may not. May be invoked while there is read data remaining in local buffer. Default implementation takes no action.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream` | the stream on which response trailers were received |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | the response information |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo.HeaderBlock trailers` | the trailers received |

### onStreamReady

```
public abstract void onStreamReady(BidirectionalStream stream)
```

Invoked when the stream is ready for reading and writing. Consumer may call `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#read(java.nio.ByteBuffer)` to start reading data. Consumer may call `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#write(java.nio.ByteBuffer,boolean)` to start writing data.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream` | the stream that is ready. |

### onSucceeded

```
public abstract void onSucceeded(BidirectionalStream stream, UrlResponseInfo info)
```

Invoked when there is no data to be read or written and the stream is closed successfully remotely and locally. Once invoked, no further `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream.Callback` methods will be invoked.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream` | the stream which is closed successfully |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | the response information |

### onWriteCompleted

```
public abstract void onWriteCompleted(
    BidirectionalStream stream,
    UrlResponseInfo info,
    ByteBuffer buffer,
    boolean endOfStream
)
```

Invoked when the entire ByteBuffer passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#write(java.nio.ByteBuffer,boolean)` is sent. The buffer's position is updated to be the same as the buffer's limit. The buffer's limit is not changed. To continue writing, call `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#write(java.nio.ByteBuffer,boolean)`.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream stream` | the stream on which the write completed |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | the response information |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html buffer` | the buffer that was passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#write(java.nio.ByteBuffer,boolean)`. The buffer's position is set to the buffer's limit. The buffer's limit is not changed. |
| `boolean endOfStream` | the endOfStream flag that was passed to the corresponding `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/BidirectionalStream#write(java.nio.ByteBuffer,boolean)`. If true, the write side is closed. |