diff --git a/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java b/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java index 489e51a5917bc5f477cef44bd6ff2d71d82d9218..2a4d4539f382870bd20b4ac66078a8c0fb88f9a5 100644 --- a/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java +++ b/briar-api/src/org/briarproject/api/privategroup/invitation/GroupInvitationManager.java @@ -42,6 +42,12 @@ public interface GroupInvitationManager { void respondToInvitation(ContactId c, SessionId s, boolean accept) throws DbException; + /** + * Makes the user's relationship with the given contact visible to the + * given private group. + */ + void revealRelationship(ContactId c, GroupId g) throws DbException; + /** * Returns all private group invitation messages related to the given * contact. diff --git a/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java index ae11b48b850f13154046c447614061e910e8dd4c..bc6dd88f6d9b1e9db6f128b15099b95b3597407e 100644 --- a/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/org/briarproject/privategroup/invitation/GroupInvitationManagerImpl.java @@ -315,6 +315,30 @@ class GroupInvitationManagerImpl extends ConversationClientImpl } } + @Override + public void revealRelationship(ContactId c, GroupId g) throws DbException { + Transaction txn = db.startTransaction(false); + try { + // Look up the session + Contact contact = db.getContact(txn, c); + GroupId contactGroupId = getContactGroup(contact).getId(); + StoredSession ss = getSession(txn, contactGroupId, getSessionId(g)); + if (ss == null) throw new IllegalArgumentException(); + // Parse the session + PeerSession session = sessionParser + .parsePeerSession(contactGroupId, ss.bdfSession); + // Handle the join action + session = peerEngine.onJoinAction(txn, session); + // Store the updated session + storeSession(txn, ss.storageId, session); + db.commitTransaction(txn); + } catch (FormatException e) { + throw new DbException(e); + } finally { + db.endTransaction(txn); + } + } + private <S extends Session> S handleAction(Transaction txn, LocalAction type, S session, ProtocolEngine<S> engine) throws DbException, FormatException {