diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index 9070c738f..c8c3db9b1 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -124,9 +124,11 @@ abstract class ConversationItem { text = ctx.getString( R.string.introduction_response_accepted_sent, ir.getName()); - text += "\n\n" + ctx.getString( - R.string.introduction_response_accepted_sent_info, - ir.getName()); + if (ir.isSuccessPossible()) { + text += "\n\n" + ctx.getString( + R.string.introduction_response_accepted_sent_info, + ir.getName()); + } } else { text = ctx.getString( R.string.introduction_response_declined_sent, diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java index b2a804bd8..956fc4a42 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java @@ -22,7 +22,7 @@ public class IntroductionRequest extends IntroductionResponse { @Nullable String message, boolean answered, boolean exists) { super(sessionId, messageId, groupId, role, time, local, sent, seen, - read, name, accepted); + read, name, accepted, false); this.message = message; this.answered = answered; @@ -41,4 +41,11 @@ public class IntroductionRequest extends IntroductionResponse { public boolean contactExists() { return exists; } + + @Override + public boolean isSuccessPossible() { + // TODO fix this IntroductionMessage mess + throw new AssertionError(); + } + } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java index 816135d43..2c28f8c79 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java @@ -12,16 +12,18 @@ import javax.annotation.concurrent.Immutable; public class IntroductionResponse extends IntroductionMessage { private final String name; - private final boolean accepted; + private final boolean accepted, successPossible; public IntroductionResponse(SessionId sessionId, MessageId messageId, GroupId groupId, Role role, long time, boolean local, boolean sent, - boolean seen, boolean read, String name, boolean accepted) { + boolean seen, boolean read, String name, boolean accepted, + boolean successPossible) { super(sessionId, messageId, groupId, role, time, local, sent, seen, read); this.name = name; this.accepted = accepted; + this.successPossible = successPossible; } public String getName() { @@ -32,4 +34,8 @@ public class IntroductionResponse extends IntroductionMessage { return accepted; } + public boolean isSuccessPossible() { + return successPossible; + } + } diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java index 03b3486ad..aca5a22b3 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java @@ -149,11 +149,12 @@ abstract class AbstractProtocolEngine throws DbException { AuthorId localAuthorId = identityManager.getLocalAuthor(txn).getId(); Contact c = contactManager.getContact(txn, sender, localAuthorId); + boolean possible = s.getState().successPossible(); IntroductionResponse response = new IntroductionResponse(s.getSessionId(), m.getMessageId(), m.getGroupId(), s.getRole(), m.getTimestamp(), false, false, false, false, otherAuthor.getName(), - m instanceof AcceptMessage); + m instanceof AcceptMessage, possible); IntroductionResponseReceivedEvent e = new IntroductionResponseReceivedEvent(c.getId(), response); txn.attach(e); diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeState.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeState.java index 3a3e16af3..3caa80a49 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeState.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroduceeState.java @@ -34,4 +34,10 @@ enum IntroduceeState implements State { throw new FormatException(); } + @Override + public boolean successPossible() { + return this != START && this != LOCAL_DECLINED && + this != REMOTE_DECLINED; + } + } diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerState.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerState.java index 6514eca16..929872e00 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerState.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroducerState.java @@ -34,4 +34,9 @@ enum IntroducerState implements State { throw new FormatException(); } + @Override + public boolean successPossible() { + return this != START && this != A_DECLINED && this != B_DECLINED; + } + } 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 efb857a0f..c800fc24e 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 @@ -470,6 +470,7 @@ class IntroductionManagerImpl extends ConversationClientImpl Role role = sessionParser.getRole(bdfSession); SessionId sessionId; Author author; + boolean successPossible; if (role == INTRODUCER) { IntroducerSession session = sessionParser.parseIntroducerSession(bdfSession); @@ -479,15 +480,18 @@ class IntroductionManagerImpl extends ConversationClientImpl } else { author = session.getIntroduceeA().author; } + successPossible = session.getState().successPossible(); } else if (role == INTRODUCEE) { IntroduceeSession session = sessionParser .parseIntroduceeSession(contactGroupId, bdfSession); sessionId = session.getSessionId(); author = session.getRemote().author; + successPossible = session.getState().successPossible(); } else throw new AssertionError(); return new IntroductionResponse(sessionId, m, contactGroupId, role, meta.getTimestamp(), meta.isLocal(), status.isSent(), - status.isSeen(), meta.isRead(), author.getName(), accept); + status.isSeen(), meta.isRead(), author.getName(), accept, + successPossible); } private void removeSessionWithIntroducer(Transaction txn, diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/State.java b/briar-core/src/main/java/org/briarproject/briar/introduction/State.java index 3063f9bd8..41d7e16a2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/State.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/State.java @@ -4,4 +4,6 @@ interface State { int getValue(); + boolean successPossible(); + } 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 7441186e8..817a49e34 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 @@ -415,8 +415,8 @@ public class IntroductionIntegrationTest eventWaiter.await(TIMEOUT, 1); assertTrue(listener0.response2Received); - // Forward AUTH - sync0To1(1, true); + // Forward AUTH and response + sync0To1(2, true); // Second AUTH and ACTIVATE and forward them sync1To0(2, true);