davidliu
Committed by GitHub

handle refresh token message (#46)

... ... @@ -609,6 +609,10 @@ internal constructor(
listener?.onSubscriptionPermissionUpdate(subscriptionPermissionUpdate)
}
override fun onRefreshToken(token: String) {
sessionToken = token
}
//--------------------------------- DataChannel.Observer ------------------------------------//
override fun onBufferedAmountChange(previousAmount: Long) {
... ...
... ... @@ -92,7 +92,7 @@ constructor(
): Either<LivekitRtc.JoinResponse, Unit> {
var wsUrlString = "$url/rtc" +
"?protocol=$PROTOCOL_VERSION" +
"&access_token=$token" +
"&$CONNECT_QUERY_TOKEN=$token" +
"&sdk=$SDK_TYPE" +
"&version=${Version.CLIENT_VERSION}"
isReconnecting = false
... ... @@ -339,12 +339,12 @@ constructor(
allParticipants: Boolean,
participantTrackPermissions: List<ParticipantTrackPermission>
) {
val update = LivekitRtc.UpdateSubscriptionPermissions.newBuilder()
val update = LivekitRtc.SubscriptionPermission.newBuilder()
.setAllParticipants(allParticipants)
.addAllTrackPermissions(participantTrackPermissions.map { it.toProto() })
val request = LivekitRtc.SignalRequest.newBuilder()
.setSubscriptionPermissions(update)
.setSubscriptionPermission(update)
.build()
sendRequest(request)
... ... @@ -473,6 +473,9 @@ constructor(
LivekitRtc.SignalResponse.MessageCase.SUBSCRIPTION_PERMISSION_UPDATE -> {
listener?.onSubscriptionPermissionUpdate(response.subscriptionPermissionUpdate)
}
LivekitRtc.SignalResponse.MessageCase.REFRESH_TOKEN -> {
listener?.onRefreshToken(response.refreshToken)
}
LivekitRtc.SignalResponse.MessageCase.MESSAGE_NOT_SET,
null -> {
LKLog.v { "empty messageCase!" }
... ... @@ -507,9 +510,12 @@ constructor(
fun onStreamStateUpdate(streamStates: List<LivekitRtc.StreamStateInfo>)
fun onSubscribedQualityUpdate(subscribedQualityUpdate: LivekitRtc.SubscribedQualityUpdate)
fun onSubscriptionPermissionUpdate(subscriptionPermissionUpdate: LivekitRtc.SubscriptionPermissionUpdate)
fun onRefreshToken(token: String)
}
companion object {
const val CONNECT_QUERY_TOKEN = "access_token"
const val SD_TYPE_ANSWER = "answer"
const val SD_TYPE_OFFER = "offer"
const val SD_TYPE_PRANSWER = "pranswer"
... ...
... ... @@ -3,13 +3,12 @@ package io.livekit.android.room
import io.livekit.android.MockE2ETest
import io.livekit.android.mock.MockPeerConnection
import io.livekit.android.mock.MockWebSocket
import io.livekit.android.util.LoggingRule
import io.livekit.android.util.toOkioByteString
import io.livekit.android.util.toPBByteString
import kotlinx.coroutines.ExperimentalCoroutinesApi
import livekit.LivekitRtc
import org.junit.Assert
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
... ... @@ -56,4 +55,17 @@ class RTCEngineMockE2ETest : MockE2ETest() {
val newWs = wsFactory.ws
Assert.assertNotEquals(oldWs, newWs)
}
@Test
fun refreshToken() = runTest {
connect()
val oldToken = wsFactory.request.url.queryParameter(SignalClient.CONNECT_QUERY_TOKEN)
wsFactory.listener.onMessage(wsFactory.ws, SignalClientTest.REFRESH_TOKEN.toOkioByteString())
wsFactory.listener.onFailure(wsFactory.ws, Exception(), null)
val newToken = wsFactory.request.url.queryParameter(SignalClient.CONNECT_QUERY_TOKEN)
Assert.assertNotEquals(oldToken, newToken)
Assert.assertEquals(SignalClientTest.REFRESH_TOKEN.refreshToken, newToken)
}
}
\ No newline at end of file
... ...
... ... @@ -275,6 +275,11 @@ class SignalClientTest : BaseTest() {
}
build()
}
val REFRESH_TOKEN = with(LivekitRtc.SignalResponse.newBuilder()) {
refreshToken = "refresh_token"
build()
}
val LEAVE = with(LivekitRtc.SignalResponse.newBuilder()) {
leave = with(leaveBuilder) {
build()
... ...
Subproject commit a4208afda1fd87c5e57efa14242c1fa94e34ec07
Subproject commit 01c702cc14462a761d8823e1f8d399b5d20d301e
... ...