JingleConnection.java

 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}