AbstractJingleConnection.java

 1package eu.siacs.conversations.xmpp.jingle;
 2
 3import com.google.common.base.Objects;
 4import com.google.common.base.Preconditions;
 5
 6import eu.siacs.conversations.entities.Account;
 7import eu.siacs.conversations.entities.Message;
 8import eu.siacs.conversations.services.XmppConnectionService;
 9import eu.siacs.conversations.xmpp.jingle.stanzas.JinglePacket;
10import rocks.xmpp.addr.Jid;
11
12public abstract class AbstractJingleConnection {
13
14    protected final JingleConnectionManager jingleConnectionManager;
15    protected final XmppConnectionService xmppConnectionService;
16    protected final Id id;
17    protected final Jid initiator;
18
19    AbstractJingleConnection(final JingleConnectionManager jingleConnectionManager, final Id id, final Jid initiator) {
20        this.jingleConnectionManager = jingleConnectionManager;
21        this.xmppConnectionService = jingleConnectionManager.getXmppConnectionService();
22        this.id = id;
23        this.initiator = initiator;
24    }
25
26    boolean isInitiator() {
27        return initiator.equals(id.account.getJid());
28    }
29
30    abstract void deliverPacket(JinglePacket jinglePacket);
31
32    public Id getId() {
33        return id;
34    }
35
36
37    public static class Id {
38        public final Account account;
39        public final Jid with;
40        public final String sessionId;
41
42        private Id(final Account account, final Jid with, final String sessionId) {
43            Preconditions.checkNotNull(with);
44            Preconditions.checkArgument(with.isFullJid());
45            this.account = account;
46            this.with = with;
47            this.sessionId = sessionId;
48        }
49
50        public static Id of(Account account, JinglePacket jinglePacket) {
51            return new Id(account, jinglePacket.getFrom(), jinglePacket.getSessionId());
52        }
53
54        public static Id of(Account account, Jid with, final String sessionId) {
55            return new Id(account, with, sessionId);
56        }
57
58        public static Id of(Message message) {
59            return new Id(
60                    message.getConversation().getAccount(),
61                    message.getCounterpart(),
62                    JingleConnectionManager.nextRandomId()
63            );
64        }
65
66        @Override
67        public boolean equals(Object o) {
68            if (this == o) return true;
69            if (o == null || getClass() != o.getClass()) return false;
70            Id id = (Id) o;
71            return Objects.equal(account.getJid(), id.account.getJid()) &&
72                    Objects.equal(with, id.with) &&
73                    Objects.equal(sessionId, id.sessionId);
74        }
75
76        @Override
77        public int hashCode() {
78            return Objects.hashCode(account.getJid(), with, sessionId);
79        }
80    }
81
82
83    public enum State {
84        NULL, //default value; nothing has been sent or received yet
85        PROPOSED,
86        ACCEPTED,
87        PROCEED,
88        SESSION_INITIALIZED, //equal to 'PENDING'
89        SESSION_ACCEPTED, //equal to 'ACTIVE'
90        TERMINATED //equal to 'ENDED'
91    }
92}