From 625c46e963c85feac348bada5e33f91b5a28420a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuele=20Tid=C3=B3?= Date: Wed, 30 Dec 2020 16:50:04 +0000 Subject: [PATCH 1/7] throw InvalidResponseCodeException instead of HttpDataSourceException if responseCode and responseMessage ara available always throws an InvalidResponseCodeException instead of HttpDataSourceException, so in onPlayerError method the http status code and message can be used to decide what will be the next step. --- .../android/exoplayer2/upstream/DefaultHttpDataSource.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 15bee2c118..f25430edc4 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 @@ -377,8 +377,8 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou errorResponseBody = errorStream != null ? Util.toByteArray(errorStream) : Util.EMPTY_BYTE_ARRAY; } catch (IOException e) { - throw new HttpDataSourceException( - "Error reading non-2xx response body", e, dataSpec, HttpDataSourceException.TYPE_OPEN); + throw new InvalidResponseCodeException( + responseCode, responseMessage, headers, dataSpec, null); } closeConnectionQuietly(); InvalidResponseCodeException exception = From 15a59d93eef2cc3afae2555da65e92a30609dda0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuele=20Tid=C3=B3?= Date: Wed, 30 Dec 2020 16:57:50 +0000 Subject: [PATCH 2/7] throw exception improved if responseCode and responseMessage ara available always throws an InvalidResponseCodeException instead of HttpDataSourceException, so in onPlayerError method the http status code and message can be used to decide what will be the next step. --- .../android/exoplayer2/ext/okhttp/OkHttpDataSource.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 92bf8281f5..97426a48d2 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 @@ -304,14 +304,14 @@ public class OkHttpDataSource extends BaseDataSource implements HttpDataSource { // Check for a valid response code. if (!response.isSuccessful()) { + Map> headers = response.headers().toMultimap(); byte[] errorResponseBody; try { errorResponseBody = Util.toByteArray(Assertions.checkNotNull(responseByteStream)); } catch (IOException e) { - throw new HttpDataSourceException( - "Error reading non-2xx response body", e, dataSpec, HttpDataSourceException.TYPE_OPEN); + throw new InvalidResponseCodeException( + responseCode, response.message(), headers, dataSpec, null); } - Map> headers = response.headers().toMultimap(); closeConnectionQuietly(); InvalidResponseCodeException exception = new InvalidResponseCodeException( From ee0d4a5b3e50a754871719112d6f01a01f3d3ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuele=20Tid=C3=B3?= Date: Wed, 30 Dec 2020 17:01:36 +0000 Subject: [PATCH 3/7] Update DefaultHttpDataSource.java --- .../android/exoplayer2/upstream/DefaultHttpDataSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f25430edc4..600a646f3b 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 @@ -378,7 +378,7 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou errorStream != null ? Util.toByteArray(errorStream) : Util.EMPTY_BYTE_ARRAY; } catch (IOException e) { throw new InvalidResponseCodeException( - responseCode, responseMessage, headers, dataSpec, null); + responseCode, responseMessage, headers, dataSpec, null); } closeConnectionQuietly(); InvalidResponseCodeException exception = From 654890846a0006a4bcb990dbf7aaeb86945fd4d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuele=20Tid=C3=B3?= Date: Wed, 6 Jan 2021 00:10:56 +0000 Subject: [PATCH 4/7] Update DefaultHttpDataSource.java set responseBody to Util.EMPTY_BYTE_ARRAY when an IOException occurs trying to get his value from inputStream --- .../android/exoplayer2/upstream/DefaultHttpDataSource.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 600a646f3b..c0893b85c0 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 @@ -377,8 +377,7 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou errorResponseBody = errorStream != null ? Util.toByteArray(errorStream) : Util.EMPTY_BYTE_ARRAY; } catch (IOException e) { - throw new InvalidResponseCodeException( - responseCode, responseMessage, headers, dataSpec, null); + errorResponseBody = Util.EMPTY_BYTE_ARRAY; } closeConnectionQuietly(); InvalidResponseCodeException exception = From 91a09ea320582a99f3da1773d569fdb1bb411302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuele=20Tid=C3=B3?= Date: Wed, 6 Jan 2021 00:12:55 +0000 Subject: [PATCH 5/7] Update OkHttpDataSource.java set responseBody to Util.EMPTY_BYTE_ARRAY when an IOException occurs trying to get his value from inputStream --- .../google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 97426a48d2..37018b3034 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 @@ -309,8 +309,7 @@ public class OkHttpDataSource extends BaseDataSource implements HttpDataSource { try { errorResponseBody = Util.toByteArray(Assertions.checkNotNull(responseByteStream)); } catch (IOException e) { - throw new InvalidResponseCodeException( - responseCode, response.message(), headers, dataSpec, null); + errorResponseBody = Util.EMPTY_BYTE_ARRAY; } closeConnectionQuietly(); InvalidResponseCodeException exception = From 75b222d8d4a06135657f9b7929ffba08d902f73c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuele=20Tid=C3=B3?= Date: Wed, 6 Jan 2021 00:17:13 +0000 Subject: [PATCH 6/7] Update DefaultHttpDataSource.java --- .../android/exoplayer2/upstream/DefaultHttpDataSource.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 c0893b85c0..abb7f77f60 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 @@ -369,8 +369,7 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou } // Check for a valid response code. - if (responseCode < 200 || responseCode > 299) { - Map> headers = connection.getHeaderFields(); + if (responseCode < 200 || responseCode > 299) { @Nullable InputStream errorStream = connection.getErrorStream(); byte[] errorResponseBody; try { @@ -379,6 +378,7 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou } catch (IOException e) { errorResponseBody = Util.EMPTY_BYTE_ARRAY; } + Map> headers = connection.getHeaderFields(); closeConnectionQuietly(); InvalidResponseCodeException exception = new InvalidResponseCodeException( From 6d4b364530dfde7964f4bab463bbe5cf312c172b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuele=20Tid=C3=B3?= Date: Wed, 6 Jan 2021 00:19:06 +0000 Subject: [PATCH 7/7] Update OkHttpDataSource.java --- .../google/android/exoplayer2/ext/okhttp/OkHttpDataSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 37018b3034..fe551bb15c 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 @@ -304,13 +304,13 @@ public class OkHttpDataSource extends BaseDataSource implements HttpDataSource { // Check for a valid response code. if (!response.isSuccessful()) { - Map> headers = response.headers().toMultimap(); byte[] errorResponseBody; try { errorResponseBody = Util.toByteArray(Assertions.checkNotNull(responseByteStream)); } catch (IOException e) { errorResponseBody = Util.EMPTY_BYTE_ARRAY; } + Map> headers = response.headers().toMultimap(); closeConnectionQuietly(); InvalidResponseCodeException exception = new InvalidResponseCodeException(