/** * * Copyright 2014 Andriy Tsykholyas * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.smackx.hoxt.packet; import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smackx.shim.packet.HeadersExtension; /** * Abstract parent for Req and Resp IQ packets. * * @author Andriy Tsykholyas * @see XEP-0332: HTTP over XMPP transport */ public abstract class AbstractHttpOverXmpp extends IQ { public static final String NAMESPACE = "urn:xmpp:http"; protected AbstractHttpOverXmpp(String element) { super(element, NAMESPACE); } private HeadersExtension headers; private Data data; protected String version; protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { IQChildElementXmlStringBuilder builder = getIQHoxtChildElementBuilder(xml); builder.append(headers.toXML()); builder.append(data.toXML()); return builder; } /** * Returns start tag. * * @return start tag */ protected abstract IQChildElementXmlStringBuilder getIQHoxtChildElementBuilder(IQChildElementXmlStringBuilder xml); /** * Returns version attribute. * * @return version attribute */ public String getVersion() { return version; } /** * Sets version attribute. * * @param version version attribute */ public void setVersion(String version) { this.version = version; } /** * Returns Headers element. * * @return Headers element */ public HeadersExtension getHeaders() { return headers; } /** * Sets Headers element. * * @param headers Headers element */ public void setHeaders(HeadersExtension headers) { this.headers = headers; } /** * Returns Data element. * * @return Data element */ public Data getData() { return data; } /** * Sets Data element. * * @param data Headers element */ public void setData(Data data) { this.data = data; } /** * Representation of Data element.

* This class is immutable. */ public static class Data { private final NamedElement child; /** * Creates Data element. * * @param child element nested by Data */ public Data(NamedElement child) { this.child = child; } /** * Returns string containing xml representation of this object. * * @return xml representation of this object */ public String toXML() { StringBuilder builder = new StringBuilder(); builder.append(""); builder.append(child.toXML()); builder.append(""); return builder.toString(); } /** * Returns element nested by Data. * * @return element nested by Data */ public NamedElement getChild() { return child; } } /** * Representation of Text element.

* This class is immutable. */ public static class Text implements NamedElement { public static final String ELEMENT = "text"; private final String text; /** * Creates this element. * * @param text value of text */ public Text(String text) { this.text = text; } @Override public XmlStringBuilder toXML() { XmlStringBuilder xml = new XmlStringBuilder(this); xml.rightAngleBracket(); xml.optAppend(text); xml.closeElement(this); return xml; } /** * Returns text of this element. * * @return text */ public String getText() { return text; } @Override public String getElementName() { return ELEMENT; } } /** * Representation of Base64 element.

* This class is immutable. */ public static class Base64 implements NamedElement { public static final String ELEMENT = "base64"; private final String text; /** * Creates this element. * * @param text value of text */ public Base64(String text) { this.text = text; } @Override public XmlStringBuilder toXML() { XmlStringBuilder xml = new XmlStringBuilder(this); xml.rightAngleBracket(); xml.optAppend(text); xml.closeElement(this); return xml; } /** * Returns text of this element. * * @return text */ public String getText() { return text; } @Override public String getElementName() { return ELEMENT; } } /** * Representation of Xml element.

* This class is immutable. */ public static class Xml implements NamedElement { public static final String ELEMENT = "xml"; private final String text; /** * Creates this element.builder.toString(). * * @param text value of text */ public Xml(String text) { this.text = text; } @Override public XmlStringBuilder toXML() { XmlStringBuilder xml = new XmlStringBuilder(this); xml.rightAngleBracket(); xml.optAppend(text); xml.closeElement(this); return xml; } /** * Returns text of this element. * * @return text */ public String getText() { return text; } @Override public String getElementName() { return ELEMENT; } } /** * Representation of ChunkedBase64 element.

* This class is immutable. */ public static class ChunkedBase64 implements NamedElement { public static final String ELEMENT = "chunkedBase64"; private final String streamId; /** * Creates ChunkedBase86 element. * * @param streamId streamId attribute */ public ChunkedBase64(String streamId) { this.streamId = streamId; } @Override public XmlStringBuilder toXML() { XmlStringBuilder xml = new XmlStringBuilder(this); xml.attribute("streamId", streamId); xml.closeEmptyElement(); return xml; } /** * Returns streamId attribute. * * @return streamId attribute */ public String getStreamId() { return streamId; } @Override public String getElementName() { return ELEMENT; } } /** * Representation of Ibb element.

* This class is immutable. */ public static class Ibb implements NamedElement { public static final String ELEMENT = "ibb"; private final String sid; /** * Creates Ibb element. * * @param sid sid attribute */ public Ibb(String sid) { this.sid = sid; } @Override public XmlStringBuilder toXML() { XmlStringBuilder xml = new XmlStringBuilder(this); xml.attribute("sid", sid); xml.closeEmptyElement(); return xml; } /** * Returns sid attribute. * * @return sid attribute */ public String getSid() { return sid; } @Override public String getElementName() { return ELEMENT; } } }