From 41fdbd65ecf1082f42432f55a8221a341382cace Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 31 May 2017 00:45:51 +0200 Subject: [PATCH] tls-psk: improve error handling --- .../network/KeyTransferInteractor.java | 8 +++--- .../transfer/presenter/TransferPresenter.java | 25 +++++++++++-------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/network/KeyTransferInteractor.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/network/KeyTransferInteractor.java index 9a3e1e9fa..e5ebcef40 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/network/KeyTransferInteractor.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/network/KeyTransferInteractor.java @@ -51,6 +51,7 @@ import javax.crypto.spec.SecretKeySpec; import javax.net.ssl.KeyManager; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; +import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLSocket; import javax.net.ssl.TrustManager; @@ -145,6 +146,8 @@ public class KeyTransferInteractor { try { handleOpenConnection(socket); Log.d(Constants.TAG, "connection closed ok!"); + } catch (SSLHandshakeException e) { + invokeListener(CONNECTION_ERROR_CONNECT, null); } catch (IOException e) { Log.e(Constants.TAG, "error!", e); } @@ -172,7 +175,6 @@ public class KeyTransferInteractor { invokeListener(CONNECTION_LISTENING, qrCodeData); socket = serverSocket.accept(); - invokeListener(CONNECTION_ESTABLISHED, socket.getInetAddress().toString()); } catch (IOException e) { Log.e(Constants.TAG, "error while listening!", e); invokeListener(CONNECTION_ERROR_LISTEN, null); @@ -187,7 +189,6 @@ public class KeyTransferInteractor { sslSocket.setEnabledCipherSuites(enabledCipherSuites); socket = sslSocket; - invokeListener(CONNECTION_ESTABLISHED, socket.getInetAddress().toString()); } catch (IOException e) { Log.e(Constants.TAG, "error while connecting!", e); invokeListener(CONNECTION_ERROR_CONNECT, null); @@ -211,9 +212,10 @@ public class KeyTransferInteractor { private void handleOpenConnection(Socket socket) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); - OutputStream outputStream = new BufferedOutputStream(socket.getOutputStream()); + invokeListener(CONNECTION_ESTABLISHED, socket.getInetAddress().toString()); + socket.setSoTimeout(500); while (!isInterrupted() && socket.isConnected() && !socket.isClosed()) { sendDataIfAvailable(socket, outputStream); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/presenter/TransferPresenter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/presenter/TransferPresenter.java index b04e7f3f0..e24b71886 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/presenter/TransferPresenter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/presenter/TransferPresenter.java @@ -220,22 +220,25 @@ public class TransferPresenter implements KeyTransferCallback, LoaderCallbacks