From 4364f564dea24d68875d315052740a4bc4512f23 Mon Sep 17 00:00:00 2001 From: Kelvin Date: Mon, 22 Jan 2024 14:51:16 +0100 Subject: [PATCH 1/2] WIP adding method/body --- app/src/main/assets/devportal/plugin.d.ts | 4 +++- .../api/media/models/modifier/IRequest.kt | 4 +++- .../media/platforms/js/models/JSRequest.kt | 15 ++++++++++++-- .../video/datasources/JSHttpDataSource.java | 20 ++++++++++++++++--- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/app/src/main/assets/devportal/plugin.d.ts b/app/src/main/assets/devportal/plugin.d.ts index 23db7d2f..ccdf2a16 100644 --- a/app/src/main/assets/devportal/plugin.d.ts +++ b/app/src/main/assets/devportal/plugin.d.ts @@ -243,7 +243,9 @@ declare class DashSource implements IVideoSource { declare interface IRequest { url: string, - headers: Map + headers: Map?, + method: string?, + body: string? } declare interface IRequestModifierDef { allowByteSkip: boolean diff --git a/app/src/main/java/com/futo/platformplayer/api/media/models/modifier/IRequest.kt b/app/src/main/java/com/futo/platformplayer/api/media/models/modifier/IRequest.kt index 43cd502c..83e00a12 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/models/modifier/IRequest.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/models/modifier/IRequest.kt @@ -2,5 +2,7 @@ package com.futo.platformplayer.api.media.models.modifier interface IRequest { val url: String?; - val headers: Map; + val headers: Map?; + val method: String?; + val body: String?; } \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequest.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequest.kt index bc3b6bfc..40a185e8 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequest.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequest.kt @@ -13,14 +13,20 @@ class JSRequest : IRequest { private val _v8Url: String?; private val _v8Headers: Map?; private val _v8Options: Options?; + private val _v8Method: String?; + private val _v8Body: String?; override var url: String? = null; override lateinit var headers: Map; + override var method: String? = null; + override var body: String? = null; - constructor(plugin: JSClient, url: String?, headers: Map?, options: Options?, originalUrl: String?, originalHeaders: Map?) { + constructor(plugin: JSClient, url: String?, headers: Map?, method: String?, body: String? = null, options: Options?, originalUrl: String?, originalHeaders: Map?) { _v8Url = url; _v8Headers = headers; _v8Options = options; + _v8Method = method; + _v8Body = body; initialize(plugin, originalUrl, originalHeaders); } constructor(plugin: JSClient, obj: V8ValueObject, originalUrl: String?, originalHeaders: Map?, applyOtherHeadersByDefault: Boolean = false) { @@ -31,12 +37,17 @@ class JSRequest : IRequest { _v8Options = obj.getOrDefault(config, "options", "JSRequestModifier.options", null)?.let { Options(config, it, applyOtherHeadersByDefault); } ?: Options(null, null, applyOtherHeadersByDefault); + _v8Method = obj.getOrDefault(config, "method", contextName, null); + _v8Body = obj.getOrDefault(config, "body", contextName, null); + initialize(plugin, originalUrl, originalHeaders); } private fun initialize(plugin: JSClient, originalUrl: String?, originalHeaders: Map?) { val config = plugin.config; url = _v8Url ?: originalUrl; + method = _v8Method; + body = _v8Body; if(_v8Options?.applyOtherHeaders ?: false) { val headersToSet = _v8Headers?.toMutableMap() ?: mutableMapOf(); @@ -70,7 +81,7 @@ class JSRequest : IRequest { } fun modify(plugin: JSClient, originalUrl: String?, originalHeaders: Map?): JSRequest { - return JSRequest(plugin, _v8Url, _v8Headers, _v8Options, originalUrl, originalHeaders); + return JSRequest(plugin, _v8Url, _v8Headers, _v8Method, _v8Body, _v8Options, originalUrl, originalHeaders); } diff --git a/app/src/main/java/com/futo/platformplayer/views/video/datasources/JSHttpDataSource.java b/app/src/main/java/com/futo/platformplayer/views/video/datasources/JSHttpDataSource.java index 4c99ccb9..f67ae687 100644 --- a/app/src/main/java/com/futo/platformplayer/views/video/datasources/JSHttpDataSource.java +++ b/app/src/main/java/com/futo/platformplayer/views/video/datasources/JSHttpDataSource.java @@ -39,6 +39,7 @@ import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.NoRouteToHostException; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -574,12 +575,25 @@ public class JSHttpDataSource extends BaseDataSource implements HttpDataSource { requestHeaders.put(HttpHeaders.ACCEPT_ENCODING, allowGzip ? "gzip" : "identity"); + String requestMethod = DataSpec.getStringForHttpMethod(httpMethod); String requestUrl = url.toString(); if (requestModifier != null) { IRequest result = requestModifier.modifyRequest(requestUrl, requestHeaders); String modifiedUrl = result.getUrl(); - requestUrl = (modifiedUrl != null) ? modifiedUrl : requestUrl; - requestHeaders = result.getHeaders(); + if (modifiedUrl != null) + requestUrl = modifiedUrl; + + Map modifiedHeaders = result.getHeaders(); + if (modifiedHeaders != null) + requestHeaders = modifiedHeaders; + + String modifiedMethod = result.getMethod(); + if (modifiedMethod != null) + requestMethod = modifiedMethod; + + String modifiedBody = result.getBody(); + if (modifiedBody != null) + httpBody = modifiedBody.getBytes(StandardCharsets.UTF_8); } HttpURLConnection connection = openConnection(new URL(requestUrl)); @@ -592,7 +606,7 @@ public class JSHttpDataSource extends BaseDataSource implements HttpDataSource { connection.setInstanceFollowRedirects(followRedirects); connection.setDoOutput(httpBody != null); - connection.setRequestMethod(DataSpec.getStringForHttpMethod(httpMethod)); + connection.setRequestMethod(requestMethod); if (httpBody != null) { connection.setFixedLengthStreamingMode(httpBody.length); From dc612dce7e5f6218def30d7117f236fe0962e90c Mon Sep 17 00:00:00 2001 From: Kelvin Date: Mon, 22 Jan 2024 15:35:39 +0100 Subject: [PATCH 2/2] Signature --- .../api/media/platforms/js/models/JSRequestModifier.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestModifier.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestModifier.kt index 150189e7..a3fdad7f 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestModifier.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestModifier.kt @@ -45,5 +45,8 @@ class JSRequestModifier: IRequestModifier { } - data class Request(override val url: String, override val headers: Map) : IRequest; + data class Request(override val url: String, + override val headers: Map, + override val method: String? = null, + override val body: String? = null) : IRequest; } \ No newline at end of file