package de.pixart.messenger.xmpp.jingle.stanzas; import android.util.Base64; import de.pixart.messenger.xml.Element; import de.pixart.messenger.xmpp.stanzas.IqPacket; import rocks.xmpp.addr.Jid; public class JinglePacket extends IqPacket { Content content = null; Reason reason = null; Element checksum = 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.checksum = child.findChild("checksum"); 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; } public Element getChecksum() { return this.checksum; } 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); } if (this.checksum != null) { jingle.addChild(checksum); } 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(final Jid initiator) { this.jingle.setAttribute("initiator", initiator.toString()); } public boolean isAction(String action) { return action.equalsIgnoreCase(this.getAction()); } public void addChecksum(byte[] sha1Sum, String namespace) { this.checksum = new Element("checksum", namespace); checksum.setAttribute("creator", "initiator"); checksum.setAttribute("name", "a-file-offer"); Element hash = checksum.addChild("file").addChild("hash", "urn:xmpp:hashes:2"); hash.setAttribute("algo", "sha-1").setContent(Base64.encodeToString(sha1Sum, Base64.NO_WRAP)); } }