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}