1package eu.siacs.conversations.xmpp.jingle.stanzas;
2
3import com.google.common.base.Preconditions;
4import com.google.common.base.Strings;
5import com.google.common.primitives.Longs;
6
7import eu.siacs.conversations.xml.Element;
8import eu.siacs.conversations.xml.Namespace;
9
10public class IbbTransportInfo extends GenericTransportInfo {
11
12 private IbbTransportInfo(final String name, final String xmlns) {
13 super(name, xmlns);
14 }
15
16 public IbbTransportInfo(final String transportId, final int blockSize) {
17 super("transport", Namespace.JINGLE_TRANSPORTS_IBB);
18 Preconditions.checkNotNull(transportId, "Transport ID can not be null");
19 Preconditions.checkArgument(blockSize > 0, "Block size must be larger than 0");
20 this.setAttribute("block-size", blockSize);
21 this.setAttribute("sid", transportId);
22 }
23
24 public String getTransportId() {
25 return this.getAttribute("sid");
26 }
27
28 public Long getBlockSize() {
29 final String blockSize = this.getAttribute("block-size");
30 return Strings.isNullOrEmpty(blockSize) ? null : Longs.tryParse(blockSize);
31 }
32
33 public static IbbTransportInfo upgrade(final Element element) {
34 Preconditions.checkArgument("transport".equals(element.getName()), "Name of provided element is not transport");
35 Preconditions.checkArgument(Namespace.JINGLE_TRANSPORTS_IBB.equals(element.getNamespace()), "Element does not match ibb transport namespace");
36 final IbbTransportInfo transportInfo = new IbbTransportInfo("transport", Namespace.JINGLE_TRANSPORTS_IBB);
37 transportInfo.setAttributes(element.getAttributes());
38 transportInfo.setChildren(element.getChildren());
39 return transportInfo;
40 }
41}