Minor refactor, handle simple sendToDevice packet

This commit is contained in:
Kelvin 2024-09-26 23:26:52 +02:00
commit c4061cc6ac
12 changed files with 39 additions and 28 deletions

View file

@ -12,8 +12,8 @@ import com.futo.platformplayer.R
import com.futo.platformplayer.setNavigationBarColorAndIcons import com.futo.platformplayer.setNavigationBarColorAndIcons
import com.futo.platformplayer.states.StateApp import com.futo.platformplayer.states.StateApp
import com.futo.platformplayer.states.StateSync import com.futo.platformplayer.states.StateSync
import com.futo.platformplayer.sync.LinkType import com.futo.platformplayer.sync.internal.LinkType
import com.futo.platformplayer.sync.SyncSession import com.futo.platformplayer.sync.internal.SyncSession
import com.futo.platformplayer.views.sync.SyncDeviceView import com.futo.platformplayer.views.sync.SyncDeviceView
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View file

@ -3,7 +3,6 @@ package com.futo.platformplayer.activities
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.util.Base64 import android.util.Base64
import android.util.Log
import android.view.View import android.view.View
import android.widget.EditText import android.widget.EditText
import android.widget.ImageButton import android.widget.ImageButton
@ -17,17 +16,12 @@ import com.futo.platformplayer.logging.Logger
import com.futo.platformplayer.setNavigationBarColorAndIcons import com.futo.platformplayer.setNavigationBarColorAndIcons
import com.futo.platformplayer.states.StateApp import com.futo.platformplayer.states.StateApp
import com.futo.platformplayer.states.StateSync import com.futo.platformplayer.states.StateSync
import com.futo.platformplayer.sync.SyncDeviceInfo import com.futo.platformplayer.sync.internal.SyncDeviceInfo
import com.futo.platformplayer.sync.SyncSocketSession
import com.google.zxing.integration.android.IntentIntegrator import com.google.zxing.integration.android.IntentIntegrator
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import java.nio.ByteBuffer
import java.util.Random
class SyncPairActivity : AppCompatActivity() { class SyncPairActivity : AppCompatActivity() {
private lateinit var _editCode: EditText private lateinit var _editCode: EditText

View file

@ -7,7 +7,6 @@ import android.graphics.Bitmap
import android.graphics.Color import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.util.Base64 import android.util.Base64
import android.util.Log
import android.util.TypedValue import android.util.TypedValue
import android.view.View import android.view.View
import android.widget.ImageButton import android.widget.ImageButton
@ -21,7 +20,7 @@ import com.futo.platformplayer.logging.Logger
import com.futo.platformplayer.setNavigationBarColorAndIcons import com.futo.platformplayer.setNavigationBarColorAndIcons
import com.futo.platformplayer.states.StateApp import com.futo.platformplayer.states.StateApp
import com.futo.platformplayer.states.StateSync import com.futo.platformplayer.states.StateSync
import com.futo.platformplayer.sync.SyncDeviceInfo import com.futo.platformplayer.sync.internal.SyncDeviceInfo
import com.google.zxing.BarcodeFormat import com.google.zxing.BarcodeFormat
import com.google.zxing.MultiFormatWriter import com.google.zxing.MultiFormatWriter
import com.google.zxing.common.BitMatrix import com.google.zxing.common.BitMatrix

View file

@ -20,10 +20,10 @@ import com.futo.platformplayer.stores.FragmentedStorage
import com.futo.platformplayer.stores.StringStringMapStorage import com.futo.platformplayer.stores.StringStringMapStorage
import com.futo.platformplayer.stores.StringArrayStorage import com.futo.platformplayer.stores.StringArrayStorage
import com.futo.platformplayer.stores.StringStorage import com.futo.platformplayer.stores.StringStorage
import com.futo.platformplayer.sync.SyncDeviceInfo import com.futo.platformplayer.sync.internal.SyncDeviceInfo
import com.futo.platformplayer.sync.SyncKeyPair import com.futo.platformplayer.sync.internal.SyncKeyPair
import com.futo.platformplayer.sync.SyncSession import com.futo.platformplayer.sync.internal.SyncSession
import com.futo.platformplayer.sync.SyncSocketSession import com.futo.platformplayer.sync.internal.SyncSocketSession
import com.futo.polycentric.core.base64ToByteArray import com.futo.polycentric.core.base64ToByteArray
import com.futo.polycentric.core.toBase64 import com.futo.polycentric.core.toBase64
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers

View file

@ -1,4 +1,4 @@
package com.futo.platformplayer.sync; package com.futo.platformplayer.sync.internal;
public enum LinkType { public enum LinkType {
None, None,

View file

@ -1,4 +1,4 @@
package com.futo.platformplayer.sync package com.futo.platformplayer.sync.internal
@kotlinx.serialization.Serializable @kotlinx.serialization.Serializable
class SyncDeviceInfo { class SyncDeviceInfo {

View file

@ -1,4 +1,4 @@
package com.futo.platformplayer.sync package com.futo.platformplayer.sync.internal
@kotlinx.serialization.Serializable @kotlinx.serialization.Serializable
class SyncKeyPair { class SyncKeyPair {

View file

@ -1,7 +1,13 @@
package com.futo.platformplayer.sync package com.futo.platformplayer.sync.internal
import com.futo.platformplayer.UIDialogs
import com.futo.platformplayer.activities.MainActivity
import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.logging.Logger
import com.futo.platformplayer.sync.SyncSocketSession.Opcode import com.futo.platformplayer.states.StateApp
import com.futo.platformplayer.states.StatePlayer
import com.futo.platformplayer.sync.internal.SyncSocketSession.Opcode
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.nio.ByteBuffer import java.nio.ByteBuffer
interface IAuthorizable { interface IAuthorizable {
@ -110,6 +116,19 @@ class SyncSession : IAuthorizable {
} }
Logger.i(TAG, "Received ${opcode} (${data.remaining()} bytes)") Logger.i(TAG, "Received ${opcode} (${data.remaining()} bytes)")
//TODO: Abstract this out
when(opcode) {
GJSyncOpcodes.sendToDevices -> {
StateApp.instance.scopeOrNull?.launch(Dispatchers.Main) {
val context = StateApp.instance.contextOrNull;
if(context != null && context is MainActivity) {
val url = String(data.array(), Charsets.UTF_8);
UIDialogs.appToast("Received url from device [${socketSession.remotePublicKey}]:\n{$url}");
context.handleUrl(url);
}
};
}
}
} }
private companion object { private companion object {

View file

@ -1,4 +1,4 @@
package com.futo.platformplayer.sync package com.futo.platformplayer.sync.internal
import com.futo.platformplayer.LittleEndianDataInputStream import com.futo.platformplayer.LittleEndianDataInputStream
import com.futo.platformplayer.LittleEndianDataOutputStream import com.futo.platformplayer.LittleEndianDataOutputStream
@ -95,7 +95,7 @@ class SyncSocketSession {
try { try {
val messageSize = _inputStream.readInt() val messageSize = _inputStream.readInt()
if (messageSize > MAXIMUM_PACKET_SIZE_ENCRYPTED) { if (messageSize > MAXIMUM_PACKET_SIZE_ENCRYPTED) {
throw Exception("Message size (${messageSize}) cannot exceed MAXIMUM_PACKET_SIZE (${MAXIMUM_PACKET_SIZE_ENCRYPTED})") throw Exception("Message size (${messageSize}) cannot exceed MAXIMUM_PACKET_SIZE ($MAXIMUM_PACKET_SIZE_ENCRYPTED)")
} }
//Logger.i(TAG, "Receiving message (size = ${messageSize})") //Logger.i(TAG, "Receiving message (size = ${messageSize})")

View file

@ -1,4 +1,4 @@
package com.futo.platformplayer.sync package com.futo.platformplayer.sync.internal
class SyncStream(expectedSize: Int, val opcode: UByte) { class SyncStream(expectedSize: Int, val opcode: UByte) {
companion object { companion object {

View file

@ -9,7 +9,7 @@ import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import com.futo.platformplayer.R import com.futo.platformplayer.R
import com.futo.platformplayer.constructs.Event0 import com.futo.platformplayer.constructs.Event0
import com.futo.platformplayer.sync.LinkType import com.futo.platformplayer.sync.internal.LinkType
class SyncDeviceView : ConstraintLayout { class SyncDeviceView : ConstraintLayout {
val _imageLinkType: ImageView val _imageLinkType: ImageView

View file

@ -8,9 +8,9 @@ import com.futo.platformplayer.noise.protocol.CipherStatePair
import com.futo.platformplayer.noise.protocol.HandshakeState import com.futo.platformplayer.noise.protocol.HandshakeState
import com.futo.platformplayer.noise.protocol.Noise import com.futo.platformplayer.noise.protocol.Noise
import com.futo.platformplayer.states.StateSync import com.futo.platformplayer.states.StateSync
import com.futo.platformplayer.sync.IAuthorizable import com.futo.platformplayer.sync.internal.IAuthorizable
import com.futo.platformplayer.sync.SyncSocketSession import com.futo.platformplayer.sync.internal.SyncSocketSession
import com.futo.platformplayer.sync.SyncStream import com.futo.platformplayer.sync.internal.SyncStream
import junit.framework.TestCase.assertEquals import junit.framework.TestCase.assertEquals
import org.junit.Assert.assertArrayEquals import org.junit.Assert.assertArrayEquals
import org.junit.Test import org.junit.Test
@ -24,7 +24,6 @@ import java.util.Base64
import java.util.Random import java.util.Random
import java.util.concurrent.CountDownLatch import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import kotlin.math.exp
class NoiseProtocolTest { class NoiseProtocolTest {