From 2edcc67f5d5bf342ef2f32c90f4f1b38179e7846 Mon Sep 17 00:00:00 2001 From: Daniel Rees Date: Tue, 14 May 2019 14:59:07 -0400 Subject: [PATCH] Added support for SSLException --- src/main/kotlin/org/phoenixframework/Socket.kt | 5 ++++- .../kotlin/org/phoenixframework/Transport.kt | 8 +++++--- .../phoenixframework/WebSocketTransportTest.kt | 16 +++++++++++++++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/org/phoenixframework/Socket.kt b/src/main/kotlin/org/phoenixframework/Socket.kt index 78c0b7c..4e667ab 100644 --- a/src/main/kotlin/org/phoenixframework/Socket.kt +++ b/src/main/kotlin/org/phoenixframework/Socket.kt @@ -54,8 +54,11 @@ const val WS_CLOSE_NORMAL = 1000 /** The socket was closed due to a SocketException. Likely the client lost connectivity */ const val WS_CLOSE_SOCKET_EXCEPTION = 4000 +/** The socket was closed due to an SSLException. Likely the client lost connectivity */ +const val WS_CLOSE_SSL_EXCEPTION = 4001 + /** The socket was closed due to an EOFException. Likely the server abruptly closed */ -const val WS_CLOSE_EOF_EXCEPTION = 4001 +const val WS_CLOSE_EOF_EXCEPTION = 4002 /** * Connects to a Phoenix Server diff --git a/src/main/kotlin/org/phoenixframework/Transport.kt b/src/main/kotlin/org/phoenixframework/Transport.kt index 0509859..e27eb70 100644 --- a/src/main/kotlin/org/phoenixframework/Transport.kt +++ b/src/main/kotlin/org/phoenixframework/Transport.kt @@ -28,9 +28,9 @@ import okhttp3.Response import okhttp3.WebSocket import okhttp3.WebSocketListener import java.io.EOFException -import java.net.ConnectException import java.net.SocketException import java.net.URL +import javax.net.ssl.SSLException /** * Interface that defines different types of Transport layers. A default {@link WebSocketTransport} @@ -137,9 +137,11 @@ class WebSocketTransport( // Check if the socket was closed for some recoverable reason if (t is SocketException) { - this.onClosed(webSocket, WS_CLOSE_SOCKET_EXCEPTION, "Socket Exception") + this.onClosed(webSocket, WS_CLOSE_SOCKET_EXCEPTION, "SocketException") + } else if (t is SSLException) { + this.onClosed(webSocket, WS_CLOSE_SSL_EXCEPTION, "SSLException") } else if (t is EOFException) { - this.onClosed(webSocket, WS_CLOSE_EOF_EXCEPTION, "EOF Exception") + this.onClosed(webSocket, WS_CLOSE_EOF_EXCEPTION, "EOFException") } } diff --git a/src/test/kotlin/org/phoenixframework/WebSocketTransportTest.kt b/src/test/kotlin/org/phoenixframework/WebSocketTransportTest.kt index 153cc6d..881b542 100644 --- a/src/test/kotlin/org/phoenixframework/WebSocketTransportTest.kt +++ b/src/test/kotlin/org/phoenixframework/WebSocketTransportTest.kt @@ -15,6 +15,7 @@ import org.mockito.MockitoAnnotations import java.io.EOFException import java.net.SocketException import java.net.URL +import javax.net.ssl.SSLException class WebSocketTransportTest { @@ -96,6 +97,19 @@ class WebSocketTransportTest { verify(mockOnClose).invoke(4000) } + @Test + fun `onFailure also triggers onClose for SSLException`() { + val mockOnError = mock<(Throwable, Response?) -> Unit>() + val mockOnClose = mock<(Int) -> Unit>() + transport.onClose = mockOnClose + transport.onError = mockOnError + + val throwable = SSLException("t") + transport.onFailure(mockWebSocket, throwable, mockResponse) + verify(mockOnError).invoke(throwable, mockResponse) + verify(mockOnClose).invoke(4001) + } + @Test fun `onFailure also triggers onClose for EOFException`() { val mockOnError = mock<(Throwable, Response?) -> Unit>() @@ -106,7 +120,7 @@ class WebSocketTransportTest { val throwable = EOFException() transport.onFailure(mockWebSocket, throwable, mockResponse) verify(mockOnError).invoke(throwable, mockResponse) - verify(mockOnClose).invoke(4001) + verify(mockOnClose).invoke(4002) } @Test