From f5c1e8b5e31895c0497f1e89ebb64f59a99961f5 Mon Sep 17 00:00:00 2001 From: olly Date: Thu, 29 Aug 2019 21:41:19 +0100 Subject: [PATCH] Add HttpDataSource.getResponseCode to provide the status code associated with the most recent HTTP response. PiperOrigin-RevId: 266218104 --- RELEASENOTES.md | 2 ++ .../android/exoplayer2/ext/cronet/CronetDataSource.java | 7 +++++++ .../android/exoplayer2/ext/okhttp/OkHttpDataSource.java | 5 +++++ .../android/exoplayer2/upstream/DefaultHttpDataSource.java | 7 ++++++- .../google/android/exoplayer2/upstream/HttpDataSource.java | 6 ++++++ 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 5f7d5bea9c..c58841c2b3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -46,6 +46,8 @@ postroll ad ([#6314](https://github.com/google/ExoPlayer/issues/6314)). * Fix audio selection issue where languages are compared by bit rate ([#6335](https://github.com/google/ExoPlayer/issues/6335)). +* Add `HttpDataSource.getResponseCode` to provide the status code associated + with the most recent HTTP response. ### 2.10.4 ### diff --git a/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSource.java b/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSource.java index ed92523017..bff1672e62 100644 --- a/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSource.java +++ b/extensions/cronet/src/main/java/com/google/android/exoplayer2/ext/cronet/CronetDataSource.java @@ -392,6 +392,13 @@ public class CronetDataSource extends BaseDataSource implements HttpDataSource { requestProperties.clear(); } + @Override + public int getResponseCode() { + return responseInfo == null || responseInfo.getHttpStatusCode() <= 0 + ? -1 + : responseInfo.getHttpStatusCode(); + } + @Override public Map> getResponseHeaders() { return responseInfo == null ? Collections.emptyMap() : responseInfo.getAllHeaders(); diff --git a/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java b/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java index ec05c52f44..1a6a67b140 100644 --- a/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java +++ b/extensions/okhttp/src/main/java/com/google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java @@ -172,6 +172,11 @@ public class OkHttpDataSource extends BaseDataSource implements HttpDataSource { return response == null ? null : Uri.parse(response.request().url().toString()); } + @Override + public int getResponseCode() { + return response == null ? -1 : response.code(); + } + @Override public Map> getResponseHeaders() { return response == null ? Collections.emptyMap() : response.headers().toMultimap(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java index 3ee1ef7564..e28c133a26 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java @@ -83,6 +83,7 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou @Nullable private HttpURLConnection connection; @Nullable private InputStream inputStream; private boolean opened; + private int responseCode; private long bytesToSkip; private long bytesToRead; @@ -234,6 +235,11 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou return connection == null ? null : Uri.parse(connection.getURL().toString()); } + @Override + public int getResponseCode() { + return connection == null || responseCode <= 0 ? -1 : responseCode; + } + @Override public Map> getResponseHeaders() { return connection == null ? Collections.emptyMap() : connection.getHeaderFields(); @@ -270,7 +276,6 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou dataSpec, HttpDataSourceException.TYPE_OPEN); } - int responseCode; String responseMessage; try { responseCode = connection.getResponseCode(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java index 17fb4ad7a1..778c116e01 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java @@ -357,6 +357,12 @@ public interface HttpDataSource extends DataSource { */ void clearAllRequestProperties(); + /** + * When the source is open, returns the HTTP response status code associated with the last {@link + * #open} call. Otherwise, returns a negative value. + */ + int getResponseCode(); + @Override Map> getResponseHeaders(); }