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}