Perfume Of Love v2.14.9版本的 MD5 值为:16011aefc5a55805771706ce3b259b4e
以下内容为反编译后的 HttpMediaDrmCallback.java 源代码,内容仅作参考
package com.mbridge.msdk.playercommon.exoplayer2.drm;
import android.net.Uri;
import android.text.TextUtils;
import com.mbridge.msdk.playercommon.exoplayer2.C;
import com.mbridge.msdk.playercommon.exoplayer2.drm.ExoMediaDrm;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.DataSourceInputStream;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.DataSpec;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.HttpDataSource;
import com.mbridge.msdk.playercommon.exoplayer2.util.Assertions;
import com.mbridge.msdk.playercommon.exoplayer2.util.Util;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public final class HttpMediaDrmCallback implements MediaDrmCallback {
private static final int MAX_MANUAL_REDIRECTS = 5;
private final HttpDataSource.Factory dataSourceFactory;
private final String defaultLicenseUrl;
private final boolean forceDefaultLicenseUrl;
private final Map<String, String> keyRequestProperties;
public HttpMediaDrmCallback(String str, HttpDataSource.Factory factory) {
this(str, false, factory);
}
public HttpMediaDrmCallback(String str, boolean z, HttpDataSource.Factory factory) {
this.dataSourceFactory = factory;
this.defaultLicenseUrl = str;
this.forceDefaultLicenseUrl = z;
this.keyRequestProperties = new HashMap();
}
public final void setKeyRequestProperty(String str, String str2) {
Assertions.checkNotNull(str);
Assertions.checkNotNull(str2);
synchronized (this.keyRequestProperties) {
this.keyRequestProperties.put(str, str2);
}
}
public final void clearKeyRequestProperty(String str) {
Assertions.checkNotNull(str);
synchronized (this.keyRequestProperties) {
this.keyRequestProperties.remove(str);
}
}
public final void clearAllKeyRequestProperties() {
synchronized (this.keyRequestProperties) {
this.keyRequestProperties.clear();
}
}
@Override
public final byte[] executeProvisionRequest(UUID uuid, ExoMediaDrm.ProvisionRequest provisionRequest) throws IOException {
return executePost(this.dataSourceFactory, provisionRequest.getDefaultUrl() + "&signedRequest=" + Util.fromUtf8Bytes(provisionRequest.getData()), new byte[0], null);
}
@Override
public final byte[] executeKeyRequest(UUID uuid, ExoMediaDrm.KeyRequest keyRequest, String str) throws Exception {
String str2;
String defaultUrl = keyRequest.getDefaultUrl();
if (!TextUtils.isEmpty(defaultUrl)) {
str = defaultUrl;
}
if (this.forceDefaultLicenseUrl || TextUtils.isEmpty(str)) {
str = this.defaultLicenseUrl;
}
HashMap hashMap = new HashMap();
if (C.PLAYREADY_UUID.equals(uuid)) {
str2 = "text/xml";
} else {
str2 = C.CLEARKEY_UUID.equals(uuid) ? "application/json" : "application/octet-stream";
}
hashMap.put("Content-Type", str2);
if (C.PLAYREADY_UUID.equals(uuid)) {
hashMap.put("SOAPAction", "http://schemas.microsoft.com/DRM/2007/03/protocols/AcquireLicense");
}
synchronized (this.keyRequestProperties) {
hashMap.putAll(this.keyRequestProperties);
}
return executePost(this.dataSourceFactory, str, keyRequest.getData(), hashMap);
}
private static byte[] executePost(HttpDataSource.Factory factory, String str, byte[] bArr, Map<String, String> map) throws IOException {
int i;
boolean z;
String redirectUrl;
HttpDataSource createDataSource = factory.createDataSource();
if (map != null) {
for (Map.Entry<String, String> entry : map.entrySet()) {
createDataSource.setRequestProperty(entry.getKey(), entry.getValue());
}
}
String str2 = str;
int i2 = 0;
while (true) {
DataSourceInputStream dataSourceInputStream = new DataSourceInputStream(createDataSource, new DataSpec(Uri.parse(str2), bArr, 0L, 0L, -1L, null, 1));
try {
try {
return Util.toByteArray(dataSourceInputStream);
} catch (HttpDataSource.InvalidResponseCodeException e) {
if (e.responseCode == 307 || e.responseCode == 308) {
i = i2 + 1;
if (i2 < 5) {
z = true;
redirectUrl = !z ? getRedirectUrl(e) : null;
if (redirectUrl != null) {
throw e;
}
Util.closeQuietly(dataSourceInputStream);
String str3 = redirectUrl;
i2 = i;
str2 = str3;
} else {
i2 = i;
}
}
i = i2;
z = false;
if (!z) {
}
if (redirectUrl != null) {
}
}
} finally {
Util.closeQuietly(dataSourceInputStream);
}
}
}
private static String getRedirectUrl(HttpDataSource.InvalidResponseCodeException invalidResponseCodeException) {
List<String> list;
Map<String, List<String>> map = invalidResponseCodeException.headerFields;
if (map == null || (list = map.get("Location")) == null || list.isEmpty()) {
return null;
}
return list.get(0);
}
}