Package com.google.android.exoplayer2.upstream

## Interface HttpDataSource

- All Superinterfaces:
    `DataReader`, `DataSource`
  All Known Implementing Classes:
    `CronetDataSource`, `DefaultHttpDataSource`, `OkHttpDataSource`

      public interface HttpDataSource
      extends DataSource

  An HTTP `DataSource`.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Interface | Description
    --- | --- | ---
    `static class` | `HttpDataSource.BaseFactory` | Base implementation of `HttpDataSource.Factory` that sets default request properties.
    `static class` | `HttpDataSource.CleartextNotPermittedException` | Thrown when cleartext HTTP traffic is not permitted.
    `static interface` | `HttpDataSource.Factory` | A factory for `HttpDataSource` instances.
    `static class` | `HttpDataSource.HttpDataSourceException` | Thrown when an error is encountered when trying to read from a `HttpDataSource`.
    `static class` | `HttpDataSource.InvalidContentTypeException` | Thrown when the content type is invalid.
    `static class` | `HttpDataSource.InvalidResponseCodeException` | Thrown when an attempt to open a connection results in a response code not in the 2xx range.
    `static class` | `HttpDataSource.RequestProperties` | Stores HTTP request properties (aka HTTP headers) and provides methods to modify the headers in a thread safe way to avoid the potential of creating snapshots of an inconsistent or unintended state.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static Predicate<String>` | `REJECT_PAYWALL_TYPES` | A `Predicate` that rejects content types often used for pay-walls.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `clearAllRequestProperties()` | Clears all request headers that were set by `setRequestProperty(String, String)`.
    `void` | `clearRequestProperty​(String name)` | Clears the value of a request header.
    `void` | `close()` | Closes the source.
    `int` | `getResponseCode()` | When the source is open, returns the HTTP response status code associated with the last `open(com.google.android.exoplayer2.upstream.DataSpec)` call.
    `Map<String,​List<String>>` | `getResponseHeaders()` | When the source is open, returns the response headers associated with the last `DataSource.open(com.google.android.exoplayer2.upstream.DataSpec)` call.
    `long` | `open​(DataSpec dataSpec)` | Opens the source to read the specified data.
    `int` | `read​(byte[] buffer, int offset, int readLength)` | Reads up to `length` bytes of data from the input.
    `void` | `setRequestProperty​(String name, String value)` | Sets the value of a request header.

    - ### Methods inherited from interface com.google.android.exoplayer2.upstream.DataSource

      `addTransferListener, getUri`

- - ### Field Detail

    - #### REJECT_PAYWALL_TYPES

          static final Predicate<String> REJECT_PAYWALL_TYPES

      A `Predicate` that rejects content types often used for pay-walls.

  - ### Method Detail

    - #### open

          long open​(DataSpec dataSpec)
             throws HttpDataSource.HttpDataSourceException

      Opens the source to read the specified data.

      Note: `HttpDataSource` implementations are advised to set request headers passed via (in order of decreasing priority) the `dataSpec`, `setRequestProperty(java.lang.String, java.lang.String)` and the default parameters set in the `HttpDataSource.Factory`.

      Specified by:
        `open` in interface `DataSource`
      Parameters:
        `dataSpec` - Defines the data to be read.
      Returns:
        The number of bytes that can be read from the opened source. For unbounded requests (i.e., requests where `DataSpec.length` equals `C.LENGTH_UNSET`) this value is the resolved length of the request, or `C.LENGTH_UNSET` if the length is still unresolved. For all other requests, the value returned will be equal to the request's `DataSpec.length`.
      Throws:
        `HttpDataSource.HttpDataSourceException`

    - #### close

          void close()
              throws HttpDataSource.HttpDataSourceException

      Description copied from interface: `DataSource`
      Closes the source. This method must be called even if the corresponding call to `DataSource.open(DataSpec)` threw an `IOException`.
      Specified by:
        `close` in interface `DataSource`
      Throws:
        `HttpDataSource.HttpDataSourceException`

    - #### read

          int read​(byte[] buffer,
                   int offset,
                   int readLength)
            throws HttpDataSource.HttpDataSourceException

      Description copied from interface: `DataReader`
      Reads up to `length` bytes of data from the input.

      If `readLength` is zero then 0 is returned. Otherwise, if no data is available because the end of the opened range has been reached, then `C.RESULT_END_OF_INPUT` is returned. Otherwise, the call will block until at least one byte of data has been read and the number of bytes read is returned.

      Specified by:
        `read` in interface `DataReader`
      Parameters:
        `buffer` - A target array into which data should be written.
        `offset` - The offset into the target array at which to write.
        `readLength` - The maximum number of bytes to read from the input.
      Returns:
        The number of bytes read, or `C.RESULT_END_OF_INPUT` if the input has ended. This may be less than `length` because the end of the input (or available data) was reached, the method was interrupted, or the operation was aborted early for another reason.
      Throws:
        `HttpDataSource.HttpDataSourceException`

    - #### setRequestProperty

          void setRequestProperty​(String name,
                                  String value)

      Sets the value of a request header. The value will be used for subsequent connections established by the source.

      Note: If the same header is set as a default parameter in the `HttpDataSource.Factory`, then the header value set with this method should be preferred when connecting with the data source. See `open(com.google.android.exoplayer2.upstream.DataSpec)`.

      Parameters:
        `name` - The name of the header field.
        `value` - The value of the field.

    - #### clearRequestProperty

          void clearRequestProperty​(String name)

      Clears the value of a request header. The change will apply to subsequent connections established by the source.
      Parameters:
        `name` - The name of the header field.

    - #### clearAllRequestProperties

          void clearAllRequestProperties()

      Clears all request headers that were set by `setRequestProperty(String, String)`.

    - #### getResponseCode

          int getResponseCode()

      When the source is open, returns the HTTP response status code associated with the last `open(com.google.android.exoplayer2.upstream.DataSpec)` call. Otherwise, returns a negative value.

    - #### getResponseHeaders

          Map<String,​List<String>> getResponseHeaders()

      Description copied from interface: `DataSource`
      When the source is open, returns the response headers associated with the last `DataSource.open(com.google.android.exoplayer2.upstream.DataSpec)` call. Otherwise, returns an empty map.

      Key look-up in the returned map is case-insensitive.

      Specified by:
        `getResponseHeaders` in interface `DataSource`