aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java
blob: fdb53b3661b2dfbcaaaed173c0ff7dc1cc5c4276 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package eu.siacs.conversations.xmpp.jingle.stanzas;

import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.stanzas.IqPacket;

public class JinglePacket extends IqPacket {
	Content content = null;
	Reason reason = null;
	Element jingle = new Element("jingle");
	
	@Override
	public Element addChild(Element child) {
		if ("jingle".equals(child.getName())) {
			Element contentElement = child.findChild("content");
			if (contentElement!=null) {
				this.content = new Content();
				this.content.setChildren(contentElement.getChildren());
				this.content.setAttributes(contentElement.getAttributes());
			}
			Element reasonElement = child.findChild("reason");
			if (reasonElement!=null) {
				this.reason = new Reason();
				this.reason.setChildren(reasonElement.getChildren());
				this.reason.setAttributes(reasonElement.getAttributes());
			}
			this.jingle.setAttributes(child.getAttributes());
		}
		return child;
	}
	
	public JinglePacket setContent(Content content) {
		this.content = content;
		return this;
	}
	
	public Content getJingleContent() {
		if (this.content==null) {
			this.content = new Content();
		}
		return this.content;
	}
	
	public JinglePacket setReason(Reason reason) {
		this.reason = reason;
		return this;
	}
	
	public Reason getReason() {
		return this.reason;
	}
	
	private void build() {
		this.children.clear();
		this.jingle.clearChildren();
		this.jingle.setAttribute("xmlns", "urn:xmpp:jingle:1");
		if (this.content!=null) {
			jingle.addChild(this.content);
		}
		if (this.reason != null) {
			jingle.addChild(this.reason);
		}
		this.children.add(jingle);
		this.setAttribute("type", "set");
	}

	public String getSessionId() {
		return this.jingle.getAttribute("sid");
	}
	
	public void setSessionId(String sid) {
		this.jingle.setAttribute("sid", sid);
	}
	
	@Override
	public String toString() {
		this.build();
		return super.toString();
	}

	public void setAction(String action) {
		this.jingle.setAttribute("action", action);
	}
	
	public String getAction() {
		return this.jingle.getAttribute("action");
	}
	
	public void setInitiator(String initiator) {
		this.jingle.setAttribute("initiator", initiator);
	}

	public boolean isAction(String action) {
		return action.equalsIgnoreCase(this.getAction());
	}
	
	public String toPrettyString() {
		StringBuilder output = new StringBuilder();
		output.append("["+getAction()+ " to:"+getTo());
		if (this.content!=null) {
			if (this.content.getUsedCandidate()!=null) {
				output.append(" [used-candidate="+this.content.getUsedCandidate()+"]");
			} else if (this.content.hasCandidateError()) {
				output.append(" [candidate-error]");
			} else {
				for(Element c : this.content.getCanditates()) {
					output.append(" ["+c.getAttribute("host")+":"+c.getAttribute("port")+"]");
				}
			}
		}
		output.append("]");
		return output.toString();
	}
}