1package eu.siacs.conversations.xmpp.jingle;
2
3import java.util.ArrayList;
4import java.util.List;
5
6import android.util.Log;
7
8import eu.siacs.conversations.entities.Account;
9import eu.siacs.conversations.entities.Message;
10import eu.siacs.conversations.services.XmppConnectionService;
11import eu.siacs.conversations.xml.Element;
12import eu.siacs.conversations.xmpp.OnIqPacketReceived;
13import eu.siacs.conversations.xmpp.jingle.stanzas.Content;
14import eu.siacs.conversations.xmpp.jingle.stanzas.JinglePacket;
15import eu.siacs.conversations.xmpp.stanzas.IqPacket;
16
17public class JingleConnection {
18
19 private JingleConnectionManager mJingleConnectionManager;
20 private XmppConnectionService mXmppConnectionService;
21
22 private Message message;
23 private String sessionId;
24 private Account account;
25 private String initiator;
26 private String responder;
27 private List<Element> canditates = new ArrayList<Element>();
28
29 private OnIqPacketReceived responseListener = new OnIqPacketReceived() {
30
31 @Override
32 public void onIqPacketReceived(Account account, IqPacket packet) {
33 Log.d("xmppService",packet.toString());
34 }
35 };
36
37 public JingleConnection(JingleConnectionManager mJingleConnectionManager) {
38 this.mJingleConnectionManager = mJingleConnectionManager;
39 this.mXmppConnectionService = mJingleConnectionManager.getXmppConnectionService();
40 this.sessionId = this.mJingleConnectionManager.nextRandomId();
41 }
42
43 public String getSessionId() {
44 return this.sessionId;
45 }
46
47 public void init(Message message) {
48 this.message = message;
49 this.account = message.getConversation().getAccount();
50 this.initiator = this.account.getFullJid();
51 if (this.canditates.size() > 0) {
52 this.sendInitRequest();
53 } else {
54 this.mJingleConnectionManager.getPrimaryCanditate(account, new OnPrimaryCanditateFound() {
55
56 @Override
57 public void onPrimaryCanditateFound(boolean success, Element canditate) {
58 if (success) {
59 canditates.add(canditate);
60 }
61 sendInitRequest();
62 }
63 });
64 }
65
66 }
67
68 private void sendInitRequest() {
69 JinglePacket packet = this.bootstrapPacket();
70 packet.setAction("session-initiate");
71 packet.setInitiator(this.account.getFullJid());
72 Content content = new Content();
73 if (message.getType() == Message.TYPE_IMAGE) {
74 content.setAttribute("creator", "initiator");
75 content.setAttribute("name", "a-file-offer");
76 content.offerFile(this.mXmppConnectionService.getFileBackend().getImageFile(message));
77 content.setCanditates(this.canditates);
78 packet.setContent(content);
79 Log.d("xmppService",packet.toString());
80 account.getXmppConnection().sendIqPacket(packet, this.responseListener);
81 }
82 }
83
84 private JinglePacket bootstrapPacket() {
85 JinglePacket packet = new JinglePacket();
86 packet.setFrom(account.getFullJid());
87 packet.setTo(this.message.getCounterpart()+"/Gajim"); //fixme, not right in all cases;
88 packet.setSessionId(this.sessionId);
89 return packet;
90 }
91
92}