From 337f7e7b8ff0f28f61e8ec4a43b0da770ff054a7 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 26 Apr 2018 18:18:31 -0300 Subject: [PATCH] Unify introduction response methods and handle ProtocolStateException It is possible that a remote DECLINE message arrives short before the user responds to the introduction. This will cause a ProtocolStateException which (for now) is just caught and a generic (existing) error message will be shown. --- .../android/contact/ConversationActivity.java | 16 ++++++----- .../api/introduction/IntroductionManager.java | 12 +++------ .../introduction/IntroductionManagerImpl.java | 13 +-------- .../IntroductionIntegrationTest.java | 27 ++++++------------- 4 files changed, 22 insertions(+), 46 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index 585b0fed9..2af7fb8e5 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -865,7 +865,8 @@ introductionOnboardingSeen(); "Unknown Request Type"); } loadMessages(); - } catch (DbException | FormatException e) { + } catch (DbException e) { + // TODO use more generic error message introductionResponseError(); if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); @@ -898,11 +899,14 @@ introductionOnboardingSeen(); @DatabaseExecutor private void respondToIntroductionRequest(SessionId sessionId, - boolean accept, long time) throws DbException, FormatException { - if (accept) { - introductionManager.acceptIntroduction(contactId, sessionId, time); - } else { - introductionManager.declineIntroduction(contactId, sessionId, time); + boolean accept, long time) throws DbException { + try { + introductionManager + .respondToIntroduction(contactId, sessionId, time, accept); + } catch (ProtocolStateException e) { + if (LOG.isLoggable(WARNING)) + LOG.log(WARNING, e.toString(), e); + introductionResponseError(); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java index 813b039de..8711193f1 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionManager.java @@ -34,16 +34,10 @@ public interface IntroductionManager extends ConversationClient { long timestamp) throws DbException; /** - * Accepts an introduction. + * Responds to an introduction. */ - void acceptIntroduction(ContactId contactId, SessionId sessionId, - long timestamp) throws DbException; - - /** - * Declines an introduction. - */ - void declineIntroduction(ContactId contactId, SessionId sessionId, - long timestamp) throws DbException; + void respondToIntroduction(ContactId contactId, SessionId sessionId, + long timestamp, boolean accept) throws DbException; /** * Returns all introduction messages for the given contact. diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java index d14bd46c7..4082b8dcc 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionManagerImpl.java @@ -339,18 +339,7 @@ class IntroductionManagerImpl extends ConversationClientImpl } @Override - public void acceptIntroduction(ContactId contactId, SessionId sessionId, - long timestamp) throws DbException { - respondToRequest(contactId, sessionId, timestamp, true); - } - - @Override - public void declineIntroduction(ContactId contactId, SessionId sessionId, - long timestamp) throws DbException { - respondToRequest(contactId, sessionId, timestamp, false); - } - - private void respondToRequest(ContactId contactId, SessionId sessionId, + public void respondToIntroduction(ContactId contactId, SessionId sessionId, long timestamp, boolean accept) throws DbException { Transaction txn = db.startTransaction(false); try { diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index 3c602a2e3..ab91ef92c 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -445,7 +445,8 @@ public class IntroductionIntegrationTest // answer request manually introductionManager2 - .acceptIntroduction(contactId0From2, listener2.sessionId, time); + .respondToIntroduction(contactId0From2, listener2.sessionId, time, + true); // sync second response and ACK and make sure there is no abort sync2To0(2, true); @@ -1003,25 +1004,13 @@ public class IntroductionIntegrationTest long time = clock.currentTimeMillis(); try { if (introducee == 1 && answerRequests) { - if (accept) { - introductionManager1 - .acceptIntroduction(contactId, sessionId, - time); - } else { - introductionManager1 - .declineIntroduction(contactId, sessionId, - time); - } + introductionManager1 + .respondToIntroduction(contactId, sessionId, + time, accept); } else if (introducee == 2 && answerRequests) { - if (accept) { - introductionManager2 - .acceptIntroduction(contactId, sessionId, - time); - } else { - introductionManager2 - .declineIntroduction(contactId, sessionId, - time); - } + introductionManager2 + .respondToIntroduction(contactId, sessionId, + time, accept); } } catch (DbException exception) { eventWaiter.rethrow(exception);