anotherim/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleCandidate.java

154 lines
3.5 KiB
Java
Raw Normal View History

2014-10-22 16:38:44 +00:00
package eu.siacs.conversations.xmpp.jingle;
import java.util.ArrayList;
import java.util.List;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.InvalidJid;
2018-03-05 17:30:40 +00:00
import rocks.xmpp.addr.Jid;
2014-10-22 16:38:44 +00:00
public class JingleCandidate {
public static int TYPE_UNKNOWN;
public static int TYPE_DIRECT = 0;
public static int TYPE_PROXY = 1;
private boolean ours;
private boolean usedByCounterpart = false;
private String cid;
private String host;
private int port;
private int type;
2014-11-06 19:10:03 +00:00
private Jid jid;
2014-10-22 16:38:44 +00:00
private int priority;
public JingleCandidate(String cid, boolean ours) {
this.ours = ours;
this.cid = cid;
}
public String getCid() {
return cid;
}
public void setHost(String host) {
this.host = host;
}
public String getHost() {
return this.host;
}
2014-11-06 19:10:03 +00:00
public void setJid(final Jid jid) {
2014-10-22 16:38:44 +00:00
this.jid = jid;
}
2014-11-06 19:10:03 +00:00
public Jid getJid() {
2014-10-22 16:38:44 +00:00
return this.jid;
}
public void setPort(int port) {
this.port = port;
}
public int getPort() {
return this.port;
}
public void setType(int type) {
this.type = type;
}
public void setType(String type) {
2019-05-22 15:30:51 +00:00
if (type == null) {
this.type = TYPE_UNKNOWN;
return;
}
2014-11-06 19:10:03 +00:00
switch (type) {
case "proxy":
this.type = TYPE_PROXY;
break;
case "direct":
this.type = TYPE_DIRECT;
break;
default:
this.type = TYPE_UNKNOWN;
break;
}
2014-10-22 16:38:44 +00:00
}
public void setPriority(int i) {
this.priority = i;
}
public int getPriority() {
return this.priority;
}
public boolean equals(JingleCandidate other) {
return this.getCid().equals(other.getCid());
}
public boolean equalValues(JingleCandidate other) {
return other != null && other.getHost().equals(this.getHost()) && (other.getPort() == this.getPort());
2014-10-22 16:38:44 +00:00
}
public boolean isOurs() {
return ours;
}
public int getType() {
return this.type;
}
public static List<JingleCandidate> parse(final List<Element> elements) {
final List<JingleCandidate> candidates = new ArrayList<>();
for (final Element element : elements) {
if ("candidate".equals(element.getName())) {
candidates.add(JingleCandidate.parse(element));
}
2014-10-22 16:38:44 +00:00
}
return candidates;
2014-10-22 16:38:44 +00:00
}
public static JingleCandidate parse(Element element) {
final JingleCandidate candidate = new JingleCandidate(element.getAttribute("cid"), false);
candidate.setHost(element.getAttribute("host"));
candidate.setJid(InvalidJid.getNullForInvalid(element.getAttributeAsJid("jid")));
candidate.setType(element.getAttribute("type"));
candidate.setPriority(Integer.parseInt(element.getAttribute("priority")));
candidate.setPort(Integer.parseInt(element.getAttribute("port")));
return candidate;
2014-10-22 16:38:44 +00:00
}
public Element toElement() {
Element element = new Element("candidate");
element.setAttribute("cid", this.getCid());
element.setAttribute("host", this.getHost());
element.setAttribute("port", Integer.toString(this.getPort()));
2019-09-01 13:06:59 +00:00
if (jid != null) {
element.setAttribute("jid", jid.toEscapedString());
}
2014-10-22 16:38:44 +00:00
element.setAttribute("priority", Integer.toString(this.getPriority()));
if (this.getType() == TYPE_DIRECT) {
element.setAttribute("type", "direct");
} else if (this.getType() == TYPE_PROXY) {
element.setAttribute("type", "proxy");
}
return element;
}
public void flagAsUsedByCounterpart() {
this.usedByCounterpart = true;
}
public boolean isUsedByCounterpart() {
return this.usedByCounterpart;
}
public String toString() {
return this.getHost() + ":" + this.getPort() + " (prio="
+ this.getPriority() + ")";
}
}