mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2025-09-10 02:39:42 +02:00
Enable PacketExtensions for IQs
This is actually only part one, i.e. with this commit if the user adds a PacketExtension to an IQ it will be included in IQ.toXml(). Which was previously only the case if the IQ subclass explicitly included packet extensions. The second part of the change is to change the IQ provider, so that packet extensions are automatically parsed. Cases where PacketExtensions are used for Message and IQ are slightly changed. The IQ sublcass now only has a field with this PacketExtension (see for example bytestreams.ibb.packet.DataPacketExtension). Also changed hoxt API: Removed unnecessary indirection and made the API more Smack idiomatic.
This commit is contained in:
parent
a9c798f3bb
commit
9e797c1b17
93 changed files with 1347 additions and 1438 deletions
|
@ -33,7 +33,6 @@ import org.jivesoftware.smack.filter.PacketTypeFilter;
|
|||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smack.packet.Packet;
|
||||
import org.jivesoftware.smack.packet.PacketExtension;
|
||||
import org.jivesoftware.smack.packet.XMPPError;
|
||||
import org.jivesoftware.smack.util.stringencoder.Base64;
|
||||
import org.jivesoftware.smackx.bytestreams.BytestreamSession;
|
||||
|
@ -450,9 +449,7 @@ public class InBandBytestreamSession implements BytestreamSession {
|
|||
|
||||
public void processPacket(Packet packet) throws NotConnectedException {
|
||||
// get data packet extension
|
||||
DataPacketExtension data = (DataPacketExtension) packet.getExtension(
|
||||
DataPacketExtension.ELEMENT,
|
||||
DataPacketExtension.NAMESPACE);
|
||||
DataPacketExtension data = ((Data) packet).getDataPacketExtension();
|
||||
|
||||
/*
|
||||
* check if sequence was not used already (see XEP-0047 Section 2.2)
|
||||
|
@ -562,15 +559,20 @@ public class InBandBytestreamSession implements BytestreamSession {
|
|||
return false;
|
||||
}
|
||||
|
||||
// stanza contains data packet extension
|
||||
PacketExtension packetExtension = packet.getExtension(DataPacketExtension.ELEMENT,
|
||||
DataPacketExtension.NAMESPACE);
|
||||
if (packetExtension == null || !(packetExtension instanceof DataPacketExtension)) {
|
||||
return false;
|
||||
DataPacketExtension data;
|
||||
if (packet instanceof Data) {
|
||||
data = ((Data) packet).getDataPacketExtension();
|
||||
} else {
|
||||
// stanza contains data packet extension
|
||||
data = packet.getExtension(
|
||||
DataPacketExtension.ELEMENT,
|
||||
DataPacketExtension.NAMESPACE);
|
||||
if (data == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// session ID equals this session ID
|
||||
DataPacketExtension data = (DataPacketExtension) packetExtension;
|
||||
if (!data.getSessionID().equals(byteStreamRequest.getSessionID())) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
package org.jivesoftware.smackx.bytestreams.ibb.packet;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
/**
|
||||
* Represents a request to close an In-Band Bytestream.
|
||||
|
@ -27,6 +26,7 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
|
|||
public class Close extends IQ {
|
||||
|
||||
public static final String ELEMENT = "close";
|
||||
public static final String NAMESPACE = DataPacketExtension.NAMESPACE;
|
||||
|
||||
/* unique session ID identifying this In-Band Bytestream */
|
||||
private final String sessionID;
|
||||
|
@ -37,6 +37,7 @@ public class Close extends IQ {
|
|||
* @param sessionID unique session ID identifying this In-Band Bytestream
|
||||
*/
|
||||
public Close(String sessionID) {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
if (sessionID == null || "".equals(sessionID)) {
|
||||
throw new IllegalArgumentException("Session ID must not be null or empty");
|
||||
}
|
||||
|
@ -54,12 +55,9 @@ public class Close extends IQ {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(ELEMENT);
|
||||
xml.xmlnsAttribute(DataPacketExtension.NAMESPACE);
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.attribute("sid", sessionID);
|
||||
xml.closeEmptyElement();
|
||||
xml.setEmptyElement();
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
package org.jivesoftware.smackx.bytestreams.ibb.packet;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
/**
|
||||
* Represents a chunk of data sent over an In-Band Bytestream encapsulated in an
|
||||
|
@ -36,24 +35,17 @@ public class Data extends IQ {
|
|||
* @param data data packet extension containing the encoded data
|
||||
*/
|
||||
public Data(DataPacketExtension data) {
|
||||
super(DataPacketExtension.ELEMENT, DataPacketExtension.NAMESPACE);
|
||||
if (data == null) {
|
||||
throw new IllegalArgumentException("Data must not be null");
|
||||
}
|
||||
this.dataPacketExtension = data;
|
||||
|
||||
/*
|
||||
* also set as packet extension so that data packet extension can be
|
||||
* retrieved from IQ stanza and message stanza in the same way
|
||||
*/
|
||||
addExtension(data);
|
||||
setType(IQ.Type.set);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data packet extension.
|
||||
* <p>
|
||||
* Convenience method for <code>packet.getExtension("data",
|
||||
* "http://jabber.org/protocol/ibb")</code>.
|
||||
*
|
||||
* @return the data packet extension
|
||||
*/
|
||||
|
@ -62,8 +54,8 @@ public class Data extends IQ {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
return dataPacketExtension.toXML();
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
return dataPacketExtension.getIQChildElementBuilder(xml);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package org.jivesoftware.smackx.bytestreams.ibb.packet;
|
||||
|
||||
import org.jivesoftware.smack.packet.PacketExtension;
|
||||
import org.jivesoftware.smack.packet.IQ.IQChildElementXmlStringBuilder;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.jivesoftware.smack.util.stringencoder.Base64;
|
||||
|
||||
|
@ -135,13 +136,16 @@ public class DataPacketExtension implements PacketExtension {
|
|||
|
||||
@Override
|
||||
public XmlStringBuilder toXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
xml.attribute("seq", Long.toString(seq));
|
||||
xml.attribute("sid", sessionID);
|
||||
xml.rightAngleBracket();
|
||||
xml.append(data);
|
||||
XmlStringBuilder xml = getIQChildElementBuilder(new IQChildElementXmlStringBuilder(this));
|
||||
xml.closeElement(this);
|
||||
return xml;
|
||||
}
|
||||
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.attribute("seq", Long.toString(seq));
|
||||
xml.attribute("sid", sessionID);
|
||||
xml.rightAngleBracket();
|
||||
xml.append(data);
|
||||
return xml;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.jivesoftware.smackx.bytestreams.ibb.packet;
|
|||
import java.util.Locale;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.jivesoftware.smack.packet.IQ.IQChildElementXmlStringBuilder;
|
||||
import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamManager.StanzaType;
|
||||
|
||||
/**
|
||||
|
@ -30,6 +30,7 @@ import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamManager.StanzaTyp
|
|||
public class Open extends IQ {
|
||||
|
||||
public static final String ELEMENT = "open";
|
||||
public static final String NAMESPACE = DataPacketExtension.NAMESPACE;
|
||||
|
||||
/* unique session ID identifying this In-Band Bytestream */
|
||||
private final String sessionID;
|
||||
|
@ -54,6 +55,7 @@ public class Open extends IQ {
|
|||
* @param stanza stanza type used to encapsulate the data
|
||||
*/
|
||||
public Open(String sessionID, int blockSize, StanzaType stanza) {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
if (sessionID == null || "".equals(sessionID)) {
|
||||
throw new IllegalArgumentException("Session ID must not be null or empty");
|
||||
}
|
||||
|
@ -111,14 +113,11 @@ public class Open extends IQ {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(ELEMENT);
|
||||
xml.xmlnsAttribute(DataPacketExtension.NAMESPACE);
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.attribute("block-size", Integer.toString(blockSize));
|
||||
xml.attribute("sid", sessionID);
|
||||
xml.attribute("stanza", stanza.toString().toLowerCase(Locale.US));
|
||||
xml.closeEmptyElement();
|
||||
xml.setEmptyElement();
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ public class Bytestream extends IQ {
|
|||
* The default constructor
|
||||
*/
|
||||
public Bytestream() {
|
||||
super(QUERY_ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -58,6 +59,7 @@ public class Bytestream extends IQ {
|
|||
* @see #setSessionID(String)
|
||||
*/
|
||||
public Bytestream(final String SID) {
|
||||
this();
|
||||
setSessionID(SID);
|
||||
}
|
||||
|
||||
|
@ -215,11 +217,7 @@ public class Bytestream extends IQ {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(QUERY_ELEMENT);
|
||||
xml.xmlnsAttribute(NAMESPACE);
|
||||
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
switch(getType()) {
|
||||
case set:
|
||||
xml.optAttribute("sid", getSessionID());
|
||||
|
@ -236,25 +234,20 @@ public class Bytestream extends IQ {
|
|||
break;
|
||||
case result:
|
||||
xml.rightAngleBracket();
|
||||
if (getUsedHost() != null) {
|
||||
xml.append(getUsedHost().toXML());
|
||||
}
|
||||
xml.optAppend(getUsedHost());
|
||||
// TODO Bytestream can include either used host *or* streamHosts. Never both. This should be ensured by the
|
||||
// constructions mechanisms of Bytestream
|
||||
// A result from the server can also contain stream hosts
|
||||
else if (countStreamHosts() > 0) {
|
||||
for (StreamHost host : streamHosts) {
|
||||
xml.append(host.toXML());
|
||||
}
|
||||
for (StreamHost host : streamHosts) {
|
||||
xml.append(host.toXML());
|
||||
}
|
||||
break;
|
||||
case get:
|
||||
xml.closeEmptyElement();
|
||||
// Return here so that we don't run into the
|
||||
// closeElement(QUERY_ELEMNT) section
|
||||
return xml;
|
||||
xml.setEmptyElement();
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
xml.closeElement(QUERY_ELEMENT);
|
||||
|
||||
return xml;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ package org.jivesoftware.smackx.commands.packet;
|
|||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.PacketExtension;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.jivesoftware.smackx.commands.AdHocCommand;
|
||||
import org.jivesoftware.smackx.commands.AdHocCommand.Action;
|
||||
import org.jivesoftware.smackx.commands.AdHocCommand.SpecificErrorCondition;
|
||||
|
@ -66,12 +65,11 @@ public class AdHocCommandData extends IQ {
|
|||
private AdHocCommand.Action executeAction;
|
||||
|
||||
public AdHocCommandData() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(ELEMENT).xmlnsAttribute(NAMESPACE);
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.attribute("node", node);
|
||||
xml.optAttribute("sessionid", sessionID);
|
||||
xml.optAttribute("status", status);
|
||||
|
@ -108,7 +106,6 @@ public class AdHocCommandData extends IQ {
|
|||
// buf.append(getError().toXML());
|
||||
// }
|
||||
|
||||
xml.closeElement(ELEMENT);
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@ import java.util.Set;
|
|||
*/
|
||||
public class DiscoverInfo extends IQ implements Cloneable {
|
||||
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = "http://jabber.org/protocol/disco#info";
|
||||
|
||||
private final List<Feature> features = new LinkedList<Feature>();
|
||||
|
@ -50,7 +51,7 @@ public class DiscoverInfo extends IQ implements Cloneable {
|
|||
private boolean containsDuplicateFeatures;
|
||||
|
||||
public DiscoverInfo() {
|
||||
super();
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -212,10 +213,7 @@ public class DiscoverInfo extends IQ implements Cloneable {
|
|||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement("query");
|
||||
xml.xmlnsAttribute(NAMESPACE);
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.optAttribute("node", getNode());
|
||||
xml.rightAngleBracket();
|
||||
for (Identity identity : identities) {
|
||||
|
@ -224,9 +222,7 @@ public class DiscoverInfo extends IQ implements Cloneable {
|
|||
for (Feature feature : features) {
|
||||
xml.append(feature.toXML());
|
||||
}
|
||||
// Add packet extensions, if any are defined.
|
||||
xml.append(getExtensionsXML());
|
||||
xml.closeElement("query");
|
||||
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,11 +35,16 @@ import java.util.List;
|
|||
*/
|
||||
public class DiscoverItems extends IQ {
|
||||
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = "http://jabber.org/protocol/disco#items";
|
||||
|
||||
private final List<Item> items = new LinkedList<Item>();
|
||||
private String node;
|
||||
|
||||
public DiscoverItems() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a new item to the discovered information.
|
||||
*
|
||||
|
@ -97,10 +102,8 @@ public class DiscoverItems extends IQ {
|
|||
this.node = node;
|
||||
}
|
||||
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement("query");
|
||||
xml.xmlnsAttribute(NAMESPACE);
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.optAttribute("node", getNode());
|
||||
xml.rightAngleBracket();
|
||||
|
||||
|
@ -108,7 +111,6 @@ public class DiscoverItems extends IQ {
|
|||
xml.append(item.toXML());
|
||||
}
|
||||
|
||||
xml.closeElement("query");
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,6 @@ import java.io.IOException;
|
|||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.provider.IQProvider;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
|
@ -37,12 +36,14 @@ import org.xmlpull.v1.XmlPullParserException;
|
|||
*/
|
||||
public class LastActivity extends IQ {
|
||||
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = "jabber:iq:last";
|
||||
|
||||
public long lastActivity = -1;
|
||||
public String message;
|
||||
|
||||
public LastActivity() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
setType(IQ.Type.get);
|
||||
}
|
||||
|
||||
|
@ -52,15 +53,12 @@ public class LastActivity extends IQ {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(IQ.QUERY_ELEMENT);
|
||||
xml.xmlnsAttribute(NAMESPACE);
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.optLongAttribute("seconds", lastActivity);
|
||||
|
||||
// We don't support adding the optional message attribute, because it is usually only added
|
||||
// by XMPP servers and not by client entities.
|
||||
xml.closeEmptyElement();
|
||||
xml.setEmptyElement();
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.jivesoftware.smack.packet.IQ;
|
|||
import org.jivesoftware.smack.provider.IQProvider;
|
||||
import org.jivesoftware.smackx.iqprivate.packet.DefaultPrivateData;
|
||||
import org.jivesoftware.smackx.iqprivate.packet.PrivateData;
|
||||
import org.jivesoftware.smackx.iqprivate.packet.PrivateDataIQ;
|
||||
import org.jivesoftware.smackx.iqprivate.provider.PrivateDataProvider;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
@ -156,18 +157,9 @@ public class PrivateDataManager extends Manager {
|
|||
public PrivateData getPrivateData(final String elementName, final String namespace) throws NoResponseException, XMPPErrorException, NotConnectedException
|
||||
{
|
||||
// Create an IQ packet to get the private data.
|
||||
IQ privateDataGet = new IQ() {
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<query xmlns=\"jabber:iq:private\">");
|
||||
buf.append("<").append(elementName).append(" xmlns=\"").append(namespace).append("\"/>");
|
||||
buf.append("</query>");
|
||||
return buf.toString();
|
||||
}
|
||||
};
|
||||
privateDataGet.setType(IQ.Type.get);
|
||||
IQ privateDataGet = new PrivateDataIQ(elementName, namespace);
|
||||
|
||||
PrivateDataResult response = (PrivateDataResult) connection().createPacketCollectorAndSend(
|
||||
PrivateDataIQ response = connection().createPacketCollectorAndSend(
|
||||
privateDataGet).nextResultOrThrow();
|
||||
return response.getPrivateData();
|
||||
}
|
||||
|
@ -184,16 +176,7 @@ public class PrivateDataManager extends Manager {
|
|||
*/
|
||||
public void setPrivateData(final PrivateData privateData) throws NoResponseException, XMPPErrorException, NotConnectedException {
|
||||
// Create an IQ packet to set the private data.
|
||||
IQ privateDataSet = new IQ() {
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<query xmlns=\"jabber:iq:private\">");
|
||||
buf.append(privateData.toXML());
|
||||
buf.append("</query>");
|
||||
return buf.toString();
|
||||
}
|
||||
};
|
||||
privateDataSet.setType(IQ.Type.set);
|
||||
IQ privateDataSet = new PrivateDataIQ(privateData);
|
||||
|
||||
connection().createPacketCollectorAndSend(privateDataSet).nextResultOrThrow();
|
||||
}
|
||||
|
@ -214,10 +197,10 @@ public class PrivateDataManager extends Manager {
|
|||
/**
|
||||
* An IQ provider to parse IQ results containing private data.
|
||||
*/
|
||||
public static class PrivateDataIQProvider extends IQProvider<PrivateDataResult> {
|
||||
public static class PrivateDataIQProvider extends IQProvider<PrivateDataIQ> {
|
||||
|
||||
@Override
|
||||
public PrivateDataResult parse(XmlPullParser parser, int initialDepth)
|
||||
public PrivateDataIQ parse(XmlPullParser parser, int initialDepth)
|
||||
throws XmlPullParserException, IOException, SmackException {
|
||||
PrivateData privateData = null;
|
||||
boolean done = false;
|
||||
|
@ -268,33 +251,7 @@ public class PrivateDataManager extends Manager {
|
|||
}
|
||||
}
|
||||
}
|
||||
return new PrivateDataResult(privateData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An IQ packet to hold PrivateData GET results.
|
||||
*/
|
||||
private static class PrivateDataResult extends IQ {
|
||||
|
||||
private PrivateData privateData;
|
||||
|
||||
PrivateDataResult(PrivateData privateData) {
|
||||
this.privateData = privateData;
|
||||
}
|
||||
|
||||
public PrivateData getPrivateData() {
|
||||
return privateData;
|
||||
}
|
||||
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<query xmlns=\"jabber:iq:private\">");
|
||||
if (privateData != null) {
|
||||
buf.append(privateData.toXML());
|
||||
}
|
||||
buf.append("</query>");
|
||||
return buf.toString();
|
||||
return new PrivateDataIQ(privateData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/**
|
||||
*
|
||||
* Copyright © 2014 Florian Schmaus
|
||||
*
|
||||
* 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.iqprivate.packet;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
|
||||
public class PrivateDataIQ extends IQ {
|
||||
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = "jabber:iq:private";
|
||||
|
||||
private final PrivateData privateData;
|
||||
private final String getElement;
|
||||
private final String getNamespace;
|
||||
|
||||
public PrivateDataIQ(PrivateData privateData) {
|
||||
this(privateData, null, null);
|
||||
setType(Type.set);
|
||||
}
|
||||
|
||||
public PrivateDataIQ(String element, String namespace) {
|
||||
this(null, element, namespace);
|
||||
setType(Type.get);
|
||||
}
|
||||
|
||||
private PrivateDataIQ(PrivateData privateData, String getElement, String getNamespace) {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
this.privateData = privateData;
|
||||
this.getElement = getElement;
|
||||
this.getNamespace = getNamespace;
|
||||
}
|
||||
|
||||
public PrivateData getPrivateData() {
|
||||
return privateData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.rightAngleBracket();
|
||||
if (privateData != null) {
|
||||
xml.append(privateData.toXML());
|
||||
} else {
|
||||
xml.halfOpenElement(getElement).xmlnsAttribute(getNamespace).closeEmptyElement();
|
||||
}
|
||||
return xml;
|
||||
}
|
||||
}
|
|
@ -21,7 +21,6 @@ import java.util.Map;
|
|||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.PacketExtension;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
/**
|
||||
* Represents registration packets. An empty GET query will cause the server to return information
|
||||
|
@ -48,6 +47,7 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
|
|||
*/
|
||||
public class Registration extends IQ {
|
||||
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = "jabber:iq:register";
|
||||
|
||||
private final String instructions;
|
||||
|
@ -62,6 +62,7 @@ public class Registration extends IQ {
|
|||
}
|
||||
|
||||
public Registration(String instructions, Map<String, String> attributes) {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
this.instructions = instructions;
|
||||
this.attributes = attributes;
|
||||
}
|
||||
|
@ -87,10 +88,7 @@ public class Registration extends IQ {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(QUERY_ELEMENT);
|
||||
xml.xmlnsAttribute(NAMESPACE);
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.rightAngleBracket();
|
||||
xml.optElement("instructions", instructions);
|
||||
if (attributes != null && attributes.size() > 0) {
|
||||
|
@ -99,9 +97,6 @@ public class Registration extends IQ {
|
|||
xml.element(name, value);
|
||||
}
|
||||
}
|
||||
// Add packet extensions, if any are defined.
|
||||
xml.append(getExtensionsXML());
|
||||
xml.closeElement(QUERY_ELEMENT);
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ package org.jivesoftware.smackx.iqversion.packet;
|
|||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.Packet;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
/**
|
||||
* A Version IQ packet, which is used by XMPP clients to discover version information
|
||||
|
@ -49,6 +48,7 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
|
|||
* @author Gaston Dombiak
|
||||
*/
|
||||
public class Version extends IQ {
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = "jabber:iq:version";
|
||||
|
||||
private final String name;
|
||||
|
@ -56,6 +56,7 @@ public class Version extends IQ {
|
|||
private String os;
|
||||
|
||||
public Version() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
name = null;
|
||||
version = null;
|
||||
setType(Type.get);
|
||||
|
@ -83,6 +84,7 @@ public class Version extends IQ {
|
|||
* @param os The operating system of the queried entity. This element is OPTIONAL.
|
||||
*/
|
||||
public Version(String name, String version, String os) {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
if (name == null)
|
||||
{
|
||||
throw new IllegalArgumentException("name must not be null");
|
||||
|
@ -141,15 +143,13 @@ public class Version extends IQ {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(IQ.QUERY_ELEMENT).xmlnsAttribute(NAMESPACE).rightAngleBracket();
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.rightAngleBracket();
|
||||
// Although not really optional elements, 'name' and 'version' are not set when sending a
|
||||
// version request. So we must handle the case that those are 'null' here.
|
||||
xml.optElement("name", name);
|
||||
xml.optElement("version", version);
|
||||
xml.optElement("os", os);
|
||||
xml.closeElement(IQ.QUERY_ELEMENT);
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
/**
|
||||
* IQ packet that serves for kicking users, granting and revoking voice, banning users,
|
||||
|
@ -33,10 +32,15 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
|
|||
*/
|
||||
public class MUCAdmin extends IQ {
|
||||
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = MUCInitialPresence.NAMESPACE + "#admin";
|
||||
|
||||
private final List<MUCItem> items = new ArrayList<MUCItem>();
|
||||
|
||||
public MUCAdmin() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a List of item childs that holds information about roles, affiliation,
|
||||
* jids and nicks.
|
||||
|
@ -62,19 +66,15 @@ public class MUCAdmin extends IQ {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(IQ.QUERY_ELEMENT);
|
||||
xml.xmlnsAttribute(NAMESPACE);
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.rightAngleBracket();
|
||||
|
||||
synchronized (items) {
|
||||
for (MUCItem item : items) {
|
||||
xml.append(item.toXML());
|
||||
}
|
||||
}
|
||||
// Add packet extensions, if any are defined.
|
||||
xml.append(getExtensionsXML());
|
||||
xml.closeElement(IQ.QUERY_ELEMENT);
|
||||
|
||||
return xml;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
package org.jivesoftware.smackx.muc.packet;
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
@ -32,11 +31,16 @@ import java.util.List;
|
|||
*/
|
||||
public class MUCOwner extends IQ {
|
||||
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = MUCInitialPresence.NAMESPACE + "#owner";
|
||||
|
||||
private final List<MUCItem> items = new ArrayList<MUCItem>();
|
||||
private Destroy destroy;
|
||||
|
||||
public MUCOwner() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a List of item childs that holds information about affiliation,
|
||||
* jids and nicks.
|
||||
|
@ -84,20 +88,16 @@ public class MUCOwner extends IQ {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(IQ.QUERY_ELEMENT);
|
||||
xml.xmlnsAttribute(NAMESPACE);
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.rightAngleBracket();
|
||||
|
||||
synchronized (items) {
|
||||
for (MUCItem item : items) {
|
||||
xml.append(item.toXML());
|
||||
}
|
||||
}
|
||||
xml.optElement(getDestroy());
|
||||
// Add packet extensions, if any are defined.
|
||||
xml.append(getExtensionsXML());
|
||||
xml.closeElement(IQ.QUERY_ELEMENT);
|
||||
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,10 +35,17 @@ import java.util.List;
|
|||
*/
|
||||
public class OfflineMessageRequest extends IQ {
|
||||
|
||||
public static final String ELEMENT = "offline";
|
||||
public static final String NAMESPACE = "http://jabber.org/protocol/offline";
|
||||
|
||||
private List<Item> items = new ArrayList<Item>();
|
||||
private boolean purge = false;
|
||||
private boolean fetch = false;
|
||||
|
||||
public OfflineMessageRequest() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a List of item childs that holds information about offline messages to
|
||||
* view or delete.
|
||||
|
@ -99,9 +106,10 @@ public class OfflineMessageRequest extends IQ {
|
|||
this.fetch = fetch;
|
||||
}
|
||||
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<offline xmlns=\"http://jabber.org/protocol/offline\">");
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
|
||||
buf.rightAngleBracket();
|
||||
|
||||
synchronized (items) {
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
Item item = items.get(i);
|
||||
|
@ -114,10 +122,8 @@ public class OfflineMessageRequest extends IQ {
|
|||
if (fetch) {
|
||||
buf.append("<fetch/>");
|
||||
}
|
||||
// Add packet extensions, if any are defined.
|
||||
buf.append(getExtensionsXML());
|
||||
buf.append("</offline>");
|
||||
return buf.toString();
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -29,39 +29,20 @@ import org.jivesoftware.smack.packet.IQ;
|
|||
*/
|
||||
public class PEPPubSub extends IQ {
|
||||
|
||||
PEPItem item;
|
||||
public static final String ELEMENT = "pubsub";
|
||||
public static final String NAMESPACE = "http://jabber.org/protocol/pubsub";
|
||||
|
||||
private final PEPItem item;
|
||||
|
||||
/**
|
||||
* Creates a new PubSub.
|
||||
*
|
||||
*/
|
||||
public PEPPubSub(PEPItem item) {
|
||||
super();
|
||||
|
||||
super(ELEMENT, NAMESPACE);
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the XML element name of the extension sub-packet root element.
|
||||
* Always returns "x"
|
||||
*
|
||||
* @return the XML element name of the packet extension.
|
||||
*/
|
||||
public String getElementName() {
|
||||
return "pubsub";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the XML namespace of the extension sub-packet root element.
|
||||
* According the specification the namespace is always "jabber:x:roster"
|
||||
* (which is not to be confused with the 'jabber:iq:roster' namespace
|
||||
*
|
||||
* @return the XML namespace of the packet extension.
|
||||
*/
|
||||
public String getNamespace() {
|
||||
return "http://jabber.org/protocol/pubsub";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the XML representation of a Personal Event Publish according the specification.
|
||||
*
|
||||
|
@ -79,14 +60,15 @@ public class PEPPubSub extends IQ {
|
|||
* </pre>
|
||||
*
|
||||
*/
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<").append(getElementName()).append(" xmlns=\"").append(getNamespace()).append("\">");
|
||||
buf.append("<publish node=\"").append(item.getNode()).append("\">");
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
|
||||
buf.rightAngleBracket();
|
||||
|
||||
buf.openElement("publish").attribute("node", item.getNode()).rightAngleBracket();
|
||||
buf.append(item.toXML());
|
||||
buf.append("</publish>");
|
||||
buf.append("</").append(getElementName()).append(">");
|
||||
return buf.toString();
|
||||
buf.closeElement("publish");
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -17,25 +17,23 @@
|
|||
package org.jivesoftware.smackx.ping.packet;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.SimpleIQ;
|
||||
|
||||
public class Ping extends IQ {
|
||||
public class Ping extends SimpleIQ {
|
||||
|
||||
public static final String ELEMENT = "ping";
|
||||
public static final String NAMESPACE = "urn:xmpp:ping";
|
||||
|
||||
public Ping() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
public Ping(String to) {
|
||||
this();
|
||||
setTo(to);
|
||||
setType(IQ.Type.get);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getChildElementXML() {
|
||||
return '<' + ELEMENT + " xmlns='" + NAMESPACE + "'/>";
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a XMPP Pong for this Ping
|
||||
*
|
||||
|
|
|
@ -56,7 +56,7 @@ import org.jivesoftware.smackx.privacy.packet.PrivacyItem;
|
|||
* @see <a href="http://xmpp.org/extensions/xep-0016.html">XEP-16: Privacy Lists</a>
|
||||
*/
|
||||
public class PrivacyListManager extends Manager {
|
||||
public static final String NAMESPACE = "jabber:iq:privacy";
|
||||
public static final String NAMESPACE = Privacy.NAMESPACE;
|
||||
|
||||
private static final PacketFilter PACKET_FILTER = new AndFilter(IQTypeFilter.SET,
|
||||
new PacketExtensionFilter("query", NAMESPACE));
|
||||
|
|
|
@ -23,7 +23,6 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smackx.privacy.PrivacyListManager;
|
||||
|
||||
/**
|
||||
* A Privacy IQ Packet, is used by the {@link org.jivesoftware.smackx.privacy.PrivacyListManager}
|
||||
|
@ -43,6 +42,9 @@ import org.jivesoftware.smackx.privacy.PrivacyListManager;
|
|||
* @author Francisco Vives
|
||||
*/
|
||||
public class Privacy extends IQ {
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = "jabber:iq:privacy";
|
||||
|
||||
/** declineActiveList is true when the user declines the use of the active list **/
|
||||
private boolean declineActiveList=false;
|
||||
/** activeName is the name associated with the active list set for the session **/
|
||||
|
@ -55,6 +57,10 @@ public class Privacy extends IQ {
|
|||
* key is the name of the list and the value a collection with privacy items. **/
|
||||
private Map<String, List<PrivacyItem>> itemLists = new HashMap<String, List<PrivacyItem>>();
|
||||
|
||||
public Privacy() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set or update a privacy list with privacy items.
|
||||
*
|
||||
|
@ -276,10 +282,10 @@ public class Privacy extends IQ {
|
|||
public Set<String> getPrivacyListNames() {
|
||||
return this.itemLists.keySet();
|
||||
}
|
||||
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<query xmlns=\"" + PrivacyListManager.NAMESPACE + "\">");
|
||||
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
|
||||
buf.rightAngleBracket();
|
||||
|
||||
// Add the active tag
|
||||
if (this.isDeclineActiveList()) {
|
||||
|
@ -318,10 +324,7 @@ public class Privacy extends IQ {
|
|||
}
|
||||
}
|
||||
|
||||
// Add packet extensions, if any are defined.
|
||||
buf.append(getExtensionsXML());
|
||||
buf.append("</query>");
|
||||
return buf.toString();
|
||||
return buf;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ package org.jivesoftware.smackx.pubsub.packet;
|
|||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.PacketExtension;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.jivesoftware.smackx.pubsub.PubSubElementType;
|
||||
|
||||
/**
|
||||
|
@ -36,9 +35,11 @@ public class PubSub extends IQ
|
|||
private PubSubNamespace ns = PubSubNamespace.BASIC;
|
||||
|
||||
public PubSub() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
public PubSub(String to, Type type) {
|
||||
this();
|
||||
setTo(to);
|
||||
setType(type);
|
||||
}
|
||||
|
@ -119,11 +120,11 @@ public class PubSub extends IQ
|
|||
*
|
||||
*/
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(getElementName()).xmlnsAttribute(getNamespace()).rightAngleBracket();
|
||||
xml.append(getExtensionsXML());
|
||||
xml.closeElement(getElementName());
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
// N.B. We could use SimpleIQ here, but PubSub IQs will nearly *always* have packet extensions, which means that
|
||||
// SimpleIQs xml.setEmptyElement() is counter-productive in this case and we use xml.rightAngleBracket()
|
||||
// instead, as there are likely sub-elements to follow.
|
||||
xml.rightAngleBracket();
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,9 +35,16 @@ import java.util.List;
|
|||
*/
|
||||
class SimpleUserSearch extends IQ {
|
||||
|
||||
public static final String ELEMENT = UserSearch.ELEMENT;
|
||||
public static final String NAMESPACE = UserSearch.NAMESPACE;
|
||||
|
||||
private Form form;
|
||||
private ReportedData data;
|
||||
|
||||
public SimpleUserSearch() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
public void setForm(Form form) {
|
||||
this.form = form;
|
||||
}
|
||||
|
@ -46,13 +53,11 @@ class SimpleUserSearch extends IQ {
|
|||
return data;
|
||||
}
|
||||
|
||||
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<query xmlns=\"jabber:iq:search\">");
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
|
||||
buf.rightAngleBracket();
|
||||
buf.append(getItemsToSearch());
|
||||
buf.append("</query>");
|
||||
return buf.toString();
|
||||
return buf;
|
||||
}
|
||||
|
||||
private String getItemsToSearch() {
|
||||
|
|
|
@ -24,9 +24,9 @@ import org.jivesoftware.smack.SmackException.NotConnectedException;
|
|||
import org.jivesoftware.smack.XMPPConnection;
|
||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.SimpleIQ;
|
||||
import org.jivesoftware.smack.provider.IQProvider;
|
||||
import org.jivesoftware.smack.util.PacketParserUtils;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.jivesoftware.smackx.xdata.Form;
|
||||
import org.jivesoftware.smackx.xdata.FormField;
|
||||
import org.jivesoftware.smackx.xdata.packet.DataForm;
|
||||
|
@ -43,25 +43,16 @@ import org.xmlpull.v1.XmlPullParserException;
|
|||
*
|
||||
* @author Derek DeMoro
|
||||
*/
|
||||
public class UserSearch extends IQ {
|
||||
public class UserSearch extends SimpleIQ {
|
||||
|
||||
public static final String ELEMENT = QUERY_ELEMENT;
|
||||
public static final String NAMESPACE = "jabber:iq:search";
|
||||
|
||||
/**
|
||||
* Creates a new instance of UserSearch.
|
||||
*/
|
||||
public UserSearch() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder getChildElementXML() {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(IQ.QUERY_ELEMENT);
|
||||
xml.xmlnsAttribute(NAMESPACE);
|
||||
xml.rightAngleBracket();
|
||||
xml.append(getExtensionsXML());
|
||||
xml.closeElement(IQ.QUERY_ELEMENT);
|
||||
return xml;
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -36,8 +36,15 @@ import java.util.List;
|
|||
*/
|
||||
public class SharedGroupsInfo extends IQ {
|
||||
|
||||
public static final String ELEMENT = "sharedgroup";
|
||||
public static final String NAMESPACE = "http://www.jivesoftware.org/protocol/sharedgroup";
|
||||
|
||||
private List<String> groups = new ArrayList<String>();
|
||||
|
||||
public SharedGroupsInfo() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a collection with the shared group names returned from the server.
|
||||
*
|
||||
|
@ -47,14 +54,13 @@ public class SharedGroupsInfo extends IQ {
|
|||
return groups;
|
||||
}
|
||||
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<sharedgroup xmlns=\"http://www.jivesoftware.org/protocol/sharedgroup\">");
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
|
||||
buf.rightAngleBracket();
|
||||
for (String group : groups) {
|
||||
buf.append("<group>").append(group).append("</group>");
|
||||
buf.element("group", group);
|
||||
}
|
||||
buf.append("</sharedgroup>");
|
||||
return buf.toString();
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -31,6 +31,9 @@ import org.jivesoftware.smackx.xdata.packet.DataForm;
|
|||
*/
|
||||
public class StreamInitiation extends IQ {
|
||||
|
||||
public static final String ELEMENT = "si";
|
||||
public static final String NAMESPACE = "http://jabber.org/protocol/si";
|
||||
|
||||
private String id;
|
||||
|
||||
private String mimeType;
|
||||
|
@ -39,6 +42,10 @@ public class StreamInitiation extends IQ {
|
|||
|
||||
private Feature featureNegotiation;
|
||||
|
||||
public StreamInitiation() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
* The "id" attribute is an opaque identifier. This attribute MUST be
|
||||
* present on type='set', and MUST be a valid string. This SHOULD NOT be
|
||||
|
@ -127,41 +134,28 @@ public class StreamInitiation extends IQ {
|
|||
return featureNegotiation.getData();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.jivesoftware.smack.packet.IQ#getChildElementXML()
|
||||
*/
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
if (this.getType().equals(IQ.Type.set)) {
|
||||
buf.append("<si xmlns=\"http://jabber.org/protocol/si\" ");
|
||||
if (getSessionID() != null) {
|
||||
buf.append("id=\"").append(getSessionID()).append("\" ");
|
||||
}
|
||||
if (getMimeType() != null) {
|
||||
buf.append("mime-type=\"").append(getMimeType()).append("\" ");
|
||||
}
|
||||
buf
|
||||
.append("profile=\"http://jabber.org/protocol/si/profile/file-transfer\">");
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
|
||||
switch (getType()) {
|
||||
case set:
|
||||
buf.optAttribute("id", getSessionID());
|
||||
buf.optAttribute("mime-type", getMimeType());
|
||||
buf.attribute("profile", NAMESPACE + "/profile/file-transfer");
|
||||
buf.rightAngleBracket();
|
||||
|
||||
// Add the file section if there is one.
|
||||
String fileXML = file.toXML();
|
||||
if (fileXML != null) {
|
||||
buf.append(fileXML);
|
||||
}
|
||||
}
|
||||
else if (this.getType().equals(IQ.Type.result)) {
|
||||
buf.append("<si xmlns=\"http://jabber.org/protocol/si\">");
|
||||
}
|
||||
else {
|
||||
buf.optAppend(file.toXML());
|
||||
break;
|
||||
case result:
|
||||
buf.rightAngleBracket();
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("IQ Type not understood");
|
||||
}
|
||||
if (featureNegotiation != null) {
|
||||
buf.append(featureNegotiation.toXML());
|
||||
}
|
||||
buf.append("</si>");
|
||||
return buf.toString();
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -43,6 +43,7 @@ public class Time extends IQ {
|
|||
private String tzo;
|
||||
|
||||
public Time() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
setType(Type.get);
|
||||
}
|
||||
|
||||
|
@ -53,6 +54,7 @@ public class Time extends IQ {
|
|||
* @param cal the time value.
|
||||
*/
|
||||
public Time(Calendar cal) {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
tzo = XmppDateTime.asString(cal.getTimeZone());
|
||||
// Convert local time to the UTC time.
|
||||
utc = XmppDateTime.formatXEP0082Date(cal.getTime());
|
||||
|
@ -128,14 +130,17 @@ public class Time extends IQ {
|
|||
return time;
|
||||
}
|
||||
|
||||
public String getChildElementXML() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append("<" + ELEMENT + " xmlns='" + NAMESPACE + "'>");
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
|
||||
buf.rightAngleBracket();
|
||||
|
||||
if (utc != null) {
|
||||
buf.append("<utc>").append(utc).append("</utc>");
|
||||
buf.append("<tzo>").append(tzo).append("</tzo>");
|
||||
} else {
|
||||
buf.setEmptyElement();
|
||||
}
|
||||
buf.append("</" + ELEMENT + ">");
|
||||
return buf.toString();
|
||||
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,6 @@ import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
|||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
import org.jivesoftware.smack.util.stringencoder.Base64;
|
||||
import org.jivesoftware.smackx.vcardtemp.VCardManager;
|
||||
|
||||
/**
|
||||
* A VCard class for use with the
|
||||
|
@ -82,6 +81,9 @@ import org.jivesoftware.smackx.vcardtemp.VCardManager;
|
|||
* @author Kirill Maximov (kir@maxkir.com)
|
||||
*/
|
||||
public class VCard extends IQ {
|
||||
public static final String ELEMENT = "vCard";
|
||||
public static final String NAMESPACE = "vcard-temp";
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(VCard.class.getName());
|
||||
|
||||
private static final String DEFAULT_MIME_TYPE = "image/jpeg";
|
||||
|
@ -123,6 +125,7 @@ public class VCard extends IQ {
|
|||
private Map<String, String> otherUnescapableFields = new HashMap<String, String>();
|
||||
|
||||
public VCard() {
|
||||
super(ELEMENT, NAMESPACE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -562,10 +565,87 @@ public class VCard extends IQ {
|
|||
copyFieldsFrom(result);
|
||||
}
|
||||
|
||||
public String getChildElementXML() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
new VCardWriter(sb).write();
|
||||
return sb.toString();
|
||||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
if (!hasContent()) {
|
||||
xml.setEmptyElement();
|
||||
return xml;
|
||||
}
|
||||
xml.rightAngleBracket();
|
||||
if (hasNameField()) {
|
||||
xml.openElement("N");
|
||||
xml.element("FAMILY", lastName);
|
||||
xml.element("GIVEN", firstName);
|
||||
xml.element("MIDDLE", middleName);
|
||||
xml.closeElement("N");
|
||||
}
|
||||
if (hasOrganizationFields()) {
|
||||
xml.openElement("ORG");
|
||||
xml.element("ORGNAME", organization);
|
||||
xml.element("ORGUNIT", organizationUnit);
|
||||
xml.closeElement("ORG");
|
||||
}
|
||||
for (Entry<String, String> entry : otherSimpleFields.entrySet()) {
|
||||
xml.element(entry.getKey(), entry.getValue());
|
||||
}
|
||||
for (Entry<String, String> entry : otherUnescapableFields.entrySet()) {
|
||||
xml.openElement(entry.getKey());
|
||||
xml.append(entry.getValue());
|
||||
xml.closeElement(entry.getKey());
|
||||
}
|
||||
if (photoBinval != null) {
|
||||
xml.openElement("PHOTO");
|
||||
xml.escapedElement("BINVAL", photoBinval);
|
||||
xml.element("TYPE", photoMimeType);
|
||||
xml.closeElement("PHOTO");
|
||||
}
|
||||
if (emailWork != null) {
|
||||
xml.openElement("EMAIL");
|
||||
xml.emptyElement("WORK");
|
||||
xml.emptyElement("INTERNET");
|
||||
xml.emptyElement("PREF");
|
||||
xml.element("USERID", emailWork);
|
||||
xml.closeElement("EMAIL");
|
||||
}
|
||||
if (emailHome != null) {
|
||||
xml.openElement("EMAIL");
|
||||
xml.emptyElement("HOME");
|
||||
xml.emptyElement("INTERNET");
|
||||
xml.emptyElement("PREF");
|
||||
xml.element("USERID", emailHome);
|
||||
xml.closeElement("EMAIL");
|
||||
}
|
||||
for (Entry<String, String> phone : workPhones.entrySet()) {
|
||||
xml.openElement("TEL");
|
||||
xml.emptyElement("WORK");
|
||||
xml.emptyElement(phone.getKey());
|
||||
xml.element("NUMBER", phone.getValue());
|
||||
xml.closeElement("TEL");
|
||||
}
|
||||
for (Entry<String, String> phone : homePhones.entrySet()) {
|
||||
xml.openElement("TEL");
|
||||
xml.emptyElement("HOME");
|
||||
xml.emptyElement(phone.getKey());
|
||||
xml.element("NUMBER", phone.getValue());
|
||||
xml.closeElement("TEL");
|
||||
}
|
||||
if (!workAddr.isEmpty()) {
|
||||
xml.openElement("ADR");
|
||||
xml.emptyElement("WORK");
|
||||
for (Entry<String, String> entry : workAddr.entrySet()) {
|
||||
xml.element(entry.getKey(), entry.getValue());
|
||||
}
|
||||
xml.closeElement("ADR");
|
||||
}
|
||||
if (!homeAddr.isEmpty()) {
|
||||
xml.openElement("ADR");
|
||||
xml.emptyElement("HOME");
|
||||
for (Entry<String, String> entry : homeAddr.entrySet()) {
|
||||
xml.element(entry.getKey(), entry.getValue());
|
||||
}
|
||||
xml.closeElement("ADR");
|
||||
}
|
||||
return xml;
|
||||
}
|
||||
|
||||
private void copyFieldsFrom(VCard from) {
|
||||
|
@ -688,173 +768,5 @@ public class VCard extends IQ {
|
|||
return result;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return getChildElementXML();
|
||||
}
|
||||
|
||||
//==============================================================
|
||||
|
||||
private class VCardWriter {
|
||||
|
||||
private final StringBuilder sb;
|
||||
|
||||
VCardWriter(StringBuilder sb) {
|
||||
this.sb = sb;
|
||||
}
|
||||
|
||||
public void write() {
|
||||
appendTag(VCardManager.ELEMENT, "xmlns", VCardManager.NAMESPACE, hasContent(), new ContentBuilder() {
|
||||
public void addTagContent() {
|
||||
buildActualContent();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void buildActualContent() {
|
||||
if (hasNameField()) {
|
||||
appendN();
|
||||
}
|
||||
|
||||
appendOrganization();
|
||||
appendGenericFields();
|
||||
appendPhoto();
|
||||
|
||||
appendEmail(emailWork, "WORK");
|
||||
appendEmail(emailHome, "HOME");
|
||||
|
||||
appendPhones(workPhones, "WORK");
|
||||
appendPhones(homePhones, "HOME");
|
||||
|
||||
appendAddress(workAddr, "WORK");
|
||||
appendAddress(homeAddr, "HOME");
|
||||
}
|
||||
|
||||
private void appendPhoto() {
|
||||
if (photoBinval == null)
|
||||
return;
|
||||
|
||||
appendTag("PHOTO", true, new ContentBuilder() {
|
||||
public void addTagContent() {
|
||||
appendTag("BINVAL", photoBinval); // No need to escape photoBinval, as it's already Base64 encoded
|
||||
appendTag("TYPE", StringUtils.escapeForXML(photoMimeType));
|
||||
}
|
||||
});
|
||||
}
|
||||
private void appendEmail(final String email, final String type) {
|
||||
if (email != null) {
|
||||
appendTag("EMAIL", true, new ContentBuilder() {
|
||||
public void addTagContent() {
|
||||
appendEmptyTag(type);
|
||||
appendEmptyTag("INTERNET");
|
||||
appendEmptyTag("PREF");
|
||||
appendTag("USERID", StringUtils.escapeForXML(email));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void appendPhones(Map<String, String> phones, final String code) {
|
||||
for (final Map.Entry<String,String> entry : phones.entrySet()) {
|
||||
appendTag("TEL", true, new ContentBuilder() {
|
||||
public void addTagContent() {
|
||||
appendEmptyTag(entry.getKey());
|
||||
appendEmptyTag(code);
|
||||
appendTag("NUMBER", StringUtils.escapeForXML(entry.getValue()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void appendAddress(final Map<String, String> addr, final String code) {
|
||||
if (addr.size() > 0) {
|
||||
appendTag("ADR", true, new ContentBuilder() {
|
||||
public void addTagContent() {
|
||||
appendEmptyTag(code);
|
||||
|
||||
for (final Entry<String, String> entry : addr.entrySet()) {
|
||||
appendTag(entry.getKey(), StringUtils.escapeForXML(entry.getValue()));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void appendEmptyTag(Object tag) {
|
||||
sb.append('<').append(tag).append("/>");
|
||||
}
|
||||
|
||||
private void appendGenericFields() {
|
||||
for (Map.Entry<String, String> entry : otherSimpleFields.entrySet()) {
|
||||
appendTag(entry.getKey().toString(),
|
||||
StringUtils.escapeForXML(entry.getValue()));
|
||||
}
|
||||
|
||||
for (Map.Entry<String, String> entry : otherUnescapableFields.entrySet()) {
|
||||
appendTag(entry.getKey().toString(),entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
private void appendOrganization() {
|
||||
if (hasOrganizationFields()) {
|
||||
appendTag("ORG", true, new ContentBuilder() {
|
||||
public void addTagContent() {
|
||||
appendTag("ORGNAME", StringUtils.escapeForXML(organization));
|
||||
appendTag("ORGUNIT", StringUtils.escapeForXML(organizationUnit));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void appendN() {
|
||||
appendTag("N", true, new ContentBuilder() {
|
||||
public void addTagContent() {
|
||||
appendTag("FAMILY", StringUtils.escapeForXML(lastName));
|
||||
appendTag("GIVEN", StringUtils.escapeForXML(firstName));
|
||||
appendTag("MIDDLE", StringUtils.escapeForXML(middleName));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void appendTag(String tag, String attr, String attrValue, boolean hasContent,
|
||||
ContentBuilder builder) {
|
||||
sb.append('<').append(tag);
|
||||
if (attr != null) {
|
||||
sb.append(' ').append(attr).append('=').append('\'').append(attrValue).append('\'');
|
||||
}
|
||||
|
||||
if (hasContent) {
|
||||
sb.append('>');
|
||||
builder.addTagContent();
|
||||
sb.append("</").append(tag).append(">\n");
|
||||
}
|
||||
else {
|
||||
sb.append("/>\n");
|
||||
}
|
||||
}
|
||||
|
||||
private void appendTag(String tag, boolean hasContent, ContentBuilder builder) {
|
||||
appendTag(tag, null, null, hasContent, builder);
|
||||
}
|
||||
|
||||
private void appendTag(String tag, final CharSequence tagText) {
|
||||
if (tagText == null) return;
|
||||
final ContentBuilder contentBuilder = new ContentBuilder() {
|
||||
public void addTagContent() {
|
||||
sb.append(tagText.toString().trim());
|
||||
}
|
||||
};
|
||||
appendTag(tag, true, contentBuilder);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//==============================================================
|
||||
|
||||
private interface ContentBuilder {
|
||||
|
||||
void addTagContent();
|
||||
}
|
||||
|
||||
//==============================================================
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.bytestreams.ibb;
|
||||
|
||||
import org.jivesoftware.smack.packet.EmptyResultIQ;
|
||||
import org.jivesoftware.smack.packet.ErrorIQ;
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.XMPPError;
|
||||
|
||||
|
@ -35,17 +37,10 @@ public class IBBPacketUtils {
|
|||
* @return an error IQ
|
||||
*/
|
||||
public static IQ createErrorIQ(String from, String to, XMPPError xmppError) {
|
||||
IQ errorIQ = new IQ() {
|
||||
|
||||
public String getChildElementXML() {
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
IQ errorIQ = new ErrorIQ(xmppError);
|
||||
errorIQ.setType(IQ.Type.error);
|
||||
errorIQ.setFrom(from);
|
||||
errorIQ.setTo(to);
|
||||
errorIQ.setError(xmppError);
|
||||
return errorIQ;
|
||||
}
|
||||
|
||||
|
@ -57,13 +52,7 @@ public class IBBPacketUtils {
|
|||
* @return a result IQ
|
||||
*/
|
||||
public static IQ createResultIQ(String from, String to) {
|
||||
IQ result = new IQ() {
|
||||
|
||||
public String getChildElementXML() {
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
IQ result = new EmptyResultIQ();
|
||||
result.setType(IQ.Type.result);
|
||||
result.setFrom(from);
|
||||
result.setTo(to);
|
||||
|
|
|
@ -64,8 +64,8 @@ public class CloseTest {
|
|||
@Test
|
||||
public void shouldReturnValidIQStanzaXML() throws Exception {
|
||||
String control = XMLBuilder.create("iq")
|
||||
.a("from", "romeo@montague.lit/orchard")
|
||||
.a("to", "juliet@capulet.lit/balcony")
|
||||
.a("from", "romeo@montague.lit/orchard")
|
||||
.a("id", "us71g45j")
|
||||
.a("type", "set")
|
||||
.e("close")
|
||||
|
|
|
@ -19,12 +19,10 @@ package org.jivesoftware.smackx.bytestreams.ibb.packet;
|
|||
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
import org.jivesoftware.smack.util.stringencoder.Base64;
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -70,16 +68,7 @@ public class DataTest {
|
|||
.t(encodedData)
|
||||
.asString(outputProperties);
|
||||
|
||||
DataPacketExtension dpe = mock(DataPacketExtension.class);
|
||||
XmlStringBuilder dataTag = new XmlStringBuilder();
|
||||
dataTag.halfOpenElement(DataPacketExtension.ELEMENT);
|
||||
dataTag.xmlnsAttribute(DataPacketExtension.NAMESPACE);
|
||||
dataTag.attribute("seq", "0");
|
||||
dataTag.attribute("sid", "i781hf64");
|
||||
dataTag.rightAngleBracket();
|
||||
dataTag.escape(encodedData);
|
||||
dataTag.closeElement(DataPacketExtension.ELEMENT);
|
||||
when(dpe.toXML()).thenReturn(dataTag);
|
||||
DataPacketExtension dpe = new DataPacketExtension("i781hf64", 0, encodedData);
|
||||
Data data = new Data(dpe);
|
||||
data.setFrom("romeo@montague.lit/orchard");
|
||||
data.setTo("juliet@capulet.lit/balcony");
|
||||
|
|
|
@ -34,9 +34,9 @@ import org.jivesoftware.smack.SmackException.FeatureNotSupportedException;
|
|||
import org.jivesoftware.smack.XMPPConnection;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
import org.jivesoftware.smack.packet.ErrorIQ;
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.XMPPError;
|
||||
import org.jivesoftware.smack.packet.IQ.Type;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream.StreamHost;
|
||||
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
|
||||
|
@ -426,14 +426,7 @@ public class Socks5ByteStreamManagerTest {
|
|||
|
||||
// build error packet to reject SOCKS5 Bytestream
|
||||
XMPPError xmppError = new XMPPError(XMPPError.Condition.not_acceptable);
|
||||
IQ rejectPacket = new IQ() {
|
||||
|
||||
public String getChildElementXML() {
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
rejectPacket.setType(Type.error);
|
||||
IQ rejectPacket = new ErrorIQ(xmppError);
|
||||
rejectPacket.setFrom(targetJID);
|
||||
rejectPacket.setTo(initiatorJID);
|
||||
rejectPacket.setError(xmppError);
|
||||
|
|
|
@ -30,9 +30,10 @@ import org.jivesoftware.smack.SmackException;
|
|||
import org.jivesoftware.smack.XMPPConnection;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
import org.jivesoftware.smack.packet.EmptyResultIQ;
|
||||
import org.jivesoftware.smack.packet.ErrorIQ;
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.XMPPError;
|
||||
import org.jivesoftware.smack.packet.IQ.Type;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream.StreamHost;
|
||||
import org.jivesoftware.util.ConnectionUtils;
|
||||
|
@ -197,17 +198,9 @@ public class Socks5ClientForInitiatorTest {
|
|||
|
||||
// build error response as reply to the stream activation
|
||||
XMPPError xmppError = new XMPPError(XMPPError.Condition.internal_server_error);
|
||||
IQ error = new IQ() {
|
||||
|
||||
public String getChildElementXML() {
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
error.setType(Type.error);
|
||||
IQ error = new ErrorIQ(xmppError);
|
||||
error.setFrom(proxyJID);
|
||||
error.setTo(initiatorJID);
|
||||
error.setError(xmppError);
|
||||
|
||||
protocol.addResponse(error, Verification.correspondingSenderReceiver,
|
||||
Verification.requestTypeSET);
|
||||
|
@ -249,17 +242,10 @@ public class Socks5ClientForInitiatorTest {
|
|||
public void shouldSuccessfullyEstablishConnectionAndActivateSocks5Proxy() throws Exception {
|
||||
|
||||
// build activation confirmation response
|
||||
IQ activationResponse = new IQ() {
|
||||
IQ activationResponse = new EmptyResultIQ();
|
||||
|
||||
@Override
|
||||
public String getChildElementXML() {
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
activationResponse.setFrom(proxyJID);
|
||||
activationResponse.setTo(initiatorJID);
|
||||
activationResponse.setType(IQ.Type.result);
|
||||
|
||||
protocol.addResponse(activationResponse, Verification.correspondingSenderReceiver,
|
||||
Verification.requestTypeSET, new Verification<Bytestream, IQ>() {
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.bytestreams.socks5;
|
||||
|
||||
import org.jivesoftware.smack.packet.EmptyResultIQ;
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream;
|
||||
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
|
||||
|
@ -100,17 +101,9 @@ public class Socks5PacketUtils {
|
|||
* @return response IQ for a activation request to the proxy
|
||||
*/
|
||||
public static IQ createActivationConfirmation(String from, String to) {
|
||||
IQ response = new IQ() {
|
||||
|
||||
@Override
|
||||
public String getChildElementXML() {
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
IQ response = new EmptyResultIQ();
|
||||
response.setFrom(from);
|
||||
response.setTo(to);
|
||||
response.setType(IQ.Type.result);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue