Skip to content

Commit a722aed

Browse files
[WEBRTC-704] Handle more gateway responses (#61)
* [WEBRTC-704] Handle more gateway state errors * [WEBRTC-704] Convert gateway state check to when statement * [WEBRTC-704] Remove unnecessary import * [WEBRTC-704] Remove semi colons, fix param name in method description * [WEBRTC-704] Handle no operation states too to fix else{} block * [WEBRTC-704] Add explanation for NOOP * [WEBRTC-704] null safe audiomanager call, gateway invalidate method
1 parent c2d58c5 commit a722aed

File tree

2 files changed

+56
-25
lines changed

2 files changed

+56
-25
lines changed

telnyx_rtc/src/main/java/com/telnyx/webrtc/sdk/TelnyxClient.kt

+56-24
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,6 @@ class TelnyxClient(
383383
* Returns a MutableList of available audio devices
384384
* Audio devices are represented by their Int reference ids
385385
*
386-
* @param logLevel, the LogLevel specified for the SDK
387386
* @return [MutableList] of [Int]
388387
*/
389388
private fun getAvailableAudioOutputTypes(): MutableList<Int> {
@@ -405,9 +404,9 @@ class TelnyxClient(
405404
when (audioDevice) {
406405
AudioDevice.BLUETOOTH -> {
407406
if (availableTypes.contains(AudioDevice.BLUETOOTH.code)) {
408-
audioManager!!.mode = AudioManager.MODE_IN_COMMUNICATION;
409-
audioManager.startBluetoothSco()
410-
audioManager.isBluetoothScoOn = true
407+
audioManager?.mode = AudioManager.MODE_IN_COMMUNICATION
408+
audioManager?.startBluetoothSco()
409+
audioManager?.isBluetoothScoOn = true
411410
} else {
412411
Timber.d(
413412
"[%s] :: No Bluetooth device detected",
@@ -417,17 +416,17 @@ class TelnyxClient(
417416
}
418417
AudioDevice.PHONE_EARPIECE -> {
419418
//For phone ear piece
420-
audioManager!!.mode = AudioManager.MODE_IN_COMMUNICATION;
421-
audioManager.stopBluetoothSco();
422-
audioManager.isBluetoothScoOn = false
423-
audioManager.isSpeakerphoneOn = false
419+
audioManager?.mode = AudioManager.MODE_IN_COMMUNICATION
420+
audioManager?.stopBluetoothSco()
421+
audioManager?.isBluetoothScoOn = false
422+
audioManager?.isSpeakerphoneOn = false
424423
}
425424
AudioDevice.LOUDSPEAKER -> {
426425
//For phone speaker(loudspeaker)
427-
audioManager!!.mode = AudioManager.MODE_NORMAL;
428-
audioManager.stopBluetoothSco();
429-
audioManager.isBluetoothScoOn = false;
430-
audioManager.isSpeakerphoneOn = true;
426+
audioManager?.mode = AudioManager.MODE_NORMAL
427+
audioManager?.stopBluetoothSco()
428+
audioManager?.isBluetoothScoOn = false
429+
audioManager?.isSpeakerphoneOn = true
431430
}
432431
}
433432
}
@@ -500,7 +499,7 @@ class TelnyxClient(
500499

501500
/**
502501
* Fires once we have successfully received a 'REGED' gateway response, meaning login was successful
503-
* @param sessionId, the session ID of the successfully registered session.
502+
* @param receivedLoginSessionId, the session ID of the successfully registered session.
504503
*/
505504
internal fun onLoginSuccessful(receivedLoginSessionId: String) {
506505
Timber.d(
@@ -584,20 +583,53 @@ class TelnyxClient(
584583
val params = result.asJsonObject.get("params")
585584
val sessionId = result.asJsonObject.get("sessid").asString
586585
gatewayState = params.asJsonObject.get("state").asString
587-
if (gatewayState == GatewayState.REGED.state) {
588-
gatewayResponseTimer?.cancel()
589-
gatewayResponseTimer?.purge()
590-
gatewayResponseTimer = null
591-
waitingForReg = false
592-
onLoginSuccessful(sessionId)
593-
} else if (gatewayState == GatewayState.NOREG.state) {
594-
gatewayResponseTimer?.cancel()
595-
gatewayResponseTimer?.purge()
596-
gatewayResponseTimer = null
597-
socketResponseLiveData.postValue(SocketResponse.error("Gateway registration has timed out"))
586+
when (gatewayState) {
587+
GatewayState.REGED.state -> {
588+
invalidateGatewayResponseTimer()
589+
waitingForReg = false
590+
onLoginSuccessful(sessionId)
591+
}
592+
GatewayState.NOREG.state -> {
593+
invalidateGatewayResponseTimer()
594+
socketResponseLiveData.postValue(SocketResponse.error("Gateway registration has timed out"))
595+
}
596+
GatewayState.FAILED.state -> {
597+
invalidateGatewayResponseTimer()
598+
socketResponseLiveData.postValue(SocketResponse.error("Gateway registration has failed"))
599+
}
600+
GatewayState.FAIL_WAIT.state -> {
601+
invalidateGatewayResponseTimer()
602+
socketResponseLiveData.postValue(SocketResponse.error("Gateway registration has received fail wait response"))
603+
}
604+
GatewayState.EXPIRED.state -> {
605+
invalidateGatewayResponseTimer()
606+
socketResponseLiveData.postValue(SocketResponse.error("Gateway registration has timed out"))
607+
}
608+
GatewayState.UNREGED.state -> {
609+
//NOOP - logged within TxSocket
610+
}
611+
GatewayState.TRYING.state -> {
612+
//NOOP - logged within TxSocket
613+
}
614+
GatewayState.REGISTER.state -> {
615+
//NOOP - logged within TxSocket
616+
}
617+
GatewayState.UNREGISTER.state -> {
618+
//NOOP - logged within TxSocket
619+
}
620+
else -> {
621+
invalidateGatewayResponseTimer()
622+
socketResponseLiveData.postValue(SocketResponse.error("Gateway registration has failed with an unknown error"))
623+
}
598624
}
599625
}
600626

627+
private fun invalidateGatewayResponseTimer() {
628+
gatewayResponseTimer?.cancel()
629+
gatewayResponseTimer?.purge()
630+
gatewayResponseTimer = null
631+
}
632+
601633
override fun onConnectionEstablished() {
602634
Timber.d("[%s] :: onConnectionEstablished", this@TelnyxClient.javaClass.simpleName)
603635
socketResponseLiveData.postValue(SocketResponse.established())

telnyx_rtc/src/main/java/com/telnyx/webrtc/sdk/socket/TxSocket.kt

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import okhttp3.logging.HttpLoggingInterceptor
3030
import timber.log.Timber
3131
import java.util.*
3232
import java.util.concurrent.TimeUnit
33-
import javax.net.ssl.HostnameVerifier
3433

3534
/**
3635
* The socket connection that will send and receive messages related to calls.

0 commit comments

Comments
 (0)