Content.java

  1package eu.siacs.conversations.xmpp.jingle.stanzas;
  2
  3import eu.siacs.conversations.entities.DownloadableFile;
  4import eu.siacs.conversations.xml.Element;
  5
  6public class Content extends Element {
  7
  8	private String transportId;
  9
 10	private Content(String name) {
 11		super(name);
 12	}
 13
 14	public Content() {
 15		super("content");
 16	}
 17
 18	public Content(String creator, String name) {
 19		super("content");
 20		this.setAttribute("creator", creator);
 21		this.setAttribute("name", name);
 22	}
 23
 24	public void setTransportId(String sid) {
 25		this.transportId = sid;
 26	}
 27
 28	public void setFileOffer(DownloadableFile actualFile, boolean otr) {
 29		Element description = this.addChild("description",
 30				"urn:xmpp:jingle:apps:file-transfer:3");
 31		Element offer = description.addChild("offer");
 32		Element file = offer.addChild("file");
 33		file.addChild("size").setContent(Long.toString(actualFile.getSize()));
 34		if (otr) {
 35			file.addChild("name").setContent(actualFile.getName() + ".otr");
 36		} else {
 37			file.addChild("name").setContent(actualFile.getName());
 38		}
 39	}
 40
 41	public Element getFileOffer() {
 42		Element description = this.findChild("description",
 43				"urn:xmpp:jingle:apps:file-transfer:3");
 44		if (description == null) {
 45			return null;
 46		}
 47		Element offer = description.findChild("offer");
 48		if (offer == null) {
 49			return null;
 50		}
 51		return offer.findChild("file");
 52	}
 53
 54	public void setFileOffer(Element fileOffer) {
 55		Element description = this.findChild("description",
 56				"urn:xmpp:jingle:apps:file-transfer:3");
 57		if (description == null) {
 58			description = this.addChild("description",
 59					"urn:xmpp:jingle:apps:file-transfer:3");
 60		}
 61		description.addChild(fileOffer);
 62	}
 63
 64	public String getTransportId() {
 65		if (hasSocks5Transport()) {
 66			this.transportId = socks5transport().getAttribute("sid");
 67		} else if (hasIbbTransport()) {
 68			this.transportId = ibbTransport().getAttribute("sid");
 69		}
 70		return this.transportId;
 71	}
 72
 73	public Element socks5transport() {
 74		Element transport = this.findChild("transport",
 75				"urn:xmpp:jingle:transports:s5b:1");
 76		if (transport == null) {
 77			transport = this.addChild("transport",
 78					"urn:xmpp:jingle:transports:s5b:1");
 79			transport.setAttribute("sid", this.transportId);
 80		}
 81		return transport;
 82	}
 83
 84	public Element ibbTransport() {
 85		Element transport = this.findChild("transport",
 86				"urn:xmpp:jingle:transports:ibb:1");
 87		if (transport == null) {
 88			transport = this.addChild("transport",
 89					"urn:xmpp:jingle:transports:ibb:1");
 90			transport.setAttribute("sid", this.transportId);
 91		}
 92		return transport;
 93	}
 94
 95	public boolean hasSocks5Transport() {
 96		return this.hasChild("transport", "urn:xmpp:jingle:transports:s5b:1");
 97	}
 98
 99	public boolean hasIbbTransport() {
100		return this.hasChild("transport", "urn:xmpp:jingle:transports:ibb:1");
101	}
102}