1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2024-11-22 03:52:06 +01:00

Merge branch '4.2' into master-paul-merged

This commit is contained in:
Florian Schmaus 2017-12-17 11:16:02 +01:00
commit 431e5b3c67
434 changed files with 1770 additions and 1517 deletions

View file

@ -341,7 +341,7 @@ public abstract class ConnectionConfiguration {
* An enumeration for TLS security modes that are available when making a connection * An enumeration for TLS security modes that are available when making a connection
* to the XMPP server. * to the XMPP server.
*/ */
public static enum SecurityMode { public enum SecurityMode {
/** /**
* Security via TLS encryption is required in order to connect. If the server * Security via TLS encryption is required in order to connect. If the server
@ -492,7 +492,7 @@ public abstract class ConnectionConfiguration {
* <p> * <p>
* This is an abstract class that uses the builder design pattern and the "getThis() trick" to recover the type of * This is an abstract class that uses the builder design pattern and the "getThis() trick" to recover the type of
* the builder in a class hierarchies with a self-referential generic supertype. Otherwise chaining of build * the builder in a class hierarchies with a self-referential generic supertype. Otherwise chaining of build
* instructions from the superclasses followed by build instructions of a sublcass would not be possible, because * instructions from the superclasses followed by build instructions of a subclass would not be possible, because
* the superclass build instructions would return the builder of the superclass and not the one of the subclass. You * the superclass build instructions would return the builder of the superclass and not the one of the subclass. You
* can read more about it a Angelika Langer's Generics FAQ, especially the entry <a * can read more about it a Angelika Langer's Generics FAQ, especially the entry <a
* href="http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ206">What is the * href="http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ206">What is the
@ -649,7 +649,7 @@ public abstract class ConnectionConfiguration {
public B setPort(int port) { public B setPort(int port) {
if (port < 0 || port > 65535) { if (port < 0 || port > 65535) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Port must be a 16-bit unsiged integer (i.e. between 0-65535. Port was: " + port); "Port must be a 16-bit unsigned integer (i.e. between 0-65535. Port was: " + port);
} }
this.port = port; this.port = port;
return getThis(); return getThis();
@ -938,7 +938,7 @@ public abstract class ConnectionConfiguration {
Set<String> blacklistedMechanisms = SASLAuthentication.getBlacklistedSASLMechanisms(); Set<String> blacklistedMechanisms = SASLAuthentication.getBlacklistedSASLMechanisms();
for (String mechanism : saslMechanisms) { for (String mechanism : saslMechanisms) {
if (!SASLAuthentication.isSaslMechanismRegistered(mechanism)) { if (!SASLAuthentication.isSaslMechanismRegistered(mechanism)) {
throw new IllegalArgumentException("SASL " + mechanism + " is not avaiable. Consider registering it with Smack"); throw new IllegalArgumentException("SASL " + mechanism + " is not available. Consider registering it with Smack");
} }
if (blacklistedMechanisms.contains(mechanism)) { if (blacklistedMechanisms.contains(mechanism)) {
throw new IllegalArgumentException("SALS " + mechanism + " is blacklisted."); throw new IllegalArgumentException("SALS " + mechanism + " is blacklisted.");

View file

@ -33,6 +33,6 @@ public interface ConnectionCreationListener {
* *
* @param connection the newly created connection. * @param connection the newly created connection.
*/ */
public void connectionCreated(XMPPConnection connection); void connectionCreated(XMPPConnection connection);
} }

View file

@ -37,7 +37,7 @@ public interface ConnectionListener {
* *
* @param connection the XMPPConnection which successfully connected to its endpoint. * @param connection the XMPPConnection which successfully connected to its endpoint.
*/ */
public void connected(XMPPConnection connection); void connected(XMPPConnection connection);
/** /**
* Notification that the connection has been authenticated. * Notification that the connection has been authenticated.
@ -45,12 +45,12 @@ public interface ConnectionListener {
* @param connection the XMPPConnection which successfully authenticated. * @param connection the XMPPConnection which successfully authenticated.
* @param resumed true if a previous XMPP session's stream was resumed. * @param resumed true if a previous XMPP session's stream was resumed.
*/ */
public void authenticated(XMPPConnection connection, boolean resumed); void authenticated(XMPPConnection connection, boolean resumed);
/** /**
* Notification that the connection was closed normally. * Notification that the connection was closed normally.
*/ */
public void connectionClosed(); void connectionClosed();
/** /**
* Notification that the connection was closed due to an exception. When * Notification that the connection was closed due to an exception. When
@ -59,7 +59,7 @@ public interface ConnectionListener {
* *
* @param e the exception. * @param e the exception.
*/ */
public void connectionClosedOnError(Exception e); void connectionClosedOnError(Exception e);
/** /**
* The connection has reconnected successfully to the server. Connections will * The connection has reconnected successfully to the server. Connections will
@ -68,7 +68,7 @@ public interface ConnectionListener {
*/ */
// TODO: Remove in Smack 4.3 // TODO: Remove in Smack 4.3
@Deprecated @Deprecated
public void reconnectionSuccessful(); void reconnectionSuccessful();
// The next two methods *must* only be invoked by ReconnectionManager // The next two methods *must* only be invoked by ReconnectionManager
@ -83,7 +83,7 @@ public interface ConnectionListener {
*/ */
// TODO: Remove in Smack 4.3 // TODO: Remove in Smack 4.3
@Deprecated @Deprecated
public void reconnectingIn(int seconds); void reconnectingIn(int seconds);
/** /**
* An attempt to connect to the server has failed. The connection will keep trying reconnecting to the server in a * An attempt to connect to the server has failed. The connection will keep trying reconnecting to the server in a
@ -97,5 +97,5 @@ public interface ConnectionListener {
*/ */
// TODO: Remove in Smack 4.3 // TODO: Remove in Smack 4.3
@Deprecated @Deprecated
public void reconnectionFailed(Exception e); void reconnectionFailed(Exception e);
} }

View file

@ -24,6 +24,6 @@ package org.jivesoftware.smack;
@Deprecated @Deprecated
public interface ExceptionCallback { public interface ExceptionCallback {
public void processException(Exception exception); void processException(Exception exception);
} }

View file

@ -28,7 +28,7 @@ public abstract class Manager {
public Manager(XMPPConnection connection) { public Manager(XMPPConnection connection) {
Objects.requireNonNull(connection, "XMPPConnection must not be null"); Objects.requireNonNull(connection, "XMPPConnection must not be null");
weakConnection = new WeakReference<XMPPConnection>(connection); weakConnection = new WeakReference<>(connection);
} }
protected final XMPPConnection connection() { protected final XMPPConnection connection() {

View file

@ -34,7 +34,7 @@ public interface ReconnectionListener {
* *
* @param seconds remaining seconds before attempting a reconnection. * @param seconds remaining seconds before attempting a reconnection.
*/ */
public void reconnectingIn(int seconds); void reconnectingIn(int seconds);
/** /**
* An attempt to connect to the server has failed. The connection will keep trying reconnecting to the server in a * An attempt to connect to the server has failed. The connection will keep trying reconnecting to the server in a
@ -46,5 +46,5 @@ public interface ReconnectionListener {
* *
* @param e the exception that caused the reconnection to fail. * @param e the exception that caused the reconnection to fail.
*/ */
public void reconnectionFailed(Exception e); void reconnectionFailed(Exception e);
} }

View file

@ -189,7 +189,7 @@ public final class ReconnectionManager {
private Thread reconnectionThread; private Thread reconnectionThread;
private ReconnectionManager(AbstractXMPPConnection connection) { private ReconnectionManager(AbstractXMPPConnection connection) {
weakRefConnection = new WeakReference<AbstractXMPPConnection>(connection); weakRefConnection = new WeakReference<>(connection);
reconnectionRunnable = new Runnable() { reconnectionRunnable = new Runnable() {

View file

@ -64,9 +64,9 @@ public final class SASLAuthentication {
private static final Logger LOGGER = Logger.getLogger(SASLAuthentication.class.getName()); private static final Logger LOGGER = Logger.getLogger(SASLAuthentication.class.getName());
private static final List<SASLMechanism> REGISTERED_MECHANISMS = new ArrayList<SASLMechanism>(); private static final List<SASLMechanism> REGISTERED_MECHANISMS = new ArrayList<>();
private static final Set<String> BLACKLISTED_MECHANISMS = new HashSet<String>(); private static final Set<String> BLACKLISTED_MECHANISMS = new HashSet<>();
static { static {
// Blacklist SCRAM-SHA-1-PLUS for now. // Blacklist SCRAM-SHA-1-PLUS for now.
@ -91,7 +91,7 @@ public final class SASLAuthentication {
* @return the registered SASLMechanism sorted by the level of preference. * @return the registered SASLMechanism sorted by the level of preference.
*/ */
public static Map<String, String> getRegisterdSASLMechanisms() { public static Map<String, String> getRegisterdSASLMechanisms() {
Map<String, String> answer = new LinkedHashMap<String, String>(); Map<String, String> answer = new LinkedHashMap<>();
synchronized (REGISTERED_MECHANISMS) { synchronized (REGISTERED_MECHANISMS) {
for (SASLMechanism mechanism : REGISTERED_MECHANISMS) { for (SASLMechanism mechanism : REGISTERED_MECHANISMS) {
answer.put(mechanism.getClass().getName(), mechanism.toString()); answer.put(mechanism.getClass().getName(), mechanism.toString());
@ -132,9 +132,9 @@ public final class SASLAuthentication {
return false; return false;
} }
public static boolean blacklistSASLMechanism(String mechansim) { public static boolean blacklistSASLMechanism(String mechanism) {
synchronized (BLACKLISTED_MECHANISMS) { synchronized (BLACKLISTED_MECHANISMS) {
return BLACKLISTED_MECHANISMS.add(mechansim); return BLACKLISTED_MECHANISMS.add(mechanism);
} }
} }
@ -356,8 +356,8 @@ public final class SASLAuthentication {
throw new SmackException( throw new SmackException(
"No supported and enabled SASL Mechanism provided by server. " + "No supported and enabled SASL Mechanism provided by server. " +
"Server announced mechanisms: " + serverMechanisms + ". " + "Server announced mechanisms: " + serverMechanisms + ". " +
"Registerd SASL mechanisms with Smack: " + REGISTERED_MECHANISMS + ". " + "Registered SASL mechanisms with Smack: " + REGISTERED_MECHANISMS + ". " +
"Enabled SASL mechansisms for this connection: " + configuration.getEnabledSaslMechanisms() + ". " + "Enabled SASL mechanisms for this connection: " + configuration.getEnabledSaslMechanisms() + ". " +
"Blacklisted SASL mechanisms: " + BLACKLISTED_MECHANISMS + '.' "Blacklisted SASL mechanisms: " + BLACKLISTED_MECHANISMS + '.'
); );
// @formatter;on // @formatter;on

View file

@ -52,17 +52,17 @@ public final class SmackConfiguration {
private static int defaultPacketReplyTimeout = 5000; private static int defaultPacketReplyTimeout = 5000;
private static int packetCollectorSize = 5000; private static int packetCollectorSize = 5000;
private static List<String> defaultMechs = new ArrayList<String>(); private static List<String> defaultMechs = new ArrayList<>();
static Set<String> disabledSmackClasses = new HashSet<String>(); static Set<String> disabledSmackClasses = new HashSet<>();
final static List<XMPPInputOutputStream> compressionHandlers = new ArrayList<XMPPInputOutputStream>(2); final static List<XMPPInputOutputStream> compressionHandlers = new ArrayList<>(2);
static boolean smackInitialized = false; static boolean smackInitialized = false;
/** /**
* Value that indicates whether debugging is enabled. When enabled, a debug * Value that indicates whether debugging is enabled. When enabled, a debug
* window will apear for each new connection that will contain the following * window will appear for each new connection that will contain the following
* information:<ul> * information:<ul>
* <li> Client Traffic -- raw XML traffic generated by Smack and sent to the server. * <li> Client Traffic -- raw XML traffic generated by Smack and sent to the server.
* <li> Server Traffic -- raw XML traffic sent by the server to the client. * <li> Server Traffic -- raw XML traffic sent by the server to the client.
@ -248,8 +248,8 @@ public final class SmackConfiguration {
compressionHandlers.add(xmppInputOutputStream); compressionHandlers.add(xmppInputOutputStream);
} }
public static List<XMPPInputOutputStream> getCompresionHandlers() { public static List<XMPPInputOutputStream> getCompressionHandlers() {
List<XMPPInputOutputStream> res = new ArrayList<XMPPInputOutputStream>(compressionHandlers.size()); List<XMPPInputOutputStream> res = new ArrayList<>(compressionHandlers.size());
for (XMPPInputOutputStream ios : compressionHandlers) { for (XMPPInputOutputStream ios : compressionHandlers) {
if (ios.isSupported()) { if (ios.isSupported()) {
res.add(ios); res.add(ios);
@ -261,7 +261,7 @@ public final class SmackConfiguration {
/** /**
* Set the default HostnameVerifier that will be used by XMPP connections to verify the hostname * Set the default HostnameVerifier that will be used by XMPP connections to verify the hostname
* of a TLS certificate. XMPP connections are able to overwrite this settings by supplying a * of a TLS certificate. XMPP connections are able to overwrite this settings by supplying a
* HostnameVerifier in their ConnecitonConfiguration with * HostnameVerifier in their ConnectionConfiguration with
* {@link ConnectionConfiguration.Builder#setHostnameVerifier(HostnameVerifier)}. * {@link ConnectionConfiguration.Builder#setHostnameVerifier(HostnameVerifier)}.
*/ */
public static void setDefaultHostnameVerifier(HostnameVerifier verifier) { public static void setDefaultHostnameVerifier(HostnameVerifier verifier) {

View file

@ -258,7 +258,7 @@ public class SmackException extends Exception {
public ConnectionException(Throwable wrappedThrowable) { public ConnectionException(Throwable wrappedThrowable) {
super(wrappedThrowable); super(wrappedThrowable);
failedAddresses = new ArrayList<HostAddress>(0); failedAddresses = new ArrayList<>(0);
} }
private ConnectionException(String message, List<HostAddress> failedAddresses) { private ConnectionException(String message, List<HostAddress> failedAddresses) {

View file

@ -40,7 +40,6 @@ import org.jivesoftware.smack.util.FileUtils;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlPullParserFactory;
@ -71,7 +70,7 @@ public final class SmackInitialization {
} }
} catch (Exception e) { } catch (Exception e) {
LOGGER.log(Level.SEVERE, "Could not determine Smack version", e); LOGGER.log(Level.SEVERE, "Could not determine Smack version", e);
smackVersion = "unkown"; smackVersion = "unknown";
} }
SMACK_VERSION = smackVersion; SMACK_VERSION = smackVersion;
@ -182,7 +181,7 @@ public final class SmackInitialization {
private static void parseClassesToLoad(XmlPullParser parser, boolean optional, private static void parseClassesToLoad(XmlPullParser parser, boolean optional,
Collection<Exception> exceptions, ClassLoader classLoader) Collection<Exception> exceptions, ClassLoader classLoader)
throws XmlPullParserException, IOException, Exception { throws Exception {
final String startName = parser.getName(); final String startName = parser.getName();
int eventType; int eventType;
String name; String name;

View file

@ -288,7 +288,7 @@ public class StanzaCollector {
} }
} }
private final void throwIfCancelled() { private void throwIfCancelled() {
if (cancelled) { if (cancelled) {
throw new IllegalStateException("Packet collector already cancelled"); throw new IllegalStateException("Packet collector already cancelled");
} }

View file

@ -52,6 +52,6 @@ public interface StanzaListener {
* @throws InterruptedException * @throws InterruptedException
* @throws NotLoggedInException * @throws NotLoggedInException
*/ */
public void processStanza(Stanza packet) throws NotConnectedException, InterruptedException, NotLoggedInException; void processStanza(Stanza packet) throws NotConnectedException, InterruptedException, NotLoggedInException;
} }

View file

@ -27,7 +27,7 @@ public class XMPPConnectionRegistry {
* A set of listeners which will be invoked if a new connection is created. * A set of listeners which will be invoked if a new connection is created.
*/ */
private final static Set<ConnectionCreationListener> connectionEstablishedListeners = private final static Set<ConnectionCreationListener> connectionEstablishedListeners =
new CopyOnWriteArraySet<ConnectionCreationListener>(); new CopyOnWriteArraySet<>();
/** /**
* Adds a new listener that will be notified when new Connections are created. Note * Adds a new listener that will be notified when new Connections are created. Note

View file

@ -30,10 +30,7 @@ public final class EmptyToMatcher implements StanzaFilter {
@Override @Override
public boolean accept(Stanza packet) { public boolean accept(Stanza packet) {
Jid packetTo = packet.getTo(); Jid packetTo = packet.getTo();
if (packetTo == null) { return packetTo == null;
return true;
}
return false;
} }
@Override @Override

View file

@ -54,5 +54,5 @@ public interface StanzaFilter {
* @param stanza the stanza(/packet) to test. * @param stanza the stanza(/packet) to test.
* @return true if and only if <tt>stanza</tt> passes the filter. * @return true if and only if <tt>stanza</tt> passes the filter.
*/ */
public boolean accept(Stanza stanza); boolean accept(Stanza stanza);
} }

View file

@ -30,5 +30,5 @@ import org.jivesoftware.smack.SmackConfiguration;
* *
*/ */
public interface SmackInitializer { public interface SmackInitializer {
public List<Exception> initialize(); List<Exception> initialize();
} }

View file

@ -26,7 +26,7 @@ import org.jivesoftware.smack.packet.IQ;
*/ */
public interface IQRequestHandler { public interface IQRequestHandler {
public enum Mode { enum Mode {
/** /**
* Process requests synchronously, i.e. in the order they arrive. Uses a single thread, which means that the other * Process requests synchronously, i.e. in the order they arrive. Uses a single thread, which means that the other
* requests have to wait until all previous synchronous requests have been handled. Use {@link #async} if * requests have to wait until all previous synchronous requests have been handled. Use {@link #async} if
@ -41,13 +41,13 @@ public interface IQRequestHandler {
async, async,
} }
public IQ handleIQRequest(IQ iqRequest); IQ handleIQRequest(IQ iqRequest);
public Mode getMode(); Mode getMode();
public IQ.Type getType(); IQ.Type getType();
public String getElement(); String getElement();
public String getNamespace(); String getNamespace();
} }

View file

@ -28,5 +28,5 @@ public interface Element {
* *
* @return the stanza(/packet) extension as XML. * @return the stanza(/packet) extension as XML.
*/ */
public CharSequence toXML(); CharSequence toXML();
} }

View file

@ -25,7 +25,7 @@ public class EmptyResultIQ extends IQ {
public EmptyResultIQ(IQ request) { public EmptyResultIQ(IQ request) {
this(); this();
initialzeAsResultFor(request); initializeAsResultFor(request);
} }
@Override @Override

View file

@ -40,6 +40,6 @@ public interface ExtensionElement extends NamedElement {
* *
* @return the namespace. * @return the namespace.
*/ */
public String getNamespace(); String getNamespace();
} }

View file

@ -215,7 +215,7 @@ public abstract class IQ extends Stanza {
*/ */
protected abstract IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml); protected abstract IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml);
protected final void initialzeAsResultFor(IQ request) { protected final void initializeAsResultFor(IQ request) {
if (!(request.getType() == Type.get || request.getType() == Type.set)) { if (!(request.getType() == Type.get || request.getType() == Type.set)) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"IQ must be of type 'set' or 'get'. Original IQ: " + request.toXML()); "IQ must be of type 'set' or 'get'. Original IQ: " + request.toXML());

View file

@ -28,6 +28,6 @@ public interface NamedElement extends Element {
* *
* @return the element name. * @return the element name.
*/ */
public String getElementName(); String getElementName();
} }

View file

@ -28,15 +28,15 @@ import java.util.Set;
@Deprecated @Deprecated
public interface Packet extends TopLevelStreamElement { public interface Packet extends TopLevelStreamElement {
public static final String TEXT = "text"; String TEXT = "text";
public static final String ITEM = "item"; String ITEM = "item";
/** /**
* Returns the unique ID of the stanza. The returned value could be <code>null</code>. * Returns the unique ID of the stanza. The returned value could be <code>null</code>.
* *
* @return the packet's unique ID or <code>null</code> if the id is not available. * @return the packet's unique ID or <code>null</code> if the id is not available.
*/ */
public String getStanzaId(); String getStanzaId();
/** /**
* Get the stanza id. * Get the stanza id.
@ -44,7 +44,7 @@ public interface Packet extends TopLevelStreamElement {
* @deprecated use {@link #getStanzaId()} instead. * @deprecated use {@link #getStanzaId()} instead.
*/ */
@Deprecated @Deprecated
public String getPacketID(); String getPacketID();
/** /**
* Sets the unique ID of the packet. To indicate that a stanza(/packet) has no id * Sets the unique ID of the packet. To indicate that a stanza(/packet) has no id
@ -52,7 +52,7 @@ public interface Packet extends TopLevelStreamElement {
* *
* @param id the unique ID for the packet. * @param id the unique ID for the packet.
*/ */
public void setStanzaId(String id); void setStanzaId(String id);
/** /**
* Set the stanza ID. * Set the stanza ID.
@ -60,7 +60,7 @@ public interface Packet extends TopLevelStreamElement {
* @deprecated use {@link #setStanzaId(String)} instead. * @deprecated use {@link #setStanzaId(String)} instead.
*/ */
@Deprecated @Deprecated
public void setPacketID(String packetID); void setPacketID(String packetID);
/** /**
* Returns who the stanza(/packet) is being sent "to", or <tt>null</tt> if * Returns who the stanza(/packet) is being sent "to", or <tt>null</tt> if
@ -70,7 +70,7 @@ public interface Packet extends TopLevelStreamElement {
* @return who the stanza(/packet) is being sent to, or <tt>null</tt> if the * @return who the stanza(/packet) is being sent to, or <tt>null</tt> if the
* value has not been set. * value has not been set.
*/ */
public String getTo(); String getTo();
/** /**
* Sets who the stanza(/packet) is being sent "to". The XMPP protocol often makes * Sets who the stanza(/packet) is being sent "to". The XMPP protocol often makes
@ -78,7 +78,7 @@ public interface Packet extends TopLevelStreamElement {
* *
* @param to who the stanza(/packet) is being sent to. * @param to who the stanza(/packet) is being sent to.
*/ */
public void setTo(String to); void setTo(String to);
/** /**
* Returns who the stanza(/packet) is being sent "from" or <tt>null</tt> if * Returns who the stanza(/packet) is being sent "from" or <tt>null</tt> if
@ -88,7 +88,7 @@ public interface Packet extends TopLevelStreamElement {
* @return who the stanza(/packet) is being sent from, or <tt>null</tt> if the * @return who the stanza(/packet) is being sent from, or <tt>null</tt> if the
* value has not been set. * value has not been set.
*/ */
public String getFrom(); String getFrom();
/** /**
* Sets who the stanza(/packet) is being sent "from". The XMPP protocol often * Sets who the stanza(/packet) is being sent "from". The XMPP protocol often
@ -97,7 +97,7 @@ public interface Packet extends TopLevelStreamElement {
* *
* @param from who the stanza(/packet) is being sent to. * @param from who the stanza(/packet) is being sent to.
*/ */
public void setFrom(String from); void setFrom(String from);
/** /**
* Returns the error associated with this packet, or <tt>null</tt> if there are * Returns the error associated with this packet, or <tt>null</tt> if there are
@ -105,34 +105,34 @@ public interface Packet extends TopLevelStreamElement {
* *
* @return the error sub-packet or <tt>null</tt> if there isn't an error. * @return the error sub-packet or <tt>null</tt> if there isn't an error.
*/ */
public XMPPError getError(); XMPPError getError();
/** /**
* Sets the error for this packet. * Sets the error for this packet.
* *
* @param error the error to associate with this packet. * @param error the error to associate with this packet.
*/ */
public void setError(XMPPError error); void setError(XMPPError error);
/** /**
* Returns the xml:lang of this Stanza, or null if one has not been set. * Returns the xml:lang of this Stanza, or null if one has not been set.
* *
* @return the xml:lang of this Stanza, or null. * @return the xml:lang of this Stanza, or null.
*/ */
public String getLanguage(); String getLanguage();
/** /**
* Sets the xml:lang of this Stanza. * Sets the xml:lang of this Stanza.
* *
* @param language the xml:lang of this Stanza. * @param language the xml:lang of this Stanza.
*/ */
public void setLanguage(String language); void setLanguage(String language);
/** /**
* Returns a copy of the stanza(/packet) extensions attached to the packet. * Returns a copy of the stanza(/packet) extensions attached to the packet.
* *
* @return the stanza(/packet) extensions. * @return the stanza(/packet) extensions.
*/ */
public List<ExtensionElement> getExtensions(); List<ExtensionElement> getExtensions();
/** /**
* Return a set of all extensions with the given element name <emph>and</emph> namespace. * Return a set of all extensions with the given element name <emph>and</emph> namespace.
@ -145,7 +145,7 @@ public interface Packet extends TopLevelStreamElement {
* @return a set of all matching extensions. * @return a set of all matching extensions.
* @since 4.1 * @since 4.1
*/ */
public Set<ExtensionElement> getExtensions(String elementName, String namespace); Set<ExtensionElement> getExtensions(String elementName, String namespace);
/** /**
* Returns the first extension of this stanza(/packet) that has the given namespace. * Returns the first extension of this stanza(/packet) that has the given namespace.
@ -156,7 +156,7 @@ public interface Packet extends TopLevelStreamElement {
* @param namespace the namespace of the extension that is desired. * @param namespace the namespace of the extension that is desired.
* @return the stanza(/packet) extension with the given namespace. * @return the stanza(/packet) extension with the given namespace.
*/ */
public ExtensionElement getExtension(String namespace); ExtensionElement getExtension(String namespace);
/** /**
* Returns the first stanza(/packet) extension that matches the specified element name and * Returns the first stanza(/packet) extension that matches the specified element name and
@ -173,20 +173,20 @@ public interface Packet extends TopLevelStreamElement {
* @param namespace the XML element namespace of the stanza(/packet) extension. * @param namespace the XML element namespace of the stanza(/packet) extension.
* @return the extension, or <tt>null</tt> if it doesn't exist. * @return the extension, or <tt>null</tt> if it doesn't exist.
*/ */
public <PE extends ExtensionElement> PE getExtension(String elementName, String namespace); <PE extends ExtensionElement> PE getExtension(String elementName, String namespace);
/** /**
* Adds a stanza(/packet) extension to the packet. Does nothing if extension is null. * Adds a stanza(/packet) extension to the packet. Does nothing if extension is null.
* *
* @param extension a stanza(/packet) extension. * @param extension a stanza(/packet) extension.
*/ */
public void addExtension(ExtensionElement extension); void addExtension(ExtensionElement extension);
/** /**
* Adds a collection of stanza(/packet) extensions to the packet. Does nothing if extensions is null. * Adds a collection of stanza(/packet) extensions to the packet. Does nothing if extensions is null.
* *
* @param extensions a collection of stanza(/packet) extensions * @param extensions a collection of stanza(/packet) extensions
*/ */
public void addExtensions(Collection<ExtensionElement> extensions); void addExtensions(Collection<ExtensionElement> extensions);
/** /**
* Check if a stanza(/packet) extension with the given element and namespace exists. * Check if a stanza(/packet) extension with the given element and namespace exists.
@ -198,7 +198,7 @@ public interface Packet extends TopLevelStreamElement {
* @param namespace * @param namespace
* @return true if a stanza(/packet) extension exists, false otherwise. * @return true if a stanza(/packet) extension exists, false otherwise.
*/ */
public boolean hasExtension(String elementName, String namespace); boolean hasExtension(String elementName, String namespace);
/** /**
* Check if a stanza(/packet) extension with the given namespace exists. * Check if a stanza(/packet) extension with the given namespace exists.
@ -206,7 +206,7 @@ public interface Packet extends TopLevelStreamElement {
* @param namespace * @param namespace
* @return true if a stanza(/packet) extension exists, false otherwise. * @return true if a stanza(/packet) extension exists, false otherwise.
*/ */
public boolean hasExtension(String namespace); boolean hasExtension(String namespace);
/** /**
* Remove the stanza(/packet) extension with the given elementName and namespace. * Remove the stanza(/packet) extension with the given elementName and namespace.
@ -215,7 +215,7 @@ public interface Packet extends TopLevelStreamElement {
* @param namespace * @param namespace
* @return the removed stanza(/packet) extension or null. * @return the removed stanza(/packet) extension or null.
*/ */
public ExtensionElement removeExtension(String elementName, String namespace); ExtensionElement removeExtension(String elementName, String namespace);
/** /**
* Removes a stanza(/packet) extension from the packet. * Removes a stanza(/packet) extension from the packet.
@ -223,10 +223,10 @@ public interface Packet extends TopLevelStreamElement {
* @param extension the stanza(/packet) extension to remove. * @param extension the stanza(/packet) extension to remove.
* @return the removed stanza(/packet) extension or null. * @return the removed stanza(/packet) extension or null.
*/ */
public ExtensionElement removeExtension(ExtensionElement extension); ExtensionElement removeExtension(ExtensionElement extension);
@Override @Override
// NOTE When Smack is using Java 8, then this method should be moved in Element as "Default Method". // NOTE When Smack is using Java 8, then this method should be moved in Element as "Default Method".
public String toString(); String toString();
} }

View file

@ -25,7 +25,7 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
/** /**
* Represents a stream error packet. Stream errors are unrecoverable errors where the server * Represents a stream error packet. Stream errors are unrecoverable errors where the server
* will close the unrelying TCP connection after the stream error was sent to the client. * will close the underlying TCP connection after the stream error was sent to the client.
* These is the list of stream errors as defined in the XMPP spec:<p> * These is the list of stream errors as defined in the XMPP spec:<p>
* *
* <table border=1> * <table border=1>
@ -174,7 +174,7 @@ public class StreamError extends AbstractError implements Nonza {
restricted_xml, restricted_xml,
see_other_host, see_other_host,
system_shutdown, system_shutdown,
undeficed_condition, undefined_condition,
unsupported_encoding, unsupported_encoding,
unsupported_feature, unsupported_feature,
unsupported_stanza_type, unsupported_stanza_type,

View file

@ -39,6 +39,6 @@ public interface ParsingExceptionCallback {
* @param stanzaData the raw stanza data that caused the exception * @param stanzaData the raw stanza data that caused the exception
* @throws Exception * @throws Exception
*/ */
public void handleUnparsableStanza(UnparseableStanza stanzaData) throws Exception; void handleUnparsableStanza(UnparseableStanza stanzaData) throws Exception;
} }

View file

@ -45,7 +45,7 @@ import org.jxmpp.util.XmppStringUtils;
* <li>jabber:iq:register</ul> * <li>jabber:iq:register</ul>
* *
* Because many more IQ types are part of XMPP and its extensions, a pluggable IQ parsing * Because many more IQ types are part of XMPP and its extensions, a pluggable IQ parsing
* mechanism is provided. IQ providers are registered programatically or by creating a * mechanism is provided. IQ providers are registered programmatically or by creating a
* providers file. The file is an XML * providers file. The file is an XML
* document that contains one or more iqProvider entries, as in the following example: * document that contains one or more iqProvider entries, as in the following example:
* *
@ -100,7 +100,7 @@ import org.jxmpp.util.XmppStringUtils;
* is found in a packet, parsing will be passed to the correct provider. Each provider * is found in a packet, parsing will be passed to the correct provider. Each provider
* can either implement the PacketExtensionProvider interface or be a standard Java Bean. In * can either implement the PacketExtensionProvider interface or be a standard Java Bean. In
* the former case, each extension provider is responsible for parsing the raw XML stream to * the former case, each extension provider is responsible for parsing the raw XML stream to
* contruct an object. In the latter case, bean introspection is used to try to automatically * construct an object. In the latter case, bean introspection is used to try to automatically
* set the properties of th class using the values in the stanza(/packet) extension sub-element. When an * set the properties of th class using the values in the stanza(/packet) extension sub-element. When an
* extension provider is not registered for an element name and namespace combination, Smack will * extension provider is not registered for an element name and namespace combination, Smack will
* store all top-level elements of the sub-packet in DefaultPacketExtension object and then * store all top-level elements of the sub-packet in DefaultPacketExtension object and then
@ -207,7 +207,7 @@ public final class ProviderManager {
/** /**
* Removes an IQ provider with the specified element name and namespace. This * Removes an IQ provider with the specified element name and namespace. This
* method is typically called to cleanup providers that are programatically added * method is typically called to cleanup providers that are programmatically added
* using the {@link #addIQProvider(String, String, Object) addIQProvider} method. * using the {@link #addIQProvider(String, String, Object) addIQProvider} method.
* *
* @param elementName the XML element name. * @param elementName the XML element name.
@ -237,7 +237,7 @@ public final class ProviderManager {
* *
* @param elementName element name associated with extension provider. * @param elementName element name associated with extension provider.
* @param namespace namespace associated with extension provider. * @param namespace namespace associated with extension provider.
* @return the extenion provider. * @return the extension provider.
*/ */
public static ExtensionElementProvider<ExtensionElement> getExtensionProvider(String elementName, String namespace) { public static ExtensionElementProvider<ExtensionElement> getExtensionProvider(String elementName, String namespace) {
String key = getKey(elementName, namespace); String key = getKey(elementName, namespace);
@ -269,7 +269,7 @@ public final class ProviderManager {
/** /**
* Removes an extension provider with the specified element name and namespace. This * Removes an extension provider with the specified element name and namespace. This
* method is typically called to cleanup providers that are programatically added * method is typically called to cleanup providers that are programmatically added
* using the {@link #addExtensionProvider(String, String, Object) addExtensionProvider} method. * using the {@link #addExtensionProvider(String, String, Object) addExtensionProvider} method.
* *
* @param elementName the XML element name. * @param elementName the XML element name.

View file

@ -78,7 +78,7 @@ class HTTPProxySocketConnection implements ProxySocketConnection {
got.append(c); got.append(c);
if (got.length() > 1024) if (got.length() > 1024)
{ {
throw new ProxyException(ProxyInfo.ProxyType.HTTP, "Recieved " + throw new ProxyException(ProxyInfo.ProxyType.HTTP, "Received " +
"header of >1024 characters from " "header of >1024 characters from "
+ proxyhost + ", cancelling connection"); + proxyhost + ", cancelling connection");
} }

View file

@ -25,7 +25,7 @@ package org.jivesoftware.smack.proxy;
public class ProxyInfo public class ProxyInfo
{ {
public static enum ProxyType public enum ProxyType
{ {
HTTP, HTTP,
SOCKS4, SOCKS4,

View file

@ -21,7 +21,7 @@ import java.net.Socket;
public interface ProxySocketConnection { public interface ProxySocketConnection {
public void connect(Socket socket, String host, int port, int timeout) void connect(Socket socket, String host, int port, int timeout)
throws IOException; throws IOException;
} }

View file

@ -117,7 +117,7 @@ public class Socks4ProxySocketConnection implements ProxySocketConnection {
90: request granted 90: request granted
91: request rejected or failed 91: request rejected or failed
92: request rejected becasue SOCKS server cannot connect to 92: request rejected because SOCKS server cannot connect to
identd on the client identd on the client
93: request rejected because the client program and identd 93: request rejected because the client program and identd
report different user-ids report different user-ids

View file

@ -246,7 +246,7 @@ public abstract class ScramMechanism extends SASLMechanism {
return gs2Header; return gs2Header;
} }
return ByteUtils.concact(gs2Header, cbindData); return ByteUtils.concat(gs2Header, cbindData);
} }
protected String getChannelBindingName() { protected String getChannelBindingName() {
@ -394,7 +394,7 @@ public abstract class ScramMechanism extends SASLMechanism {
throw new AssertionError(); throw new AssertionError();
} }
// U1 := HMAC(str, salt + INT(1)) // U1 := HMAC(str, salt + INT(1))
byte[] u = hmac(key, ByteUtils.concact(salt, ONE)); byte[] u = hmac(key, ByteUtils.concat(salt, ONE));
byte[] res = u.clone(); byte[] res = u.clone();
for (int i = 1; i < iterations; i++) { for (int i = 1; i < iterations; i++) {
u = hmac(key, u); u = hmac(key, u);

View file

@ -73,7 +73,7 @@ public class Async {
if (e instanceof RuntimeException) { if (e instanceof RuntimeException) {
throw (RuntimeException) e; throw (RuntimeException) e;
} }
LOGGER.log(Level.WARNING, "Catched Exception", e); LOGGER.log(Level.WARNING, "Caught Exception", e);
} }
} }

View file

@ -17,7 +17,7 @@
package org.jivesoftware.smack.util; package org.jivesoftware.smack.util;
public class ByteUtils { public class ByteUtils {
public static byte[] concact(byte[] arrayOne, byte[] arrayTwo) { public static byte[] concat(byte[] arrayOne, byte[] arrayTwo) {
int combinedLength = arrayOne.length + arrayTwo.length; int combinedLength = arrayOne.length + arrayTwo.length;
byte[] res = new byte[combinedLength]; byte[] res = new byte[combinedLength];
System.arraycopy(arrayOne, 0, res, 0, arrayOne.length); System.arraycopy(arrayOne, 0, res, 0, arrayOne.length);

View file

@ -29,7 +29,9 @@ public class IpAddressUtil {
return false; return false;
} }
for (int i = 0; i < 3; i++) { assert matcher.groupCount() == 4;
for (int i = 1; i <= 4; i++) {
String ipSegment = matcher.group(i); String ipSegment = matcher.group(i);
int ipSegmentInt; int ipSegmentInt;
try { try {

View file

@ -35,7 +35,7 @@ public class LazyStringBuilder implements Appendable, CharSequence {
} }
public LazyStringBuilder() { public LazyStringBuilder() {
list = new ArrayList<CharSequence>(20); list = new ArrayList<>(20);
} }
public LazyStringBuilder append(LazyStringBuilder lsb) { public LazyStringBuilder append(LazyStringBuilder lsb) {

View file

@ -90,19 +90,17 @@ public class ObservableWriter extends Writer {
/** /**
* Notify that a new string has been written. * Notify that a new string has been written.
*
* @param str the written String to notify
*/ */
private void notifyListeners() { private void notifyListeners() {
WriterListener[] writerListeners = null; WriterListener[] writerListeners;
synchronized (listeners) { synchronized (listeners) {
writerListeners = new WriterListener[listeners.size()]; writerListeners = new WriterListener[listeners.size()];
listeners.toArray(writerListeners); listeners.toArray(writerListeners);
} }
String str = stringBuilder.toString(); String str = stringBuilder.toString();
stringBuilder.setLength(0); stringBuilder.setLength(0);
for (int i = 0; i < writerListeners.length; i++) { for (WriterListener writerListener : writerListeners) {
writerListeners[i].write(str); writerListener.write(str);
} }
} }

View file

@ -229,7 +229,7 @@ public class PacketParserUtils {
String language = getLanguageAttribute(parser); String language = getLanguageAttribute(parser);
// determine message's default language // determine message's default language
String defaultLanguage = null; String defaultLanguage;
if (language != null && !"".equals(language.trim())) { if (language != null && !"".equals(language.trim())) {
message.setLanguage(language); message.setLanguage(language);
defaultLanguage = language; defaultLanguage = language;
@ -746,7 +746,7 @@ public class PacketParserUtils {
public static Map<String, String> parseDescriptiveTexts(XmlPullParser parser, Map<String, String> descriptiveTexts) public static Map<String, String> parseDescriptiveTexts(XmlPullParser parser, Map<String, String> descriptiveTexts)
throws XmlPullParserException, IOException { throws XmlPullParserException, IOException {
if (descriptiveTexts == null) { if (descriptiveTexts == null) {
descriptiveTexts = new HashMap<String, String>(); descriptiveTexts = new HashMap<>();
} }
String xmllang = getLanguageAttribute(parser); String xmllang = getLanguageAttribute(parser);
if (xmllang == null) { if (xmllang == null) {
@ -805,7 +805,7 @@ public class PacketParserUtils {
*/ */
public static StreamError parseStreamError(XmlPullParser parser) throws Exception { public static StreamError parseStreamError(XmlPullParser parser) throws Exception {
final int initialDepth = parser.getDepth(); final int initialDepth = parser.getDepth();
List<ExtensionElement> extensions = new ArrayList<ExtensionElement>(); List<ExtensionElement> extensions = new ArrayList<>();
Map<String, String> descriptiveTexts = null; Map<String, String> descriptiveTexts = null;
StreamError.Condition condition = null; StreamError.Condition condition = null;
String conditionText = null; String conditionText = null;
@ -857,7 +857,7 @@ public class PacketParserUtils {
throws Exception { throws Exception {
final int initialDepth = parser.getDepth(); final int initialDepth = parser.getDepth();
Map<String, String> descriptiveTexts = null; Map<String, String> descriptiveTexts = null;
List<ExtensionElement> extensions = new ArrayList<ExtensionElement>(); List<ExtensionElement> extensions = new ArrayList<>();
XMPPError.Builder builder = XMPPError.getBuilder(); XMPPError.Builder builder = XMPPError.getBuilder();
// Parse the error header // Parse the error header

View file

@ -32,7 +32,7 @@ public class PacketUtil {
* @deprecated use {@link #extensionElementFrom(Collection, String, String)} instead * @deprecated use {@link #extensionElementFrom(Collection, String, String)} instead
*/ */
@Deprecated @Deprecated
public static <PE extends ExtensionElement> PE packetExtensionfromCollection( public static <PE extends ExtensionElement> PE packetExtensionFromCollection(
Collection<ExtensionElement> collection, String element, Collection<ExtensionElement> collection, String element,
String namespace) { String namespace) {
return extensionElementFrom(collection, element, namespace); return extensionElementFrom(collection, element, namespace);

View file

@ -138,11 +138,7 @@ public class ParserUtils {
if (valueString == null) if (valueString == null)
return null; return null;
valueString = valueString.toLowerCase(Locale.US); valueString = valueString.toLowerCase(Locale.US);
if (valueString.equals("true") || valueString.equals("0")) { return valueString.equals("true") || valueString.equals("0");
return true;
} else {
return false;
}
} }
public static boolean getBooleanAttribute(XmlPullParser parser, String name, public static boolean getBooleanAttribute(XmlPullParser parser, String name,
@ -232,8 +228,7 @@ public class ParserUtils {
public static URI getUriFromNextText(XmlPullParser parser) throws XmlPullParserException, IOException, URISyntaxException { public static URI getUriFromNextText(XmlPullParser parser) throws XmlPullParserException, IOException, URISyntaxException {
String uriString = parser.nextText(); String uriString = parser.nextText();
URI uri = new URI(uriString); return new URI(uriString);
return uri;
} }
public static String getRequiredAttribute(XmlPullParser parser, String name) throws IOException { public static String getRequiredAttribute(XmlPullParser parser, String name) throws IOException {
@ -253,7 +248,6 @@ public class ParserUtils {
} }
public static String getXmlLang(XmlPullParser parser) { public static String getXmlLang(XmlPullParser parser) {
String langString = parser.getAttributeValue("http://www.w3.org/XML/1998/namespace", "lang"); return parser.getAttributeValue("http://www.w3.org/XML/1998/namespace", "lang");
return langString;
} }
} }

View file

@ -33,6 +33,6 @@ public interface ReaderListener {
* *
* @param str the read String * @param str the read String
*/ */
public abstract void read(String str); void read(String str);
} }

View file

@ -18,6 +18,6 @@ package org.jivesoftware.smack.util;
public interface StringTransformer { public interface StringTransformer {
public String transform(String string); String transform(String string);
} }

View file

@ -431,10 +431,10 @@ public class StringUtils {
} }
public static boolean nullSafeCharSequenceEquals(CharSequence csOne, CharSequence csTwo) { public static boolean nullSafeCharSequenceEquals(CharSequence csOne, CharSequence csTwo) {
return nullSafeCharSequenceComperator(csOne, csTwo) == 0; return nullSafeCharSequenceComparator(csOne, csTwo) == 0;
} }
public static int nullSafeCharSequenceComperator(CharSequence csOne, CharSequence csTwo) { public static int nullSafeCharSequenceComparator(CharSequence csOne, CharSequence csTwo) {
if (csOne == null ^ csTwo == null) { if (csOne == null ^ csTwo == null) {
return (csOne == null) ? -1 : 1; return (csOne == null) ? -1 : 1;
} }

View file

@ -18,6 +18,6 @@ package org.jivesoftware.smack.util;
public interface SuccessCallback<T> { public interface SuccessCallback<T> {
public void onSuccess(T result); void onSuccess(T result);
} }

View file

@ -55,7 +55,7 @@ public class TLSUtils {
* According to the <a * According to the <a
* href="https://raw.githubusercontent.com/stpeter/manifesto/master/manifesto.txt">Encrypted * href="https://raw.githubusercontent.com/stpeter/manifesto/master/manifesto.txt">Encrypted
* XMPP Manifesto</a>, TLSv1.2 shall be deployed, providing fallback support for SSLv3 and * XMPP Manifesto</a>, TLSv1.2 shall be deployed, providing fallback support for SSLv3 and
* TLSv1.1. This method goes one step boyond and upgrades the handshake to use TLSv1 or better. * TLSv1.1. This method goes one step beyond and upgrades the handshake to use TLSv1 or better.
* This method requires the underlying OS to support all of TLSv1.2 , 1.1 and 1.0. * This method requires the underlying OS to support all of TLSv1.2 , 1.1 and 1.0.
* </p> * </p>
* *

View file

@ -29,6 +29,6 @@ public interface TypedCloneable<T> extends Cloneable {
* *
* @return a cloned version of this instance. * @return a cloned version of this instance.
*/ */
public T clone(); T clone();
} }

View file

@ -33,6 +33,6 @@ public interface WriterListener {
* *
* @param str the written string * @param str the written string
*/ */
public abstract void write(String str); void write(String str);
} }

View file

@ -81,7 +81,7 @@ public class XmlStringBuilder implements Appendable, CharSequence {
/** /**
* Add a new element to this builder, with the {@link java.util.Date} instance as its content, * Add a new element to this builder, with the {@link java.util.Date} instance as its content,
* which will get formated with {@link XmppDateTime#formatXEP0082Date(Date)}. * which will get formatted with {@link XmppDateTime#formatXEP0082Date(Date)}.
* *
* @param name element name * @param name element name
* @param content content of element * @param content content of element
@ -123,7 +123,7 @@ public class XmlStringBuilder implements Appendable, CharSequence {
/** /**
* Add a new element to this builder, with the {@link java.util.Date} instance as its content, * Add a new element to this builder, with the {@link java.util.Date} instance as its content,
* which will get formated with {@link XmppDateTime#formatXEP0082Date(Date)} * which will get formatted with {@link XmppDateTime#formatXEP0082Date(Date)}
* if {@link java.util.Date} instance is not <code>null</code>. * if {@link java.util.Date} instance is not <code>null</code>.
* *
* @param name element name * @param name element name
@ -245,7 +245,7 @@ public class XmlStringBuilder implements Appendable, CharSequence {
/** /**
* Add a new attribute to this builder, with the {@link java.util.Date} instance as its value, * Add a new attribute to this builder, with the {@link java.util.Date} instance as its value,
* which will get formated with {@link XmppDateTime#formatXEP0082Date(Date)}. * which will get formatted with {@link XmppDateTime#formatXEP0082Date(Date)}.
* *
* @param name name of attribute * @param name name of attribute
* @param value value of attribute * @param value value of attribute
@ -280,7 +280,7 @@ public class XmlStringBuilder implements Appendable, CharSequence {
/** /**
* Add a new attribute to this builder, with the {@link java.util.Date} instance as its value, * Add a new attribute to this builder, with the {@link java.util.Date} instance as its value,
* which will get formated with {@link XmppDateTime#formatXEP0082Date(Date)} * which will get formatted with {@link XmppDateTime#formatXEP0082Date(Date)}
* if {@link java.util.Date} instance is not <code>null</code>. * if {@link java.util.Date} instance is not <code>null</code>.
* *
* @param name attribute name * @param name attribute name

View file

@ -20,6 +20,7 @@ import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.jivesoftware.smack.ConnectionConfiguration.DnssecMode; import org.jivesoftware.smack.ConnectionConfiguration.DnssecMode;
@ -91,6 +92,22 @@ public abstract class DNSResolver {
return Arrays.asList(inetAddressArray); return Arrays.asList(inetAddressArray);
} }
protected final boolean shouldContinue(CharSequence name, CharSequence hostname, List<InetAddress> hostAddresses) {
if (hostAddresses == null) {
return true;
}
// If hostAddresses is not null but empty, then the DNS resolution was successful but the domain did not
// have any A or AAAA resource records.
if (hostAddresses.isEmpty()) {
LOGGER.log(Level.INFO, "The DNS name " + name + ", points to a hostname (" + hostname
+ ") which has neither A or AAAA resource records. This is an indication of a broken DNS setup.");
return true;
}
return false;
}
private final void checkIfDnssecRequestedAndSupported(DnssecMode dnssecMode) { private final void checkIfDnssecRequestedAndSupported(DnssecMode dnssecMode) {
if (dnssecMode != DnssecMode.disabled && !supportsDnssec) { if (dnssecMode != DnssecMode.disabled && !supportsDnssec) {
throw new UnsupportedOperationException("This resolver does not support DNSSEC"); throw new UnsupportedOperationException("This resolver does not support DNSSEC");

View file

@ -43,7 +43,7 @@ public class HostAddress {
public HostAddress(String fqdn, int port, List<InetAddress> inetAddresses) { public HostAddress(String fqdn, int port, List<InetAddress> inetAddresses) {
if (port < 0 || port > 65535) if (port < 0 || port > 65535)
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Port must be a 16-bit unsiged integer (i.e. between 0-65535. Port was: " + port); "Port must be a 16-bit unsigned integer (i.e. between 0-65535. Port was: " + port);
if (StringUtils.isNotEmpty(fqdn) && fqdn.charAt(fqdn.length() - 1) == '.') { if (StringUtils.isNotEmpty(fqdn) && fqdn.charAt(fqdn.length() - 1) == '.') {
this.fqdn = fqdn.substring(0, fqdn.length() - 1); this.fqdn = fqdn.substring(0, fqdn.length() - 1);
} }

View file

@ -48,12 +48,12 @@ public class SRVRecord extends HostAddress implements Comparable<SRVRecord> {
StringUtils.requireNotNullOrEmpty(fqdn, "The FQDN must not be null"); StringUtils.requireNotNullOrEmpty(fqdn, "The FQDN must not be null");
if (weight < 0 || weight > 65535) if (weight < 0 || weight > 65535)
throw new IllegalArgumentException( throw new IllegalArgumentException(
"DNS SRV records weight must be a 16-bit unsiged integer (i.e. between 0-65535. Weight was: " "DNS SRV records weight must be a 16-bit unsigned integer (i.e. between 0-65535. Weight was: "
+ weight); + weight);
if (priority < 0 || priority > 65535) if (priority < 0 || priority > 65535)
throw new IllegalArgumentException( throw new IllegalArgumentException(
"DNS SRV records priority must be a 16-bit unsiged integer (i.e. between 0-65535. Priority was: " "DNS SRV records priority must be a 16-bit unsigned integer (i.e. between 0-65535. Priority was: "
+ priority); + priority);
this.priority = priority; this.priority = priority;

View file

@ -105,7 +105,7 @@ public class StanzaCollectorTest
@Override @Override
public void run() public void run()
{ {
Stanza p = null; Stanza p;
do do
{ {
@ -134,7 +134,7 @@ public class StanzaCollectorTest
@Override @Override
public void run() public void run()
{ {
Stanza p = null; Stanza p;
do do
{ {

View file

@ -37,8 +37,8 @@ import org.jivesoftware.smack.packet.Stanza;
public class ThreadedDummyConnection extends DummyConnection { public class ThreadedDummyConnection extends DummyConnection {
private static final Logger LOGGER = Logger.getLogger(ThreadedDummyConnection.class.getName()); private static final Logger LOGGER = Logger.getLogger(ThreadedDummyConnection.class.getName());
private BlockingQueue<IQ> replyQ = new ArrayBlockingQueue<IQ>(1); private final BlockingQueue<IQ> replyQ = new ArrayBlockingQueue<>(1);
private BlockingQueue<Stanza> messageQ = new LinkedBlockingQueue<Stanza>(5); private final BlockingQueue<Stanza> messageQ = new LinkedBlockingQueue<>(5);
private volatile boolean timeout = false; private volatile boolean timeout = false;
@Override @Override

View file

@ -142,7 +142,7 @@ public class MessageTest {
XmlUnitUtils.assertSimilar(control, message.toXML()); XmlUnitUtils.assertSimilar(control, message.toXML());
Collection<String> languages = message.getBodyLanguages(); Collection<String> languages = message.getBodyLanguages();
List<String> controlLanguages = new ArrayList<String>(); List<String> controlLanguages = new ArrayList<>();
controlLanguages.add(lang2); controlLanguages.add(lang2);
controlLanguages.add(lang3); controlLanguages.add(lang3);
controlLanguages.removeAll(languages); controlLanguages.removeAll(languages);

View file

@ -16,7 +16,7 @@
*/ */
package org.jivesoftware.smack.parsing; package org.jivesoftware.smack.parsing;
import static org.jivesoftware.smack.test.util.CharsequenceEquals.equalsCharSequence; import static org.jivesoftware.smack.test.util.CharSequenceEquals.equalsCharSequence;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.SmackException;

View file

@ -24,7 +24,6 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
import org.jxmpp.jid.EntityBareJid; import org.jxmpp.jid.EntityBareJid;
@ -40,7 +39,7 @@ public class DigestMd5SaslTest extends AbstractSaslTest {
super(saslMechanism); super(saslMechanism);
} }
protected void runTest(boolean useAuthzid) throws NotConnectedException, SmackException, InterruptedException, XmppStringprepException, UnsupportedEncodingException { protected void runTest(boolean useAuthzid) throws SmackException, InterruptedException, XmppStringprepException, UnsupportedEncodingException {
EntityBareJid authzid = null; EntityBareJid authzid = null;
if (useAuthzid) { if (useAuthzid) {
authzid = JidCreate.entityBareFrom("shazbat@xmpp.org"); authzid = JidCreate.entityBareFrom("shazbat@xmpp.org");

View file

@ -0,0 +1,47 @@
/**
*
* 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.smack.test.util;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
public class CharSequenceEquals extends TypeSafeMatcher<CharSequence> {
private final String charSequenceString;
public CharSequenceEquals(CharSequence charSequence) {
charSequenceString = charSequence.toString();
}
@Override
public void describeTo(Description description) {
description.appendText("Does not match CharSequence ").appendValue(charSequenceString);
}
@Override
protected boolean matchesSafely(CharSequence item) {
String itemString = item.toString();
return charSequenceString.equals(itemString);
}
@Factory
public static Matcher<CharSequence> equalsCharSequence(CharSequence charSequence) {
return new CharSequenceEquals(charSequence);
}
}

View file

@ -0,0 +1,46 @@
/**
*
* Copyright 2017 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.smack.util;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class IpAddressUtilTest {
@Test
public void isIpV4AddressTest() {
String ipv4 = "122.20.221.11";
boolean isIpV4 = IpAddressUtil.isIPv4LiteralAddress(ipv4);
assertTrue(isIpV4);
}
@Test
public void isInvalidIpV4AddressTest() {
String ipv4 = "122.20.221.11.1";
boolean isIpV4 = IpAddressUtil.isIPv4LiteralAddress(ipv4);
assertFalse(isIpV4);
}
@Test
public void isInvalidIpV4AddressTest2() {
String ipv4 = "122.20.256.11";
boolean isIpV4 = IpAddressUtil.isIPv4LiteralAddress(ipv4);
assertFalse(isIpV4);
}
}

View file

@ -809,7 +809,7 @@ public class PacketParserUtilsTest {
IOException, TransformerException, SAXException { IOException, TransformerException, SAXException {
// @formatter:off // @formatter:off
final String stanza = XMLBuilder.create("outer", "outerNamespace").a("outerAttribute", "outerValue") final String stanza = XMLBuilder.create("outer", "outerNamespace").a("outerAttribute", "outerValue")
.element("inner", "innerNamespace").a("innverAttribute", "innerValue") .element("inner", "innerNamespace").a("innerAttribute", "innerValue")
.element("innermost") .element("innermost")
.t("some text") .t("some text")
.asString(); .asString();

View file

@ -240,7 +240,7 @@ public final class EnhancedDebuggerWindow {
JPanel iqProvidersPanel = new JPanel(); JPanel iqProvidersPanel = new JPanel();
iqProvidersPanel.setLayout(new GridLayout(1, 1)); iqProvidersPanel.setLayout(new GridLayout(1, 1));
iqProvidersPanel.setBorder(BorderFactory.createTitledBorder("Installed IQ Providers")); iqProvidersPanel.setBorder(BorderFactory.createTitledBorder("Installed IQ Providers"));
Vector<String> providers = new Vector<String>(); Vector<String> providers = new Vector<>();
for (Object provider : ProviderManager.getIQProviders()) { for (Object provider : ProviderManager.getIQProviders()) {
if (provider.getClass() == Class.class) { if (provider.getClass() == Class.class) {
providers.add(((Class<?>) provider).getName()); providers.add(((Class<?>) provider).getName());
@ -259,7 +259,7 @@ public final class EnhancedDebuggerWindow {
JPanel extensionProvidersPanel = new JPanel(); JPanel extensionProvidersPanel = new JPanel();
extensionProvidersPanel.setLayout(new GridLayout(1, 1)); extensionProvidersPanel.setLayout(new GridLayout(1, 1));
extensionProvidersPanel.setBorder(BorderFactory.createTitledBorder("Installed Extension Providers")); extensionProvidersPanel.setBorder(BorderFactory.createTitledBorder("Installed Extension Providers"));
providers = new Vector<String>(); providers = new Vector<>();
for (Object provider : ProviderManager.getExtensionProviders()) { for (Object provider : ProviderManager.getExtensionProviders()) {
if (provider.getClass() == Class.class) { if (provider.getClass() == Class.class) {
providers.add(((Class<?>) provider).getName()); providers.add(((Class<?>) provider).getName());
@ -305,7 +305,7 @@ public final class EnhancedDebuggerWindow {
menuItem.addActionListener(new ActionListener() { menuItem.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
ArrayList<EnhancedDebugger> debuggersToRemove = new ArrayList<EnhancedDebugger>(); ArrayList<EnhancedDebugger> debuggersToRemove = new ArrayList<>();
// Remove all the debuggers of which their connections are no longer valid // Remove all the debuggers of which their connections are no longer valid
for (int index = 0; index < tabbedPane.getComponentCount() - 1; index++) { for (int index = 0; index < tabbedPane.getComponentCount() - 1; index++) {
EnhancedDebugger debugger = debuggers.get(index); EnhancedDebugger debugger = debuggers.get(index);

View file

@ -123,7 +123,7 @@ public class CarbonExtension implements ExtensionElement {
/** /**
* Defines the direction of a {@link CarbonExtension} message. * Defines the direction of a {@link CarbonExtension} message.
*/ */
public static enum Direction { public enum Direction {
received, received,
sent sent
} }

View file

@ -48,7 +48,7 @@ public class ExplicitMessageEncryptionElement implements ExtensionElement {
private final String namespace; private final String namespace;
private final String name; private final String name;
private ExplicitMessageEncryptionProtocol(String namespace, String name) { ExplicitMessageEncryptionProtocol(String namespace, String name) {
this.namespace = namespace; this.namespace = namespace;
this.name = name; this.name = name;
PROTOCOL_LUT.put(namespace, this); PROTOCOL_LUT.put(namespace, this);

View file

@ -90,7 +90,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
/** /**
* A builder for XMPP connection configurations. * A builder for XMPP connection configurations.
* <p> * <p>
* See ConnectionConfiguration Buidler for more details. * See ConnectionConfiguration Builder for more details.
* </p> * </p>
* *
* @param <B> the builder type parameter. * @param <B> the builder type parameter.

View file

@ -64,7 +64,18 @@ import org.jxmpp.jid.DomainBareJid;
*/ */
public final class HttpFileUploadManager extends Manager { public final class HttpFileUploadManager extends Manager {
/**
* Namespace of XEP-0363 v0.4 or higher. Constant value {@value #NAMESPACE}.
*
* @see <a href="https://xmpp.org/extensions/attic/xep-0363-0.4.0.html">XEP-0363 v0.4.0</a>
*/
public static final String NAMESPACE = "urn:xmpp:http:upload:0"; public static final String NAMESPACE = "urn:xmpp:http:upload:0";
/**
* Namespace of XEP-0363 v0.2 or lower. Constant value {@value #NAMESPACE_0_2}.
*
* @see <a href="https://xmpp.org/extensions/attic/xep-0363-0.2.5.html">XEP-0363 v0.2.5</a>
*/
public static final String NAMESPACE_0_2 = "urn:xmpp:http:upload"; public static final String NAMESPACE_0_2 = "urn:xmpp:http:upload";
private static final Logger LOGGER = Logger.getLogger(HttpFileUploadManager.class.getName()); private static final Logger LOGGER = Logger.getLogger(HttpFileUploadManager.class.getName());
@ -459,6 +470,22 @@ public final class HttpFileUploadManager extends Manager {
} }
} }
public static UploadService.Version namespaceToVersion(String namespace) {
UploadService.Version version;
switch (namespace) {
case NAMESPACE:
version = Version.v0_3;
break;
case NAMESPACE_0_2:
version = Version.v0_2;
break;
default:
version = null;
break;
}
return version;
}
private static boolean containsHttpFileUploadNamespace(DiscoverInfo discoverInfo) { private static boolean containsHttpFileUploadNamespace(DiscoverInfo discoverInfo) {
return discoverInfo.containsFeature(NAMESPACE) || discoverInfo.containsFeature(NAMESPACE_0_2); return discoverInfo.containsFeature(NAMESPACE) || discoverInfo.containsFeature(NAMESPACE_0_2);
} }

View file

@ -22,8 +22,19 @@ import org.jxmpp.jid.DomainBareJid;
public class UploadService { public class UploadService {
enum Version { public enum Version {
/**
* Upload service as specified in XEP-0363 v0.2 or lower.
*
* @see <a href="https://xmpp.org/extensions/attic/xep-0363-0.2.5.html">XEP-0363 v0.2.5</a>
*/
v0_2, v0_2,
/**
* Upload service as specified in XEP-0363 v0.3 or higher.
*
* @see <a href="https://xmpp.org/extensions/attic/xep-0363-0.4.0.html">XEP-0363 v0.4.0</a>
*/
v0_3, v0_3,
} }

View file

@ -33,8 +33,9 @@ public class Slot extends IQ {
public static final String ELEMENT = "slot"; public static final String ELEMENT = "slot";
public static final String NAMESPACE = SlotRequest.NAMESPACE; public static final String NAMESPACE = SlotRequest.NAMESPACE;
private final URL putUrl; protected final URL putUrl;
private final URL getUrl; protected final URL getUrl;
private final Map<String, String> headers; private final Map<String, String> headers;
public Slot(URL putUrl, URL getUrl) { public Slot(URL putUrl, URL getUrl) {
@ -73,12 +74,21 @@ public class Slot extends IQ {
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.element("put", putUrl.toString()); xml.halfOpenElement("put").attribute("url", putUrl.toString());
xml.element("get", getUrl.toString()); if (headers.isEmpty()) {
for (Map.Entry<String, String> entry : getHeaders().entrySet()) { xml.closeEmptyElement();
xml.openElement("header").attribute(entry.getKey(), entry.getValue()); } else {
xml.rightAngleBracket();
for (Map.Entry<String, String> entry : getHeaders().entrySet()) {
xml.halfOpenElement("header").attribute("name", entry.getKey()).rightAngleBracket();
xml.escape(entry.getValue());
xml.closeElement("header");
}
xml.closeElement("put");
} }
xml.halfOpenElement("get").attribute("url", getUrl.toString()).closeEmptyElement();
return xml; return xml;
} }
} }

View file

@ -28,4 +28,13 @@ public class Slot_V0_2 extends Slot {
super(putUrl, getUrl, null, NAMESPACE); super(putUrl, getUrl, null, NAMESPACE);
} }
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.rightAngleBracket();
xml.element("put", putUrl.toString());
xml.element("get", getUrl.toString());
return xml;
}
} }

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright © 2017 Grigory Fedorov * Copyright © 2017 Grigory Fedorov, Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -25,6 +25,8 @@ import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.provider.IQProvider; import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.util.ParserUtils; import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smackx.httpfileupload.HttpFileUploadManager;
import org.jivesoftware.smackx.httpfileupload.UploadService;
import org.jivesoftware.smackx.httpfileupload.element.Slot; import org.jivesoftware.smackx.httpfileupload.element.Slot;
import org.jivesoftware.smackx.httpfileupload.element.Slot_V0_2; import org.jivesoftware.smackx.httpfileupload.element.Slot_V0_2;
@ -42,9 +44,13 @@ public class SlotProvider extends IQProvider<Slot> {
@Override @Override
public Slot parse(XmlPullParser parser, int initialDepth) throws XmlPullParserException, IOException, SmackException { public Slot parse(XmlPullParser parser, int initialDepth) throws XmlPullParserException, IOException, SmackException {
final String namespace = parser.getNamespace(); final String namespace = parser.getNamespace();
final UploadService.Version version = HttpFileUploadManager.namespaceToVersion(namespace);
assert version != null;
URL putUrl = null; URL putUrl = null;
URL getUrl = null; URL getUrl = null;
Map<String, String> headers = null; PutElement_V0_4_Content putElementV04Content = null;
outerloop: while (true) { outerloop: while (true) {
int event = parser.next(); int event = parser.next();
@ -53,19 +59,33 @@ public class SlotProvider extends IQProvider<Slot> {
case XmlPullParser.START_TAG: case XmlPullParser.START_TAG:
String name = parser.getName(); String name = parser.getName();
switch (name) { switch (name) {
case "put": case "put": {
putUrl = new URL(parser.nextText()); switch (version) {
break; case v0_2:
case "get": String putUrlString = parser.nextText();
getUrl = new URL(parser.nextText()); putUrl = new URL(putUrlString);
break; break;
case "header": case v0_3:
String headerName = ParserUtils.getRequiredAttribute(parser, "name"); putElementV04Content = parsePutElement_V0_4(parser);
String headerValue = ParserUtils.getRequiredNextText(parser); break;
if (headers == null) { default:
headers = new HashMap<>(); throw new AssertionError();
} }
headers.put(headerName, headerValue); break;
}
case "get":
String getUrlString;
switch (version) {
case v0_2:
getUrlString = parser.nextText();
break;
case v0_3:
getUrlString = parser.getAttributeValue(null, "url");
break;
default:
throw new AssertionError();
}
getUrl = new URL(getUrlString);
break; break;
} }
break; break;
@ -77,13 +97,67 @@ public class SlotProvider extends IQProvider<Slot> {
} }
} }
switch (namespace) { switch (version) {
case Slot.NAMESPACE: case v0_3:
return new Slot(putUrl, getUrl, headers); return new Slot(putElementV04Content.putUrl, getUrl, putElementV04Content.headers);
case Slot_V0_2.NAMESPACE: case v0_2:
return new Slot_V0_2(putUrl, getUrl); return new Slot_V0_2(putUrl, getUrl);
default: default:
throw new AssertionError(); throw new AssertionError();
} }
} }
public static PutElement_V0_4_Content parsePutElement_V0_4(XmlPullParser parser) throws XmlPullParserException, IOException {
final int initialDepth = parser.getDepth();
String putUrlString = parser.getAttributeValue(null, "url");
URL putUrl = new URL(putUrlString);
Map<String, String> headers = null;
outerloop: while (true) {
int next = parser.next();
switch (next) {
case XmlPullParser.START_TAG:
String name = parser.getName();
switch (name) {
case "header":
String headerName = ParserUtils.getRequiredAttribute(parser, "name");
String headerValue = ParserUtils.getRequiredNextText(parser);
if (headers == null) {
headers = new HashMap<>();
}
headers.put(headerName, headerValue);
break;
default:
break;
}
break;
case XmlPullParser.END_TAG:
if (parser.getDepth() == initialDepth) {
break outerloop;
}
break;
}
}
return new PutElement_V0_4_Content(putUrl, headers);
}
public static final class PutElement_V0_4_Content {
private final URL putUrl;
private final Map<String, String> headers;
private PutElement_V0_4_Content(URL putUrl, Map<String, String> headers) {
this.putUrl = putUrl;
this.headers = headers;
}
public URL getPutUrl() {
return putUrl;
}
public Map<String, String> getHeaders() {
return headers;
}
}
} }

View file

@ -26,6 +26,6 @@ import org.jxmpp.jid.Jid;
public interface ThingControlRequest { public interface ThingControlRequest {
public void processRequest(Jid from, Collection<SetData> setData) throws XMPPErrorException; void processRequest(Jid from, Collection<SetData> setData) throws XMPPErrorException;
} }

View file

@ -29,7 +29,7 @@ public class IoTSetResponse extends IQ {
public IoTSetResponse(IoTSetRequest iotSetRequest) { public IoTSetResponse(IoTSetRequest iotSetRequest) {
this(); this();
initialzeAsResultFor(iotSetRequest); initializeAsResultFor(iotSetRequest);
} }
@Override @Override

View file

@ -32,7 +32,7 @@ public abstract class SetData implements NamedElement {
private final String toStringCache; private final String toStringCache;
private Type() { Type() {
toStringCache = this.name().toLowerCase(Locale.US); toStringCache = this.name().toLowerCase(Locale.US);
} }

View file

@ -18,6 +18,6 @@ package org.jivesoftware.smackx.iot.data;
public interface ThingMomentaryReadOutRequest { public interface ThingMomentaryReadOutRequest {
public void momentaryReadOutRequest(ThingMomentaryReadOutResult callback); void momentaryReadOutRequest(ThingMomentaryReadOutResult callback);
} }

View file

@ -22,6 +22,6 @@ import org.jivesoftware.smackx.iot.data.element.IoTDataField;
public interface ThingMomentaryReadOutResult { public interface ThingMomentaryReadOutResult {
public void momentaryReadOut(List<? extends IoTDataField> results); void momentaryReadOut(List<? extends IoTDataField> results);
} }

View file

@ -24,7 +24,7 @@ public class IoTDataRequest extends IQ {
public static final String NAMESPACE = Constants.IOT_SENSORDATA_NAMESPACE; public static final String NAMESPACE = Constants.IOT_SENSORDATA_NAMESPACE;
/** /**
* The sequence nummber. According to XEP-0323 an xs:int. * The sequence number. According to XEP-0323 an xs:int.
*/ */
private final int seqNr; private final int seqNr;

View file

@ -20,6 +20,6 @@ import org.jxmpp.jid.BareJid;
public interface ThingStateChangeListener { public interface ThingStateChangeListener {
public void owned(BareJid owner); void owned(BareJid owner);
} }

View file

@ -25,7 +25,7 @@ public class Tag implements NamedElement {
public enum Type { public enum Type {
str, str,
num; num
} }
private final String name; private final String name;

View file

@ -161,8 +161,8 @@ public final class IoTProvisioningManager extends Manager {
// Notify the recommended friend that we will now accept his // Notify the recommended friend that we will now accept his
// friendship requests. // friendship requests.
final XMPPConnection connection = connection(); final XMPPConnection connection = connection();
Friend friendNotifiacation = new Friend(connection.getUser().asBareJid()); Friend friendNotification = new Friend(connection.getUser().asBareJid());
Message notificationMessage = new Message(friendJid, friendNotifiacation); Message notificationMessage = new Message(friendJid, friendNotification);
connection.sendStanza(notificationMessage); connection.sendStanza(notificationMessage);
} else { } else {
// Check is the message was send from a thing we previously // Check is the message was send from a thing we previously
@ -236,7 +236,7 @@ public final class IoTProvisioningManager extends Manager {
} }
catch (NoResponseException | XMPPErrorException | NotConnectedException | InterruptedException e) { catch (NoResponseException | XMPPErrorException | NotConnectedException | InterruptedException e) {
LOGGER.log(Level.WARNING, LOGGER.log(Level.WARNING,
"Could not determine privisioning server. Ignoring friend request from " + from, e); "Could not determine provisioning server. Ignoring friend request from " + from, e);
} }
if (provisioningServer == null) { if (provisioningServer == null) {
return null; return null;
@ -420,7 +420,7 @@ public final class IoTProvisioningManager extends Manager {
if (!provisioningServer.equals(stanza.getFrom())) { if (!provisioningServer.equals(stanza.getFrom())) {
if (log) { if (log) {
LOGGER.warning("Ignoring request '" + stanza LOGGER.warning("Ignoring request '" + stanza
+ "' because not from provising server '" + provisioningServer + "' because not from provisioning server '" + provisioningServer
+ "'."); + "'.");
} }
return false; return false;

View file

@ -239,11 +239,11 @@ public final class MamManager extends Manager {
/** /**
* Query an message archive like a MUC archive or a pubsub node archive, addressed by an archiveAddress, applying * Query an message archive like a MUC archive or a PubSub node archive, addressed by an archiveAddress, applying
* filters: max count, start date, end date, from/to JID and with additional fields. When archiveAddress is null the * filters: max count, start date, end date, from/to JID and with additional fields. When archiveAddress is null the
* default, the server will be requested. * default, the server will be requested.
* *
* @param node The Pubsub node name, can be null * @param node The PubSub node name, can be null
* @param max * @param max
* @param start * @param start
* @param end * @param end
@ -346,7 +346,7 @@ public final class MamManager extends Manager {
/** /**
* Returns a page of the archive. * Returns a page of the archive.
* *
* @param node The Pubsub node name, can be null * @param node The PubSub node name, can be null
* @param dataForm * @param dataForm
* @param rsmSet * @param rsmSet
* @return the MAM query result * @return the MAM query result
@ -498,7 +498,7 @@ public final class MamManager extends Manager {
/** /**
* Get the form fields supported by the server. * Get the form fields supported by the server.
* *
* @param node The Pubsub node name, can be null * @param node The PubSub node name, can be null
* @return the list of form fields. * @return the list of form fields.
* @throws NoResponseException * @throws NoResponseException
* @throws XMPPErrorException * @throws XMPPErrorException
@ -521,7 +521,7 @@ public final class MamManager extends Manager {
private MamQueryResult queryArchive(MamQueryIQ mamQueryIq) throws NoResponseException, XMPPErrorException, private MamQueryResult queryArchive(MamQueryIQ mamQueryIq) throws NoResponseException, XMPPErrorException,
NotConnectedException, InterruptedException, NotLoggedInException { NotConnectedException, InterruptedException, NotLoggedInException {
final XMPPConnection connection = getAuthenticatedConnectionOrThrow(); final XMPPConnection connection = getAuthenticatedConnectionOrThrow();
MamFinIQ mamFinIQ = null; MamFinIQ mamFinIQ;
StanzaCollector mamFinIQCollector = connection.createStanzaCollector(new IQReplyFilter(mamQueryIq, connection)); StanzaCollector mamFinIQCollector = connection.createStanzaCollector(new IQReplyFilter(mamQueryIq, connection));

View file

@ -82,7 +82,7 @@ public class MultiUserChatLight {
* Same as {@link #fromRoomFilter} together with * Same as {@link #fromRoomFilter} together with
* {@link MessageTypeFilter#GROUPCHAT}. * {@link MessageTypeFilter#GROUPCHAT}.
*/ */
private final StanzaFilter fromRoomGroupchatFilter; private final StanzaFilter fromRoomGroupChatFilter;
private final StanzaListener messageListener; private final StanzaListener messageListener;
@ -93,7 +93,7 @@ public class MultiUserChatLight {
this.room = room; this.room = room;
fromRoomFilter = FromMatchesFilter.create(room); fromRoomFilter = FromMatchesFilter.create(room);
fromRoomGroupchatFilter = new AndFilter(fromRoomFilter, MessageTypeFilter.GROUPCHAT); fromRoomGroupChatFilter = new AndFilter(fromRoomFilter, MessageTypeFilter.GROUPCHAT);
messageListener = new StanzaListener() { messageListener = new StanzaListener() {
@Override @Override
@ -105,7 +105,7 @@ public class MultiUserChatLight {
} }
}; };
connection.addSyncStanzaListener(messageListener, fromRoomGroupchatFilter); connection.addSyncStanzaListener(messageListener, fromRoomGroupChatFilter);
} }
/** /**
@ -266,7 +266,7 @@ public class MultiUserChatLight {
throws Exception { throws Exception {
MUCLightCreateIQ createMUCLightIQ = new MUCLightCreateIQ(room, roomName, occupants); MUCLightCreateIQ createMUCLightIQ = new MUCLightCreateIQ(room, roomName, occupants);
messageCollector = connection.createStanzaCollector(fromRoomGroupchatFilter); messageCollector = connection.createStanzaCollector(fromRoomGroupChatFilter);
try { try {
connection.createStanzaCollectorAndSend(createMUCLightIQ).nextResultOrThrow(); connection.createStanzaCollectorAndSend(createMUCLightIQ).nextResultOrThrow();

View file

@ -96,7 +96,7 @@ public final class MultiUserChatLightManager extends Manager {
private MultiUserChatLight createNewMucLightAndAddToMap(EntityBareJid jid) { private MultiUserChatLight createNewMucLightAndAddToMap(EntityBareJid jid) {
MultiUserChatLight multiUserChatLight = new MultiUserChatLight(connection(), jid); MultiUserChatLight multiUserChatLight = new MultiUserChatLight(connection(), jid);
multiUserChatLights.put(jid, new WeakReference<MultiUserChatLight>(multiUserChatLight)); multiUserChatLights.put(jid, new WeakReference<>(multiUserChatLight));
return multiUserChatLight; return multiUserChatLight;
} }
@ -193,11 +193,11 @@ public final class MultiUserChatLightManager extends Manager {
*/ */
public List<Jid> getRoomsBlocked(DomainBareJid mucLightService) public List<Jid> getRoomsBlocked(DomainBareJid mucLightService)
throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException {
MUCLightBlockingIQ muclIghtBlockingIQResult = getBlockingList(mucLightService); MUCLightBlockingIQ mucLightBlockingIQResult = getBlockingList(mucLightService);
List<Jid> jids = new ArrayList<>(); List<Jid> jids = new ArrayList<>();
if (muclIghtBlockingIQResult.getRooms() != null) { if (mucLightBlockingIQResult.getRooms() != null) {
jids.addAll(muclIghtBlockingIQResult.getRooms().keySet()); jids.addAll(mucLightBlockingIQResult.getRooms().keySet());
} }
return jids; return jids;
@ -215,11 +215,11 @@ public final class MultiUserChatLightManager extends Manager {
*/ */
public List<Jid> getUsersBlocked(DomainBareJid mucLightService) public List<Jid> getUsersBlocked(DomainBareJid mucLightService)
throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException {
MUCLightBlockingIQ muclIghtBlockingIQResult = getBlockingList(mucLightService); MUCLightBlockingIQ mucLightBlockingIQResult = getBlockingList(mucLightService);
List<Jid> jids = new ArrayList<>(); List<Jid> jids = new ArrayList<>();
if (muclIghtBlockingIQResult.getUsers() != null) { if (mucLightBlockingIQResult.getUsers() != null) {
jids.addAll(muclIghtBlockingIQResult.getUsers().keySet()); jids.addAll(mucLightBlockingIQResult.getUsers().keySet());
} }
return jids; return jids;
@ -234,9 +234,9 @@ public final class MultiUserChatLightManager extends Manager {
StanzaFilter responseFilter = new IQReplyFilter(mucLightBlockingIQ, connection()); StanzaFilter responseFilter = new IQReplyFilter(mucLightBlockingIQ, connection());
IQ responseIq = connection().createStanzaCollectorAndSend(responseFilter, mucLightBlockingIQ) IQ responseIq = connection().createStanzaCollectorAndSend(responseFilter, mucLightBlockingIQ)
.nextResultOrThrow(); .nextResultOrThrow();
MUCLightBlockingIQ muclIghtBlockingIQResult = (MUCLightBlockingIQ) responseIq; MUCLightBlockingIQ mucLightBlockingIQResult = (MUCLightBlockingIQ) responseIq;
return muclIghtBlockingIQResult; return mucLightBlockingIQResult;
} }
/** /**

View file

@ -254,7 +254,7 @@
<namespace>urn:xmpp:hints</namespace> <namespace>urn:xmpp:hints</namespace>
<className>org.jivesoftware.smackx.hints.provider.StoreHintProvider</className> <className>org.jivesoftware.smackx.hints.provider.StoreHintProvider</className>
</extensionProvider> </extensionProvider>
g
<!-- XEP-0363: HTTP File Upload --> <!-- XEP-0363: HTTP File Upload -->
<iqProvider> <iqProvider>
<elementName>slot</elementName> <elementName>slot</elementName>

View file

@ -27,7 +27,7 @@ import org.junit.Test;
public class ExperimentalInitializerTest { public class ExperimentalInitializerTest {
@Test @Test
public void testExperimentalInitialzer() { public void testExperimentalInitializer() {
ExperimentalInitializer epi = new ExperimentalInitializer(); ExperimentalInitializer epi = new ExperimentalInitializer();
List<Exception> exceptions = epi.initialize(); List<Exception> exceptions = epi.initialize();
assertTrue(exceptions.size() == 0); assertTrue(exceptions.size() == 0);

View file

@ -16,7 +16,7 @@
*/ */
package org.jivesoftware.smackx.carbons; package org.jivesoftware.smackx.carbons;
import static org.jivesoftware.smack.test.util.CharsequenceEquals.equalsCharSequence; import static org.jivesoftware.smack.test.util.CharSequenceEquals.equalsCharSequence;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;

View file

@ -49,7 +49,7 @@ public class AcknowledgedExtensionTest {
AcknowledgedExtension acknowledgedExtension1 = new AcknowledgedProvider().parse(parser); AcknowledgedExtension acknowledgedExtension1 = new AcknowledgedProvider().parse(parser);
Assert.assertEquals("message-1", acknowledgedExtension1.getId()); Assert.assertEquals("message-1", acknowledgedExtension1.getId());
Message message = (Message) PacketParserUtils.parseStanza(acknowledgedMessageStanza); Message message = PacketParserUtils.parseStanza(acknowledgedMessageStanza);
AcknowledgedExtension acknowledgedExtension2 = AcknowledgedExtension.from(message); AcknowledgedExtension acknowledgedExtension2 = AcknowledgedExtension.from(message);
Assert.assertEquals("message-1", acknowledgedExtension2.getId()); Assert.assertEquals("message-1", acknowledgedExtension2.getId());
} }

View file

@ -49,7 +49,7 @@ public class DisplayedExtensionTest {
DisplayedExtension displayedExtension1 = new DisplayedProvider().parse(parser); DisplayedExtension displayedExtension1 = new DisplayedProvider().parse(parser);
Assert.assertEquals("message-1", displayedExtension1.getId()); Assert.assertEquals("message-1", displayedExtension1.getId());
Message message = (Message) PacketParserUtils.parseStanza(displayedMessageStanza); Message message = PacketParserUtils.parseStanza(displayedMessageStanza);
DisplayedExtension displayedExtension2 = DisplayedExtension.from(message); DisplayedExtension displayedExtension2 = DisplayedExtension.from(message);
Assert.assertEquals("message-1", displayedExtension2.getId()); Assert.assertEquals("message-1", displayedExtension2.getId());
} }

View file

@ -51,7 +51,7 @@ public class MarkableExtensionTest {
MarkableExtension markableExtension1 = new MarkableProvider().parse(parser); MarkableExtension markableExtension1 = new MarkableProvider().parse(parser);
Assert.assertEquals(markableExtension, markableExtension1.toXML().toString()); Assert.assertEquals(markableExtension, markableExtension1.toXML().toString());
Message message = (Message) PacketParserUtils.parseStanza(markableMessageStanza); Message message = PacketParserUtils.parseStanza(markableMessageStanza);
MarkableExtension markableExtension2 = MarkableExtension.from(message); MarkableExtension markableExtension2 = MarkableExtension.from(message);
Assert.assertEquals(markableExtension, markableExtension2.toXML().toString()); Assert.assertEquals(markableExtension, markableExtension2.toXML().toString());
} }

View file

@ -49,7 +49,7 @@ public class ReceivedExtensionTest {
ReceivedExtension receivedExtension1 = new ReceivedProvider().parse(parser); ReceivedExtension receivedExtension1 = new ReceivedProvider().parse(parser);
Assert.assertEquals("message-1", receivedExtension1.getId()); Assert.assertEquals("message-1", receivedExtension1.getId());
Message message = (Message) PacketParserUtils.parseStanza(receivedMessageStanza); Message message = PacketParserUtils.parseStanza(receivedMessageStanza);
ReceivedExtension receivedExtension2 = ReceivedExtension.from(message); ReceivedExtension receivedExtension2 = ReceivedExtension.from(message);
Assert.assertEquals("message-1", receivedExtension2.getId()); Assert.assertEquals("message-1", receivedExtension2.getId());
} }

View file

@ -72,7 +72,6 @@ public class HttpOverXmppReqProviderTest {
XmlPullParser parser = PacketParserUtils.getParserFor(string); XmlPullParser parser = PacketParserUtils.getParserFor(string);
IQ iq = provider.parse(parser); IQ iq = provider.parse(parser);
assertTrue(iq instanceof HttpOverXmppReq); assertTrue(iq instanceof HttpOverXmppReq);
HttpOverXmppReq castedIq = (HttpOverXmppReq) iq; return (HttpOverXmppReq) iq;
return castedIq;
} }
} }

View file

@ -22,7 +22,7 @@ import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
public class FileTooLargeErrorCreateTest { public class FileTooLargeErrorCreateTest {
String fileTooLargeErrorExtensionExample private static final String fileTooLargeErrorExtensionExample
= "<file-too-large xmlns='urn:xmpp:http:upload:0'>" = "<file-too-large xmlns='urn:xmpp:http:upload:0'>"
+ "<max-file-size>20000</max-file-size>" + "<max-file-size>20000</max-file-size>"
+ "</file-too-large>"; + "</file-too-large>";

View file

@ -16,23 +16,26 @@
*/ */
package org.jivesoftware.smackx.httpfileupload; package org.jivesoftware.smackx.httpfileupload;
import java.net.MalformedURLException; import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
import java.io.IOException;
import java.net.URL; import java.net.URL;
import org.jivesoftware.smackx.httpfileupload.element.Slot; import org.jivesoftware.smackx.httpfileupload.element.Slot;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import org.xml.sax.SAXException;
public class SlotCreateTest { public class SlotCreateTest {
String testSlot private static final String testSlot
= "<slot xmlns='urn:xmpp:http:upload:0'>" = "<slot xmlns='urn:xmpp:http:upload:0'>"
+ "<put>https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png</put>" + "<put url='https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png'></put>"
+ "<get>https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png</get>" + "<get url='https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png'></get>"
+ "</slot>"; + "</slot>";
@Test @Test
public void checkSlotRequestCreation() throws MalformedURLException { public void checkSlotRequestCreation() throws SAXException, IOException {
Slot slot = new Slot(new URL("https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png"), Slot slot = new Slot(new URL("https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png"),
new URL("https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png")); new URL("https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png"));
@ -41,6 +44,6 @@ public class SlotCreateTest {
Assert.assertEquals(new URL("https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png"), Assert.assertEquals(new URL("https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png"),
slot.getGetUrl()); slot.getGetUrl());
Assert.assertEquals(testSlot, slot.getChildElementXML().toString()); assertXMLEqual(testSlot, slot.getChildElementXML().toString());
} }
} }

View file

@ -29,14 +29,14 @@ import org.xml.sax.SAXException;
public class SlotRequestCreateTest { public class SlotRequestCreateTest {
String testRequest private static final String testRequest
= "<request xmlns='urn:xmpp:http:upload:0'" = "<request xmlns='urn:xmpp:http:upload:0'"
+ " filename='my_juliet.png'" + " filename='my_juliet.png'"
+ " size='23456'" + " size='23456'"
+ " content-type='image/jpeg'" + " content-type='image/jpeg'"
+ "/>"; + "/>";
String testRequestWithoutContentType private static final String testRequestWithoutContentType
= "<request xmlns='urn:xmpp:http:upload:0'" = "<request xmlns='urn:xmpp:http:upload:0'"
+ " filename='my_romeo.png'" + " filename='my_romeo.png'"
+ " size='52523'" + " size='52523'"

View file

@ -30,7 +30,7 @@ public class FileTooLargeErrorProviderTest {
* Example 7. Alternative response by the upload service if the file size was too large * Example 7. Alternative response by the upload service if the file size was too large
* @see <a href="http://xmpp.org/extensions/xep-0363.html#errors">XEP-0363: HTTP File Upload 5. Error conditions</a> * @see <a href="http://xmpp.org/extensions/xep-0363.html#errors">XEP-0363: HTTP File Upload 5. Error conditions</a>
*/ */
String slotErrorFileToLarge private static final String slotErrorFileToLarge
= "<iq from='upload.montague.tld' " = "<iq from='upload.montague.tld' "
+ "id='step_03' " + "id='step_03' "
+ "to='romeo@montague.tld/garden' " + "to='romeo@montague.tld/garden' "

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright © 2017 Grigory Fedorov * Copyright © 2017 Grigory Fedorov, Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,42 +16,108 @@
*/ */
package org.jivesoftware.smackx.httpfileupload.provider; package org.jivesoftware.smackx.httpfileupload.provider;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
import static org.junit.Assert.assertEquals;
import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.util.PacketParserUtils; import org.jivesoftware.smack.util.PacketParserUtils;
import org.jivesoftware.smackx.httpfileupload.element.Slot; import org.jivesoftware.smackx.httpfileupload.element.Slot;
import org.jivesoftware.smackx.httpfileupload.element.Slot_V0_2;
import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
public class SlotProviderTest { public class SlotProviderTest {
private static final String PUT_URL_STRING = "https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png";
private static final String GET_URL_STRING = "https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png";
private static final URL PUT_URL = urlFromString(PUT_URL_STRING);
private static final URL GET_URL = urlFromString(GET_URL_STRING);
private static URL urlFromString(String urlString) {
try {
return new URL(urlString);
}
catch (MalformedURLException e) {
throw new Error(e);
}
}
/** /**
* Example 6. The upload service responds with a slot * Example 6. The upload service responds with a slot
* @see <a href="http://xmpp.org/extensions/xep-0363.html#request">XEP-0363: HTTP File Upload 4. Requesting a slot</a> * @see <a href="http://xmpp.org/extensions/xep-0363.html#request">XEP-0363: HTTP File Upload 4. Requesting a slot</a>
*/ */
String slotExample private static final String SLOT_IQ
= "<iq from='upload.montague.tld' " = "<iq from='upload.montague.tld' "
+ "id='step_03' " + "id='step_03' "
+ "to='romeo@montague.tld/garden' " + "to='romeo@montague.tld/garden' "
+ "type='result'>" + "type='result'>"
+ "<slot xmlns='urn:xmpp:http:upload:0'>" + "<slot xmlns='urn:xmpp:http:upload:0'>"
+ "<put>https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png</put>" + "<put url='" + PUT_URL_STRING + "'></put>"
+ "<get>https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png</get>" + "<get url='" + GET_URL_STRING + "'></get>"
+ "</slot>" + "</slot>"
+ "</iq>"; + "</iq>";
@Test @Test
public void checkSlotProvider() throws Exception { public void checkSlotProvider() throws Exception {
Slot slot = PacketParserUtils.parseStanza(slotExample); Slot slot = PacketParserUtils.parseStanza(SLOT_IQ);
Assert.assertEquals(IQ.Type.result, slot.getType()); checkUrls(slot);
Assert.assertEquals(new URL("https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png"),
slot.getPutUrl()); assertXMLEqual(SLOT_IQ, slot.toXML().toString());
Assert.assertEquals(new URL("https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my_juliet.png"), }
slot.getGetUrl());
private static final String SLOT_V0_2_IQ =
"<iq from='upload.montague.tld' " +
"id='step_03' " +
"to='romeo@montague.tld/garden' " +
"type='result'>" +
"<slot xmlns='urn:xmpp:http:upload'>" +
"<put>" + PUT_URL_STRING + "</put>" +
"<get>" + GET_URL_STRING + "</get>" +
"</slot>" +
"</iq>";
@Test
public void checkSlotV0_2Provider() throws Exception {
Slot_V0_2 slot = PacketParserUtils.parseStanza(SLOT_V0_2_IQ);
checkUrls(slot);
String slotXml = slot.toXML().toString();
assertXMLEqual(SLOT_V0_2_IQ, slotXml);
}
private static final String SLOT_WITH_HEADERS_IQ =
"<iq from='upload.montague.tld' " +
"id='step_03' " +
"to='romeo@montague.tld/garden' " +
"type='result'>" +
"<slot xmlns='urn:xmpp:http:upload:0'>" +
"<put url='" + PUT_URL_STRING + "'>" +
"<header name='Authorization'>Basic Base64String==</header>" +
"<header name='Host'>montague.tld</header>" +
"</put>" +
"<get url='" + GET_URL_STRING + "' />" +
"</slot>" +
"</iq>";
@Test
public void checkSlotWithHeaders() throws Exception {
Slot slot = PacketParserUtils.parseStanza(SLOT_WITH_HEADERS_IQ);
checkUrls(slot);
String slotXml = slot.toXML().toString();
assertXMLEqual(SLOT_WITH_HEADERS_IQ, slotXml);
}
private static void checkUrls(Slot slot) {
assertEquals(PUT_URL, slot.getPutUrl());
assertEquals(GET_URL, slot.getGetUrl());
} }
} }

View file

@ -61,7 +61,7 @@ public class MamFinProviderTest extends MamTest {
+ "</iq>"; + "</iq>";
// @formatter:on // @formatter:on
IQ iq = (IQ) PacketParserUtils.parseStanza(IQ_LIMITED_RESULTS_EXAMPLE); IQ iq = PacketParserUtils.parseStanza(IQ_LIMITED_RESULTS_EXAMPLE);
MamFinIQ mamFinIQ = (MamFinIQ) iq; MamFinIQ mamFinIQ = (MamFinIQ) iq;
Assert.assertEquals(mamFinIQ.getType(), Type.result); Assert.assertEquals(mamFinIQ.getType(), Type.result);

View file

@ -31,18 +31,18 @@ import org.xmlpull.v1.XmlPullParser;
public class MamPrefIQProviderTest extends MamTest { public class MamPrefIQProviderTest extends MamTest {
String exampleMamPrefsIQ1 = "<iq type='set' id='juliet3'>" + "<prefs xmlns='urn:xmpp:mam:1' default='roster'>" private static final String exampleMamPrefsIQ1 = "<iq type='set' id='juliet3'>" + "<prefs xmlns='urn:xmpp:mam:1' default='roster'>"
+ "<always>" + "<jid>romeo@montague.lit</jid>" + "</always>" + "<never>" + "<always>" + "<jid>romeo@montague.lit</jid>" + "</always>" + "<never>"
+ "<jid>montague@montague.lit</jid>" + "</never>" + "</prefs>" + "</iq>"; + "<jid>montague@montague.lit</jid>" + "</never>" + "</prefs>" + "</iq>";
String exampleMamPrefsIQ2 = "<iq type='set' id='juliet3'>" + "<prefs xmlns='urn:xmpp:mam:1' default='roster'>" private static final String exampleMamPrefsIQ2 = "<iq type='set' id='juliet3'>" + "<prefs xmlns='urn:xmpp:mam:1' default='roster'>"
+ "<always>" + "<jid>romeo@montague.lit</jid>" + "<jid>montague@montague.lit</jid>" + "</always>" + "<always>" + "<jid>romeo@montague.lit</jid>" + "<jid>montague@montague.lit</jid>" + "</always>"
+ "<never>" + "</never>" + "</prefs>" + "</iq>"; + "<never>" + "</never>" + "</prefs>" + "</iq>";
String exampleMamPrefsIQ3 = "<iq type='get' id='juliet3'>" + "<prefs xmlns='urn:xmpp:mam:1'>" + "</prefs>" private static final String exampleMamPrefsIQ3 = "<iq type='get' id='juliet3'>" + "<prefs xmlns='urn:xmpp:mam:1'>" + "</prefs>"
+ "</iq>"; + "</iq>";
String exampleMamPrefsResultIQ = "<iq type='result' id='juliet3'>" private static final String exampleMamPrefsResultIQ = "<iq type='result' id='juliet3'>"
+ "<prefs xmlns='urn:xmpp:mam:1' default='roster'>" + "<always>" + "<jid>romeo@montague.lit</jid>" + "<prefs xmlns='urn:xmpp:mam:1' default='roster'>" + "<always>" + "<jid>romeo@montague.lit</jid>"
+ "</always>" + "<never>" + "<jid>sarasa@montague.lit</jid>" + "<jid>montague@montague.lit</jid>" + "</always>" + "<never>" + "<jid>sarasa@montague.lit</jid>" + "<jid>montague@montague.lit</jid>"
+ "</never>" + "</prefs>" + "</iq>"; + "</never>" + "</prefs>" + "</iq>";
@ -53,14 +53,14 @@ public class MamPrefIQProviderTest extends MamTest {
MamPrefsIQ mamPrefIQ1 = new MamPrefsIQProvider().parse(parser1); MamPrefsIQ mamPrefIQ1 = new MamPrefsIQProvider().parse(parser1);
Assert.assertEquals(IQ.Type.set, mamPrefIQ1.getType()); Assert.assertEquals(IQ.Type.set, mamPrefIQ1.getType());
Assert.assertEquals(mamPrefIQ1.getAlwaysJids().get(0), "romeo@montague.lit"); Assert.assertEquals(mamPrefIQ1.getAlwaysJids().get(0).toString(), "romeo@montague.lit");
Assert.assertEquals(mamPrefIQ1.getNeverJids().get(0), "montague@montague.lit"); Assert.assertEquals(mamPrefIQ1.getNeverJids().get(0).toString(), "montague@montague.lit");
XmlPullParser parser2 = PacketParserUtils.getParserFor(exampleMamPrefsIQ2); XmlPullParser parser2 = PacketParserUtils.getParserFor(exampleMamPrefsIQ2);
MamPrefsIQ mamPrefIQ2 = new MamPrefsIQProvider().parse(parser2); MamPrefsIQ mamPrefIQ2 = new MamPrefsIQProvider().parse(parser2);
Assert.assertEquals(IQ.Type.set, mamPrefIQ2.getType()); Assert.assertEquals(IQ.Type.set, mamPrefIQ2.getType());
Assert.assertEquals(mamPrefIQ2.getAlwaysJids().get(0), "romeo@montague.lit"); Assert.assertEquals(mamPrefIQ2.getAlwaysJids().get(0).toString(), "romeo@montague.lit");
Assert.assertEquals(mamPrefIQ2.getAlwaysJids().get(1), "montague@montague.lit"); Assert.assertEquals(mamPrefIQ2.getAlwaysJids().get(1).toString(), "montague@montague.lit");
Assert.assertTrue(mamPrefIQ2.getNeverJids().isEmpty()); Assert.assertTrue(mamPrefIQ2.getNeverJids().isEmpty());
XmlPullParser parser3 = PacketParserUtils.getParserFor(exampleMamPrefsIQ3); XmlPullParser parser3 = PacketParserUtils.getParserFor(exampleMamPrefsIQ3);
@ -70,7 +70,7 @@ public class MamPrefIQProviderTest extends MamTest {
@Test @Test
public void checkMamPrefResult() throws Exception { public void checkMamPrefResult() throws Exception {
IQ iq = (IQ) PacketParserUtils.parseStanza(exampleMamPrefsResultIQ); IQ iq = PacketParserUtils.parseStanza(exampleMamPrefsResultIQ);
MamPrefsIQ mamPrefsIQ = (MamPrefsIQ) iq; MamPrefsIQ mamPrefsIQ = (MamPrefsIQ) iq;

View file

@ -32,7 +32,7 @@ import org.junit.Test;
public class MamQueryIQProviderTest { public class MamQueryIQProviderTest {
String exampleMamQueryIQ1 = "<iq type='set' id='query4'>" + "<query xmlns='urn:xmpp:mam:1' queryid='test'>" private static final String exampleMamQueryIQ1 = "<iq type='set' id='query4'>" + "<query xmlns='urn:xmpp:mam:1' queryid='test'>"
+ "<x xmlns='jabber:x:data' type='submit'>" + "<field type='hidden' var='FORM_TYPE'>" + "<x xmlns='jabber:x:data' type='submit'>" + "<field type='hidden' var='FORM_TYPE'>"
+ "<value>urn:xmpp:mam:1</value>" + "</field>" + "<value>urn:xmpp:mam:1</value>" + "</field>"
+ "<field type='text-single' var='urn:example:xmpp:free-text-search'>" + "<field type='text-single' var='urn:example:xmpp:free-text-search'>"
@ -41,7 +41,7 @@ public class MamQueryIQProviderTest {
+ "<value>{http://jabber.org/protocol/mood}mood/lonely</value>" + "</field>" + "</x>" + "</query>" + "<value>{http://jabber.org/protocol/mood}mood/lonely</value>" + "</field>" + "</x>" + "</query>"
+ "</iq>"; + "</iq>";
String exampleMamQueryIQ2 = "<iq type='result' id='form1'>" + "<query xmlns='urn:xmpp:mam:1'>" private static final String exampleMamQueryIQ2 = "<iq type='result' id='form1'>" + "<query xmlns='urn:xmpp:mam:1'>"
+ "<x xmlns='jabber:x:data' type='form'>" + "<field type='hidden' var='FORM_TYPE'>" + "<x xmlns='jabber:x:data' type='form'>" + "<field type='hidden' var='FORM_TYPE'>"
+ "<value>urn:xmpp:mam:1</value>" + "</field>" + "<field type='jid-single' var='with'/>" + "<value>urn:xmpp:mam:1</value>" + "</field>" + "<field type='jid-single' var='with'/>"
+ "<field type='text-single' var='start'/>" + "<field type='text-single' var='end'/>" + "<field type='text-single' var='start'/>" + "<field type='text-single' var='end'/>"
@ -51,7 +51,7 @@ public class MamQueryIQProviderTest {
@Test @Test
public void checkMamQueryIQProvider() throws Exception { public void checkMamQueryIQProvider() throws Exception {
// example 1 // example 1
IQ iq1 = (IQ) PacketParserUtils.parseStanza(exampleMamQueryIQ1); IQ iq1 = PacketParserUtils.parseStanza(exampleMamQueryIQ1);
MamQueryIQ mamQueryIQ1 = (MamQueryIQ) iq1; MamQueryIQ mamQueryIQ1 = (MamQueryIQ) iq1;
Assert.assertEquals(mamQueryIQ1.getType(), Type.set); Assert.assertEquals(mamQueryIQ1.getType(), Type.set);
@ -67,7 +67,7 @@ public class MamQueryIQProviderTest {
Assert.assertEquals(fields1.get(2).getValues().get(0), "{http://jabber.org/protocol/mood}mood/lonely"); Assert.assertEquals(fields1.get(2).getValues().get(0), "{http://jabber.org/protocol/mood}mood/lonely");
// example2 // example2
IQ iq2 = (IQ) PacketParserUtils.parseStanza(exampleMamQueryIQ2); IQ iq2 = PacketParserUtils.parseStanza(exampleMamQueryIQ2);
MamQueryIQ mamQueryIQ2 = (MamQueryIQ) iq2; MamQueryIQ mamQueryIQ2 = (MamQueryIQ) iq2;
Assert.assertEquals(mamQueryIQ2.getType(), Type.result); Assert.assertEquals(mamQueryIQ2.getType(), Type.result);

View file

@ -33,14 +33,14 @@ import org.xmlpull.v1.XmlPullParser;
public class MamResultProviderTest { public class MamResultProviderTest {
String exampleMamResultXml = "<result xmlns='urn:xmpp:mam:1' queryid='f27' id='28482-98726-73623'>" private static final String exampleMamResultXml = "<result xmlns='urn:xmpp:mam:1' queryid='f27' id='28482-98726-73623'>"
+ "<forwarded xmlns='urn:xmpp:forward:0'>" + "<delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/>" + "<forwarded xmlns='urn:xmpp:forward:0'>" + "<delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/>"
+ "<message xmlns='jabber:client'" + "to='juliet@capulet.lit/balcony'" + "from='romeo@montague.lit/orchard'" + "<message xmlns='jabber:client'" + "to='juliet@capulet.lit/balcony'" + "from='romeo@montague.lit/orchard'"
+ "type='chat'>" + "type='chat'>"
+ "<body>Call me but love, and I'll be new baptized; Henceforth I never will be Romeo.</body>" + "<body>Call me but love, and I'll be new baptized; Henceforth I never will be Romeo.</body>"
+ "</message>" + "</forwarded>" + "</result>"; + "</message>" + "</forwarded>" + "</result>";
String exampleResultMessage = "<message id='aeb213' to='juliet@capulet.lit/chamber'>" private static final String exampleResultMessage = "<message id='aeb213' to='juliet@capulet.lit/chamber'>"
+ "<result xmlns='urn:xmpp:mam:1' queryid='f27' id='28482-98726-73623'>" + "<result xmlns='urn:xmpp:mam:1' queryid='f27' id='28482-98726-73623'>"
+ "<forwarded xmlns='urn:xmpp:forward:0'>" + "<delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/>" + "<forwarded xmlns='urn:xmpp:forward:0'>" + "<delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/>"
+ "<message xmlns='jabber:client' from='witch@shakespeare.lit' to='macbeth@shakespeare.lit'>" + "<message xmlns='jabber:client' from='witch@shakespeare.lit' to='macbeth@shakespeare.lit'>"
@ -62,15 +62,15 @@ public class MamResultProviderTest {
Assert.assertEquals(forwarded.getDelayInformation().getStamp(), date); Assert.assertEquals(forwarded.getDelayInformation().getStamp(), date);
Message message = (Message) forwarded.getForwardedStanza(); Message message = (Message) forwarded.getForwardedStanza();
Assert.assertEquals(message.getFrom(), "romeo@montague.lit/orchard"); Assert.assertEquals(message.getFrom().toString(), "romeo@montague.lit/orchard");
Assert.assertEquals(message.getTo(), "juliet@capulet.lit/balcony"); Assert.assertEquals(message.getTo().toString(), "juliet@capulet.lit/balcony");
Assert.assertEquals(message.getBody(), Assert.assertEquals(message.getBody(),
"Call me but love, and I'll be new baptized; Henceforth I never will be Romeo."); "Call me but love, and I'll be new baptized; Henceforth I never will be Romeo.");
} }
@Test @Test
public void checkResultsParse() throws Exception { public void checkResultsParse() throws Exception {
Message message = (Message) PacketParserUtils.parseStanza(exampleResultMessage); Message message = PacketParserUtils.parseStanza(exampleResultMessage);
MamResultExtension mamResultExtension = MamResultExtension.from(message); MamResultExtension mamResultExtension = MamResultExtension.from(message);
Assert.assertEquals(mamResultExtension.getQueryId(), "f27"); Assert.assertEquals(mamResultExtension.getQueryId(), "f27");
@ -84,8 +84,8 @@ public class MamResultProviderTest {
Assert.assertEquals(forwarded.getDelayInformation().getStamp(), date); Assert.assertEquals(forwarded.getDelayInformation().getStamp(), date);
Message forwardedMessage = (Message) forwarded.getForwardedStanza(); Message forwardedMessage = (Message) forwarded.getForwardedStanza();
Assert.assertEquals(forwardedMessage.getFrom(), "witch@shakespeare.lit"); Assert.assertEquals(forwardedMessage.getFrom().toString(), "witch@shakespeare.lit");
Assert.assertEquals(forwardedMessage.getTo(), "macbeth@shakespeare.lit"); Assert.assertEquals(forwardedMessage.getTo().toString(), "macbeth@shakespeare.lit");
Assert.assertEquals(forwardedMessage.getBody(), "Hail to thee"); Assert.assertEquals(forwardedMessage.getBody(), "Hail to thee");
} }

View file

@ -30,10 +30,10 @@ import org.jxmpp.jid.impl.JidCreate;
public class PreferencesTest { public class PreferencesTest {
String retrievePrefsStanzaExample = "<iq id='sarasa' type='get'>" + "<prefs xmlns='" + MamElements.NAMESPACE private static final String retrievePrefsStanzaExample = "<iq id='sarasa' type='get'>" + "<prefs xmlns='" + MamElements.NAMESPACE
+ "'/>" + "</iq>"; + "'/>" + "</iq>";
String updatePrefsStanzaExample = "<iq id='sarasa' type='set'>" + "<prefs xmlns='" + MamElements.NAMESPACE private static final String updatePrefsStanzaExample = "<iq id='sarasa' type='set'>" + "<prefs xmlns='" + MamElements.NAMESPACE
+ "' default='roster'>" + "<always>" + "<jid>romeo@montague.lit</jid>" + "<jid>other@montague.lit</jid>" + "' default='roster'>" + "<always>" + "<jid>romeo@montague.lit</jid>" + "<jid>other@montague.lit</jid>"
+ "</always>" + "<never>" + "<jid>montague@montague.lit</jid>" + "</never>" + "</prefs>" + "</iq>"; + "</always>" + "<never>" + "<jid>montague@montague.lit</jid>" + "</never>" + "</prefs>" + "</iq>";

View file

@ -37,11 +37,11 @@ import org.jxmpp.jid.impl.JidCreate;
public class QueryArchiveTest extends MamTest { public class QueryArchiveTest extends MamTest {
String mamSimpleQueryIQ = "<iq id='sarasa' type='set'>" + "<query xmlns='urn:xmpp:mam:1' queryid='testid'>" private static final String mamSimpleQueryIQ = "<iq id='sarasa' type='set'>" + "<query xmlns='urn:xmpp:mam:1' queryid='testid'>"
+ "<x xmlns='jabber:x:data' type='submit'>" + "<field var='FORM_TYPE' type='hidden'>" + "<value>" + "<x xmlns='jabber:x:data' type='submit'>" + "<field var='FORM_TYPE' type='hidden'>" + "<value>"
+ MamElements.NAMESPACE + "</value>" + "</field>" + "</x>" + "</query>" + "</iq>"; + MamElements.NAMESPACE + "</value>" + "</field>" + "</x>" + "</query>" + "</iq>";
String mamQueryResultExample = "<message to='hag66@shakespeare.lit/pda' from='coven@chat.shakespeare.lit' id='iasd207'>" private static final String mamQueryResultExample = "<message to='hag66@shakespeare.lit/pda' from='coven@chat.shakespeare.lit' id='iasd207'>"
+ "<result xmlns='urn:xmpp:mam:1' queryid='g27' id='34482-21985-73620'>" + "<result xmlns='urn:xmpp:mam:1' queryid='g27' id='34482-21985-73620'>"
+ "<forwarded xmlns='urn:xmpp:forward:0'>" + "<forwarded xmlns='urn:xmpp:forward:0'>"
+ "<delay xmlns='urn:xmpp:delay' stamp='2002-10-13T23:58:37.000+00:00'></delay>" + "<message " + "<delay xmlns='urn:xmpp:delay' stamp='2002-10-13T23:58:37.000+00:00'></delay>" + "<message "

View file

@ -29,7 +29,7 @@ import org.junit.Test;
public class ResultsLimitTest extends MamTest { public class ResultsLimitTest extends MamTest {
String resultsLimitStanza = "<iq id='sarasa' type='set'>" + "<query xmlns='urn:xmpp:mam:1' queryid='testid'>" private static final String resultsLimitStanza = "<iq id='sarasa' type='set'>" + "<query xmlns='urn:xmpp:mam:1' queryid='testid'>"
+ "<x xmlns='jabber:x:data' type='submit'>" + "<field var='FORM_TYPE' type='hidden'>" + "<value>" + "<x xmlns='jabber:x:data' type='submit'>" + "<field var='FORM_TYPE' type='hidden'>" + "<value>"
+ MamElements.NAMESPACE + "</value>" + "</field>" + "</x>" + "<set xmlns='http://jabber.org/protocol/rsm'>" + MamElements.NAMESPACE + "</value>" + "</field>" + "</x>" + "<set xmlns='http://jabber.org/protocol/rsm'>"
+ "<max>10</max>" + "</set>" + "</query>" + "</iq>"; + "<max>10</max>" + "</set>" + "</query>" + "</iq>";

Some files were not shown because too many files have changed in this diff Show more