mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-04-20 03:24:50 +00:00
Chromecast protobuf cleanup and fixed Odysee content-types being misrepresented causing casting to desktop to break.
This commit is contained in:
parent
6d9f4959e0
commit
0fd8ba28bb
5 changed files with 27 additions and 91 deletions
|
@ -5,7 +5,7 @@ import android.util.Log
|
|||
import com.futo.platformplayer.logging.Logger
|
||||
import com.futo.platformplayer.getConnectedSocket
|
||||
import com.futo.platformplayer.models.CastingDeviceInfo
|
||||
import com.futo.platformplayer.protos.DeviceAuthMessageOuterClass
|
||||
import com.futo.platformplayer.protos.ChromeCast
|
||||
import com.futo.platformplayer.toHexString
|
||||
import com.futo.platformplayer.toInetAddress
|
||||
import kotlinx.coroutines.*
|
||||
|
@ -374,7 +374,7 @@ class ChromecastCastingDevice : CastingDevice {
|
|||
//TODO: In the future perhaps this size-1 will cause issues, why is there a 0 on the end?
|
||||
val messageBytes = buffer.sliceArray(IntRange(0, size - 1));
|
||||
Log.d(TAG, "Received $size bytes: ${messageBytes.toHexString()}.");
|
||||
val message = DeviceAuthMessageOuterClass.CastMessage.parseFrom(messageBytes);
|
||||
val message = ChromeCast.CastMessage.parseFrom(messageBytes);
|
||||
if (message.namespace != "urn:x-cast:com.google.cast.tp.heartbeat") {
|
||||
Logger.i(TAG, "Received message: $message");
|
||||
}
|
||||
|
@ -427,12 +427,12 @@ class ChromecastCastingDevice : CastingDevice {
|
|||
|
||||
private fun sendChannelMessage(sourceId: String, destinationId: String, namespace: String, json: String) {
|
||||
try {
|
||||
val castMessage = DeviceAuthMessageOuterClass.CastMessage.newBuilder()
|
||||
.setProtocolVersion(DeviceAuthMessageOuterClass.CastMessage.ProtocolVersion.CASTV2_1_0)
|
||||
val castMessage = ChromeCast.CastMessage.newBuilder()
|
||||
.setProtocolVersion(ChromeCast.CastMessage.ProtocolVersion.CASTV2_1_0)
|
||||
.setSourceId(sourceId)
|
||||
.setDestinationId(destinationId)
|
||||
.setNamespace(namespace)
|
||||
.setPayloadType(DeviceAuthMessageOuterClass.CastMessage.PayloadType.STRING)
|
||||
.setPayloadType(ChromeCast.CastMessage.PayloadType.STRING)
|
||||
.setPayloadUtf8(json)
|
||||
.build();
|
||||
|
||||
|
@ -446,8 +446,8 @@ class ChromecastCastingDevice : CastingDevice {
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleMessage(message: DeviceAuthMessageOuterClass.CastMessage) {
|
||||
if (message.payloadType == DeviceAuthMessageOuterClass.CastMessage.PayloadType.STRING) {
|
||||
private fun handleMessage(message: ChromeCast.CastMessage) {
|
||||
if (message.payloadType == ChromeCast.CastMessage.PayloadType.STRING) {
|
||||
val jsonObject = JSONObject(message.payloadUtf8);
|
||||
val type = jsonObject.getString("type");
|
||||
if (type == "RECEIVER_STATUS") {
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
syntax = "proto2";
|
||||
option optimize_for = LITE_RUNTIME;
|
||||
package com.futo.platformplayer.protos;
|
||||
|
||||
message CastMessage {
|
||||
enum ProtocolVersion { CASTV2_1_0 = 0; }
|
||||
required ProtocolVersion protocol_version = 1;
|
||||
required string source_id = 2;
|
||||
required string destination_id = 3;
|
||||
required string namespace = 4;
|
||||
enum PayloadType {
|
||||
STRING = 0;
|
||||
BINARY = 1;
|
||||
}
|
||||
required PayloadType payload_type = 5;
|
||||
optional string payload_utf8 = 6;
|
||||
optional bytes payload_binary = 7;
|
||||
}
|
|
@ -1,82 +0,0 @@
|
|||
syntax = "proto2";
|
||||
option optimize_for = LITE_RUNTIME;
|
||||
package com.futo.platformplayer.protos;
|
||||
|
||||
message CastMessage {
|
||||
// Always pass a version of the protocol for future compatibility
|
||||
// requirements.
|
||||
enum ProtocolVersion { CASTV2_1_0 = 0; }
|
||||
required ProtocolVersion protocol_version = 1;
|
||||
// source and destination ids identify the origin and destination of the
|
||||
// message. They are used to route messages between endpoints that share a
|
||||
// device-to-device channel.
|
||||
//
|
||||
// For messages between applications:
|
||||
// - The sender application id is a unique identifier generated on behalf of
|
||||
// the sender application.
|
||||
// - The receiver id is always the the session id for the application.
|
||||
//
|
||||
// For messages to or from the sender or receiver platform, the special ids
|
||||
// 'sender-0' and 'receiver-0' can be used.
|
||||
//
|
||||
// For messages intended for all endpoints using a given channel, the
|
||||
// wildcard destination_id '*' can be used.
|
||||
required string source_id = 2;
|
||||
required string destination_id = 3;
|
||||
// This is the core multiplexing key. All messages are sent on a namespace
|
||||
// and endpoints sharing a channel listen on one or more namespaces. The
|
||||
// namespace defines the protocol and semantics of the message.
|
||||
required string namespace = 4;
|
||||
// Encoding and payload info follows.
|
||||
// What type of data do we have in this message.
|
||||
enum PayloadType {
|
||||
STRING = 0;
|
||||
BINARY = 1;
|
||||
}
|
||||
required PayloadType payload_type = 5;
|
||||
// Depending on payload_type, exactly one of the following optional fields
|
||||
// will always be set.
|
||||
optional string payload_utf8 = 6;
|
||||
optional bytes payload_binary = 7;
|
||||
}
|
||||
enum SignatureAlgorithm {
|
||||
UNSPECIFIED = 0;
|
||||
RSASSA_PKCS1v15 = 1;
|
||||
RSASSA_PSS = 2;
|
||||
}
|
||||
enum HashAlgorithm {
|
||||
SHA1 = 0;
|
||||
SHA256 = 1;
|
||||
}
|
||||
// Messages for authentication protocol between a sender and a receiver.
|
||||
message AuthChallenge {
|
||||
optional SignatureAlgorithm signature_algorithm = 1
|
||||
[default = RSASSA_PKCS1v15];
|
||||
optional bytes sender_nonce = 2;
|
||||
optional HashAlgorithm hash_algorithm = 3 [default = SHA1];
|
||||
}
|
||||
message AuthResponse {
|
||||
required bytes signature = 1;
|
||||
required bytes client_auth_certificate = 2;
|
||||
repeated bytes intermediate_certificate = 3;
|
||||
optional SignatureAlgorithm signature_algorithm = 4
|
||||
[default = RSASSA_PKCS1v15];
|
||||
optional bytes sender_nonce = 5;
|
||||
optional HashAlgorithm hash_algorithm = 6 [default = SHA1];
|
||||
optional bytes crl = 7;
|
||||
}
|
||||
message AuthError {
|
||||
enum ErrorType {
|
||||
INTERNAL_ERROR = 0;
|
||||
NO_TLS = 1; // The underlying connection is not TLS
|
||||
SIGNATURE_ALGORITHM_UNAVAILABLE = 2;
|
||||
}
|
||||
required ErrorType error_type = 1;
|
||||
}
|
||||
message DeviceAuthMessage {
|
||||
// Request fields
|
||||
optional AuthChallenge challenge = 1;
|
||||
// Response fields
|
||||
optional AuthResponse response = 2;
|
||||
optional AuthError error = 3;
|
||||
}
|
|
@ -1 +1 @@
|
|||
Subproject commit 6ea204605d4a27867702d7b024237506904d53c7
|
||||
Subproject commit a05feced804a5b664c75568162a7b3fa5562d8b3
|
|
@ -1 +1 @@
|
|||
Subproject commit 6ea204605d4a27867702d7b024237506904d53c7
|
||||
Subproject commit a05feced804a5b664c75568162a7b3fa5562d8b3
|
Loading…
Add table
Reference in a new issue