diff --git a/library/common/src/main/java/com/google/android/exoplayer2/PlaybackException.java b/library/common/src/main/java/com/google/android/exoplayer2/PlaybackException.java index 4978294e9d..a8ee7a9e8a 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/PlaybackException.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/PlaybackException.java @@ -52,6 +52,7 @@ public class PlaybackException extends Exception implements Bundleable { ERROR_CODE_IO_NETWORK_CONNECTION_FAILED, ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT, ERROR_CODE_IO_NETWORK_CONNECTION_CLOSED, + ERROR_CODE_IO_BAD_HTTP_REQUEST, ERROR_CODE_IO_BAD_HTTP_STATUS, ERROR_CODE_IO_DNS_FAILED, ERROR_CODE_IO_FILE_NOT_FOUND, @@ -106,17 +107,19 @@ public class PlaybackException extends Exception implements Bundleable { public static final int ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT = 2003; /** Caused by an existing connection being unexpectedly closed. */ public static final int ERROR_CODE_IO_NETWORK_CONNECTION_CLOSED = 2004; + /** Caused by creating a malformed HTTP request. */ + public static final int ERROR_CODE_IO_BAD_HTTP_REQUEST = 2005; /** Caused by an HTTP server returning an unexpected HTTP response status code. */ - public static final int ERROR_CODE_IO_BAD_HTTP_STATUS = 2005; + public static final int ERROR_CODE_IO_BAD_HTTP_STATUS = 2006; /** Caused by the player failing to resolve a hostname. */ - public static final int ERROR_CODE_IO_DNS_FAILED = 2006; + public static final int ERROR_CODE_IO_DNS_FAILED = 2007; /** Caused by a non-existent file. */ - public static final int ERROR_CODE_IO_FILE_NOT_FOUND = 2007; + public static final int ERROR_CODE_IO_FILE_NOT_FOUND = 2008; /** * Caused by lack of permission to perform an IO operation. For example, lack of permission to * access internet or external storage. */ - public static final int ERROR_CODE_IO_NO_PERMISSION = 2008; + public static final int ERROR_CODE_IO_NO_PERMISSION = 2009; /** * Caused by the player trying to access cleartext HTTP traffic (meaning http:// rather than * https://) when the app's Network Security Configuration does not permit it. @@ -124,9 +127,9 @@ public class PlaybackException extends Exception implements Bundleable { *
See this corresponding
* troubleshooting topic.
*/
- public static final int ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED = 2009;
+ public static final int ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED = 2010;
/** Caused by reading data out of the data bound. */
- public static final int ERROR_CODE_IO_READ_POSITION_OUT_OF_RANGE = 2010;
+ public static final int ERROR_CODE_IO_READ_POSITION_OUT_OF_RANGE = 2011;
// Content parsing errors (3xxx).
@@ -217,6 +220,8 @@ public class PlaybackException extends Exception implements Bundleable {
return "ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT";
case ERROR_CODE_IO_NETWORK_CONNECTION_CLOSED:
return "ERROR_CODE_IO_NETWORK_CONNECTION_CLOSED";
+ case ERROR_CODE_IO_BAD_HTTP_REQUEST:
+ return "ERROR_CODE_IO_BAD_HTTP_REQUEST";
case ERROR_CODE_IO_BAD_HTTP_STATUS:
return "ERROR_CODE_IO_BAD_HTTP_STATUS";
case ERROR_CODE_IO_DNS_FAILED:
diff --git a/library/common/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java b/library/common/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java
index ef128f3255..87c82316ea 100644
--- a/library/common/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java
+++ b/library/common/src/main/java/com/google/android/exoplayer2/upstream/HttpDataSource.java
@@ -190,24 +190,113 @@ public interface HttpDataSource extends DataSource {
/** The {@link DataSpec} associated with the current connection. */
public final DataSpec dataSpec;
+ /**
+ * @deprecated Use {@link #HttpDataSourceException(DataSpec, int, int)
+ * HttpDataSourceException(DataSpec, PlaybackException.ERROR_CODE_IO_UNSPECIFIED, int)}.
+ */
+ @Deprecated
public HttpDataSourceException(DataSpec dataSpec, @Type int type) {
- super(PlaybackException.ERROR_CODE_IO_UNSPECIFIED, type);
+ this(dataSpec, PlaybackException.ERROR_CODE_IO_UNSPECIFIED, type);
+ }
+
+ /**
+ * Constructs an HttpDataSourceException.
+ *
+ * @param dataSpec The {@link DataSpec}.
+ * @param errorCode Reason of the error, should be one of the {@code ERROR_CODE_IO_*} in {@link
+ * PlaybackException.ErrorCode}.
+ * @param type See {@link Type}.
+ */
+ public HttpDataSourceException(
+ DataSpec dataSpec, @PlaybackException.ErrorCode int errorCode, @Type int type) {
+ super(errorCode, type);
this.dataSpec = dataSpec;
}
+ /**
+ * @deprecated Use {@link #HttpDataSourceException(String, DataSpec, int, int)
+ * HttpDataSourceException(String, DataSpec, PlaybackException.ERROR_CODE_IO_UNSPECIFIED,
+ * int)}.
+ */
+ @Deprecated
public HttpDataSourceException(String message, DataSpec dataSpec, @Type int type) {
- super(message, PlaybackException.ERROR_CODE_IO_UNSPECIFIED, type);
+ this(message, dataSpec, PlaybackException.ERROR_CODE_IO_UNSPECIFIED, type);
+ }
+
+ /**
+ * Constructs an HttpDataSourceException.
+ *
+ * @param message The error message.
+ * @param dataSpec The {@link DataSpec}.
+ * @param errorCode Reason of the error, should be one of the {@code ERROR_CODE_IO_*} in {@link
+ * PlaybackException.ErrorCode}.
+ * @param type See {@link Type}.
+ */
+ public HttpDataSourceException(
+ String message,
+ DataSpec dataSpec,
+ @PlaybackException.ErrorCode int errorCode,
+ @Type int type) {
+ super(message, errorCode, type);
this.dataSpec = dataSpec;
}
+ /**
+ * @deprecated Use {@link #HttpDataSourceException(IOException, DataSpec, int, int)
+ * HttpDataSourceException(IOException, DataSpec,
+ * PlaybackException.ERROR_CODE_IO_UNSPECIFIED, int)}.
+ */
+ @Deprecated
public HttpDataSourceException(IOException cause, DataSpec dataSpec, @Type int type) {
- super(cause, PlaybackException.ERROR_CODE_IO_UNSPECIFIED, type);
+ this(cause, dataSpec, PlaybackException.ERROR_CODE_IO_UNSPECIFIED, type);
+ }
+
+ /**
+ * Constructs an HttpDataSourceException.
+ *
+ * @param cause The error cause.
+ * @param dataSpec The {@link DataSpec}.
+ * @param errorCode Reason of the error, should be one of the {@code ERROR_CODE_IO_*} in {@link
+ * PlaybackException.ErrorCode}.
+ * @param type See {@link Type}.
+ */
+ public HttpDataSourceException(
+ IOException cause,
+ DataSpec dataSpec,
+ @PlaybackException.ErrorCode int errorCode,
+ @Type int type) {
+ super(cause, errorCode, type);
this.dataSpec = dataSpec;
}
+ /**
+ * @deprecated Use {@link #HttpDataSourceException(String, IOException, DataSpec, int, int)
+ * HttpDataSourceException(String, IOException, DataSpec,
+ * PlaybackException.ERROR_CODE_IO_UNSPECIFIED, int)}.
+ */
+ @Deprecated
public HttpDataSourceException(
String message, IOException cause, DataSpec dataSpec, @Type int type) {
- super(message, cause, PlaybackException.ERROR_CODE_IO_UNSPECIFIED, type);
+ this(message, cause, dataSpec, PlaybackException.ERROR_CODE_IO_UNSPECIFIED, type);
+ }
+
+ /**
+ * Constructs an HttpDataSourceException.
+ *
+ * @param message The error message.
+ * @param cause The error cause.
+ * @param dataSpec The {@link DataSpec}.
+ * @param errorCode Reason of the error, should be one of the {@code ERROR_CODE_IO_*} in {@link
+ * PlaybackException.ErrorCode}.
+ * @param type See {@link Type}.
+ */
+ public HttpDataSourceException(
+ String message,
+ IOException cause,
+ DataSpec dataSpec,
+ @PlaybackException.ErrorCode int errorCode,
+ @Type int type) {
+ super(message, cause, errorCode, type);
this.dataSpec = dataSpec;
}
}
@@ -226,6 +315,7 @@ public interface HttpDataSource extends DataSource {
+ " https://exoplayer.dev/issues/cleartext-not-permitted",
cause,
dataSpec,
+ PlaybackException.ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED,
TYPE_OPEN);
}
}
@@ -236,7 +326,11 @@ public interface HttpDataSource extends DataSource {
public final String contentType;
public InvalidContentTypeException(String contentType, DataSpec dataSpec) {
- super("Invalid content type: " + contentType, dataSpec, TYPE_OPEN);
+ super(
+ "Invalid content type: " + contentType,
+ dataSpec,
+ PlaybackException.ERROR_CODE_IO_BAD_HTTP_REQUEST,
+ TYPE_OPEN);
this.contentType = contentType;
}
}
@@ -295,7 +389,11 @@ public interface HttpDataSource extends DataSource {
Map