Skip to content
Snippets Groups Projects
Commit 0ae55404 authored by akwizgran's avatar akwizgran
Browse files

Merge branch '900-simplify-sharing-client-state-machine' into 'master'

Remove REMOTE_LEFT state from sharing client state machine

See merge request !483
parents be3752bf 59af25b2
No related branches found
No related tags found
No related merge requests found
......@@ -41,7 +41,6 @@ import static org.briarproject.briar.sharing.State.LOCAL_INVITED;
import static org.briarproject.briar.sharing.State.LOCAL_LEFT;
import static org.briarproject.briar.sharing.State.REMOTE_HANGING;
import static org.briarproject.briar.sharing.State.REMOTE_INVITED;
import static org.briarproject.briar.sharing.State.REMOTE_LEFT;
import static org.briarproject.briar.sharing.State.SHARING;
import static org.briarproject.briar.sharing.State.START;
......@@ -74,7 +73,6 @@ abstract class ProtocolEngineImpl<S extends Shareable>
@Nullable String message, long timestamp) throws DbException {
switch (s.getState()) {
case START:
case REMOTE_LEFT:
return onLocalInvite(txn, s, message, timestamp);
case LOCAL_INVITED:
case REMOTE_INVITED:
......@@ -133,7 +131,6 @@ abstract class ProtocolEngineImpl<S extends Shareable>
case REMOTE_INVITED:
case SHARING:
case LOCAL_LEFT:
case REMOTE_LEFT:
case REMOTE_HANGING:
case ERROR:
throw new ProtocolStateException(); // Invalid in these states
......@@ -190,7 +187,6 @@ abstract class ProtocolEngineImpl<S extends Shareable>
case REMOTE_INVITED:
case SHARING:
case LOCAL_LEFT:
case REMOTE_LEFT:
case REMOTE_HANGING:
case ERROR:
throw new ProtocolStateException(); // Invalid in these states
......@@ -232,8 +228,6 @@ abstract class ProtocolEngineImpl<S extends Shareable>
return onLocalLeave(txn, s, REMOTE_HANGING);
case SHARING:
return onLocalLeave(txn, s, LOCAL_LEFT);
case REMOTE_LEFT:
return onLocalLeave(txn, s, START);
case START:
case LOCAL_INVITED:
case LOCAL_LEFT:
......@@ -283,7 +277,6 @@ abstract class ProtocolEngineImpl<S extends Shareable>
return onRemoteInvite(txn, s, m, false, LOCAL_LEFT);
case LOCAL_INVITED:
case SHARING:
case REMOTE_LEFT:
return abort(txn, s); // Invalid in these states
case ERROR:
return s; // Ignored in this state
......@@ -356,7 +349,6 @@ abstract class ProtocolEngineImpl<S extends Shareable>
case LOCAL_INVITED:
case SHARING:
case LOCAL_LEFT:
case REMOTE_LEFT:
return abort(txn, s); // Invalid in these states
case ERROR:
return s; // Ignored in this state
......@@ -410,7 +402,6 @@ abstract class ProtocolEngineImpl<S extends Shareable>
case LOCAL_INVITED:
case SHARING:
case LOCAL_LEFT:
case REMOTE_LEFT:
return abort(txn, s); // Invalid in these states
case ERROR:
return s; // Ignored in this state
......@@ -454,14 +445,13 @@ abstract class ProtocolEngineImpl<S extends Shareable>
LeaveMessage m) throws DbException, FormatException {
switch (s.getState()) {
case LOCAL_INVITED:
return onRemoteLeaveWhenInvited(txn, s, m, START);
return onRemoteLeaveWhenInvited(txn, s, m);
case LOCAL_LEFT:
return onRemoteLeave(txn, s, m, START);
return onRemoteLeave(txn, s, m);
case SHARING:
return onRemoteLeaveWhenSharing(txn, s, m);
case START:
case REMOTE_INVITED:
case REMOTE_LEFT:
case REMOTE_HANGING:
return abort(txn, s); // Invalid in these states
case ERROR:
......@@ -472,10 +462,9 @@ abstract class ProtocolEngineImpl<S extends Shareable>
}
private Session onRemoteLeaveWhenInvited(Transaction txn, Session s,
LeaveMessage m, State nextState)
throws DbException, FormatException {
LeaveMessage m) throws DbException, FormatException {
// Carry out normal leave validation and operation
Session session = onRemoteLeave(txn, s, m, nextState);
Session session = onRemoteLeave(txn, s, m);
// Mark any invite messages in the session unavailable to answer
if (session.getState() != ERROR)
markInvitesUnavailableToAnswer(txn, s);
......@@ -483,8 +472,7 @@ abstract class ProtocolEngineImpl<S extends Shareable>
return session;
}
private Session onRemoteLeave(Transaction txn, Session s,
LeaveMessage m, State nextState)
private Session onRemoteLeave(Transaction txn, Session s, LeaveMessage m)
throws DbException, FormatException {
// The dependency, if any, must be the last remote message
if (!isValidDependency(s, m.getPreviousMessageId()))
......@@ -498,7 +486,7 @@ abstract class ProtocolEngineImpl<S extends Shareable>
txn.attach(e);
}
// Move to the next state
return new Session(nextState, s.getContactGroupId(), s.getShareableId(),
return new Session(START, s.getContactGroupId(), s.getShareableId(),
s.getLastLocalMessageId(), m.getId(), s.getLocalTimestamp(),
s.getInviteTimestamp());
}
......@@ -506,7 +494,7 @@ abstract class ProtocolEngineImpl<S extends Shareable>
private Session onRemoteLeaveWhenSharing(Transaction txn, Session s,
LeaveMessage m) throws DbException, FormatException {
// Carry out normal leave validation and operation
Session session = onRemoteLeave(txn, s, m, REMOTE_LEFT);
Session session = onRemoteLeave(txn, s, m);
// Stop sharing the shareable with the contact
if (session.getState() != ERROR)
setShareableVisibility(txn, s, INVISIBLE);
......
......@@ -10,7 +10,7 @@ import javax.annotation.concurrent.Immutable;
enum State {
START(0), LOCAL_INVITED(1), REMOTE_INVITED(2), SHARING(3), LOCAL_LEFT(4),
REMOTE_LEFT(5), REMOTE_HANGING(6), ERROR(7);
REMOTE_HANGING(5), ERROR(6);
private final int value;
......@@ -23,7 +23,7 @@ enum State {
}
public boolean canInvite() {
return this == START || this == REMOTE_LEFT;
return this == START;
}
static State fromValue(int value) throws FormatException {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment