1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2025-01-22 17:46:24 +01:00

Compare commits

...

26 commits

Author SHA1 Message Date
5e561f410a
Migrate from libsignal-protocol-java to libsignal 2024-10-24 17:47:20 +02:00
Florian Schmaus
0561aaa9bc Bump checkstyle to 10.18.2 2024-10-22 16:09:33 +02:00
Florian Schmaus
c696925d33 [java11-full] Switch from okhttp to Java's native API for websockets 2024-10-22 14:48:46 +02:00
Florian Schmaus
6c5e64b2ca [build-logic] Drop redundant definition of getAndroidRuntimeJar()
This is also defined in global-conventions.gradle.
2024-10-22 14:48:08 +02:00
Florian Schmaus
6498ca796b [java11-full] Fix typo in build.gradle 2024-10-22 14:48:08 +02:00
Florian Schmaus
74a7a2689e Update Makefile 2024-10-22 14:37:34 +02:00
Florian Schmaus
37a2df5486 [sinttest] decrease length of MUC names
To reduce the noise in XMPP traces, decrease the length of MUC names
generated by sinttest.
2024-10-18 16:11:29 +02:00
Florian Schmaus
75636884ad [sinttest] Add ejabberd compatibility mode for mucJoinEventOrderingTest 2024-10-18 15:56:39 +02:00
Florian Schmaus
7e8fddcbf8 [sinttest] Improve code readability in MultiUserChatOccupantIntegrationTest
Especially considering pattern matching for instanceof, which will be
available in Java 16.
2024-10-18 15:48:12 +02:00
Florian Schmaus
9c7e575e9e [sinttest] Include results in assertion message of mucJoinEventOrderingTest 2024-10-18 15:45:33 +02:00
Florian Schmaus
d7858d2e8f [sinttest] Reject empty string values for enabled/disabled tests configuration 2024-10-18 15:44:51 +02:00
Florian Schmaus
18647c24ca [sinttest] Perform early exit in JulTestRunResultProcessor.process() 2024-10-17 22:07:37 +02:00
Florian Schmaus
d67262a5e0 [sinttest] Fix indentation 2024-10-17 22:04:45 +02:00
Florian Schmaus
1eb5649123 [sinttest] Provide brief summary of failed tests 2024-10-17 22:04:14 +02:00
Florian Schmaus
0191ed7174 [tcp] Report SM resumption impossible if not instant shutdown
If the connection got not instantanously shut down, then we also
dropped all SM state and should not report that SM resumption is
possible.

This most likely fixes SMACK-954.x
2024-10-17 18:10:54 +02:00
Florian Schmaus
6e6a3ef88d [tcp] Set shutdownTimestamp before queue.shutdown()
In the writer thread, we use shutdownTimestamp to determine if we
should break out of the writer loop. If we set
shutdownTimestamp *after* queue.shutdown(), then there is a brief
period where nextStreamElement() returns 'null' but done() still
returns 'true'. Hence, we switch the logic "setting" those values.
2024-10-17 18:08:31 +02:00
Florian Schmaus
9e5ac5a39a [core] Wrap current connection exception when re-throwing
Instead of directly throwing the current connection exception, wrap
it, so we do not lose the stack trace of the thread invoking
waitForConditionorThrowConnectionException().
2024-10-17 17:34:05 +02:00
Florian Schmaus
3c5fb5810e Smack 4.5.0-beta6-SNAPSHOT 2024-10-15 16:14:14 +02:00
Florian Schmaus
caa479fac4 Smack 4.5.0-beta5 2024-10-15 15:55:58 +02:00
Florian Schmaus
3b0c2f752f [core] Remove NumberFormatException from innermost try/catch in parseAndProcessStanza()
This was added in 02d8f53246 ("[core] Increase resilience against
faulty parser implementions"). However, NumberFormatException is a
subclass of IllegalArgumentException, which is already catched by the
outermost catch.
2024-10-15 15:46:24 +02:00
Florian Schmaus
0ee5acc494 Remove usage of deprecated URL constructor
Although those URL constructors are only deprecated with Java 20, this
already removes their usage.
2024-10-15 15:45:47 +02:00
Florian Schmaus
8b9cd98756 [build-logic] Remove some isJavaXCompatible blocks
Since Smack requires now Java 11, all conditional code for lower Java
versions can be dropped from the build logic.
2024-10-15 13:27:56 +02:00
Florian Schmaus
d3de2d65b9 [xdata] Avoid NPE if form field's name is not set
Do not throw an NPE if an form field without a name, i.e., the 'var'
attribute, is received.

Thanks to Peter Kaul for reporting this.
2024-10-15 12:50:59 +02:00
Florian Schmaus
02d8f53246 [core] Increase resilience against faulty parser implementions
If one of the parser throws a NullPointerException or
NumberFormatException, then this should not lead to a disconnect due
to an unhandled exception. Instead wrap those in an exception that is
handled by the parsing exception callback and ask the user to fill a
bug report for those faulty parsers.

We may adjust the list of exceptions that are wrapped in the future.
2024-10-15 12:50:33 +02:00
Florian Schmaus
5dd08fc215 [android-extensions] Set RECEIVER_NOT_EXPORTED in ServerPingWithAlarmManager
Set RECEIVER_NOT_EXPORTED when registering the receiver in
ServerPingWithAlarmManager, as otherwise this will throw an exception
if the application targets Android API level 34 or higher.

This requires raising the minimum Android API level to 26 for
registerReceiver() with flags.
2024-10-15 12:45:18 +02:00
Florian Schmaus
072761a0ad [xmlparser-xpp3] Switch to codelibs version of xpp3
This version has javax.xml.namespace.QName removed, avoiding the
duplicate declaration conflict with QName from Java 11.
2024-10-15 12:43:09 +02:00
133 changed files with 534 additions and 363 deletions

View file

@ -56,7 +56,7 @@ jobs:
uses: android-actions/setup-android@v3
- name: Install Android SDK
run: |
sdkmanager "platforms;android-23"
sdkmanager "platforms;android-26"
# Testing
- name: Gradle Check

View file

@ -1,12 +1,12 @@
GRADLE ?= ./gradlew
.PHONY: all
all: check jacocoRootReport javadocAll sinttest
all: check codecov eclipse javadocAll sinttest
.PHONY: codecov
codecov:
$(GRADLE) smack-java11-full:testCodeCoverageReport
echo "Report available at smack-java11-full/build/reports/jacoco/testCodeCoverageReport/html/index.html"
echo "code coverage report available at file://$(PWD)/smack-java11-full/build/reports/jacoco/testCodeCoverageReport/html/index.html"
.PHONY: check
check:
@ -20,11 +20,7 @@ eclipse:
sinttest:
$(GRADLE) $@
.PHONY: jacocoRootReport
jacocoRootReport:
$(GRADLE) $@
.PHONY: javadocAll
javadocAll:
$(GRADLE) $@
echo "Smack javadoc available at build/javadoc/index.html"
echo "javadoc available at file://$(PWD)/build/javadoc/index.html"

View file

@ -3,7 +3,7 @@ plugins {
id 'org.igniterealtime.smack.global-conventions'
}
dependencies {
signature "net.sf.androidscents.signature:android-api-level-${smackMinAndroidSdk}:6.0_r3@signature"
signature "net.sf.androidscents.signature:android-api-level-${smackMinAndroidSdk}:8.0.0_r2@signature"
}
animalsniffer {
sourceSets = [sourceSets.main]

View file

@ -1,7 +1,7 @@
ext {
javaVersion = JavaVersion.VERSION_11
javaMajor = javaVersion.getMajorVersion()
smackMinAndroidSdk = 23
smackMinAndroidSdk = 26
androidBootClasspath = { getAndroidRuntimeJar() }
}

View file

@ -89,28 +89,7 @@ tasks.withType(JavaCompile) {
'-Xlint:-serial',
'-Werror',
]
}
if (JavaVersion.current().isJava8Compatible()) {
tasks.withType(Javadoc) {
// The '-quiet' as second argument is actually a hack,
// since the one parameter addStringOption doesn't seem to
// work, we extra add '-quiet', which is added anyway by
// gradle.
// We disable 'missing' as we do most of javadoc checking via checkstyle.
options.addStringOption('Xdoclint:all,-missing', '-quiet')
// Abort on javadoc warnings.
// See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
// for information about the -Xwerror option.
options.addStringOption('Xwerror', '-quiet')
}
}
if (JavaVersion.current().isJava9Compatible()) {
tasks.withType(JavaCompile) {
options.compilerArgs.addAll([
'--release', javaMajor,
])
}
options.release = Integer.valueOf(javaMajor)
}
jacoco {
@ -177,7 +156,7 @@ jar {
}
checkstyle {
toolVersion = '8.27'
toolVersion = '10.18.2'
if (project in gplLicensedProjects) {
configProperties.checkstyleLicenseHeader = "${project.name}-gplv3-license-header"
@ -344,17 +323,6 @@ def getGitCommit() {
gitCommit
}
def getAndroidRuntimeJar() {
def androidHome = new File("$System.env.ANDROID_HOME")
if (!androidHome.isDirectory()) throw new Exception("ANDROID_HOME not found or set")
def androidJar = new File("$androidHome/platforms/android-$smackMinAndroidSdk/android.jar")
if (androidJar.isFile()) {
return androidJar
} else {
throw new Exception("Can't find android.jar for $smackMinAndroidSdk API. Please install corresponding SDK platform package")
}
}
def readVersionFile() {
def versionFile = new File(rootDir, 'version')
if (!versionFile.isFile()) {

View file

@ -4,25 +4,19 @@ plugins {
id 'org.igniterealtime.smack.global-conventions'
}
if (JavaVersion.current().isJava8Compatible()) {
tasks.withType(Javadoc) {
// The '-quiet' as second argument is actually a hack,
// since the one parameter addStringOption doesn't seem to
// work, we extra add '-quiet', which is added anyway by
// gradle.
// We disable 'missing' as we do most of javadoc checking via checkstyle.
options.addStringOption('Xdoclint:all,-missing', '-quiet')
// Abort on javadoc warnings.
// See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
// for information about the -Xwerror option.
options.addStringOption('Xwerror', '-quiet')
}
}
if (JavaVersion.current().isJava9Compatible()) {
tasks.withType(Javadoc) {
options.addStringOption('-release', javaMajor)
}
tasks.withType(Javadoc) {
// The '-quiet' as second argument is actually a hack,
// since the one parameter addStringOption doesn't seem to
// work, we extra add '-quiet', which is added anyway by
// gradle.
// We disable 'missing' as we do most of javadoc checking via checkstyle.
options.addStringOption('Xdoclint:all,-missing', '-quiet')
// Abort on javadoc warnings.
// See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
// for information about the -Xwerror option.
options.addStringOption('Xwerror', '-quiet')
options.addStringOption('-release', javaMajor)
}
tasks.withType(Javadoc) {

View file

@ -104,7 +104,7 @@
</module>
<module name="JavadocMethod">
<!-- TODO stricten those checks -->
<property name="scope" value="protected"/>
<property name="accessModifiers" value="public,protected"/>
</module>
<module name="JavadocStyle">
<property name="scope" value="public"/>
@ -195,15 +195,15 @@
, TYPE_EXTENSION_AND
"/>
</module>
<module name="CustomImportOrder">
<property name="customImportOrderRules"
value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/>
<property name="specialImportsRegExp" value="^org\.jivesoftware\.smack"/>
<property name="sortImportsInGroupAlphabetically" value="true"/>
<property name="separateLineBetweenGroups" value="true"/>
<module name="ImportOrder">
<property name="groups" value="/^java\./,/^javax\./,/^org\.jivesoftware\.smack\./,/^org\.jivesoftware\.smackx\./,/^org\.igniterealtime\.smack\./,/^org\.igniterealtime\.smackx\./"/>
<property name="separated" value="true"/>
<property name="option" value="top"/>
</module>
<module name="MissingJavadocPackage"/>
<!-- this seems to cause false positives with checkstyle 10.18.2
<module name="UnnecessaryParentheses"/>
-->
<module name="UnnecessarySemicolonInEnumeration"/>
<module name="UnnecessarySemicolonInTryWithResources"/>
</module>

View file

@ -1,6 +1,8 @@
#Organize Import Order
#Wed Jun 14 16:42:40 CEST 2017
5=
7=
6=org.igniterealtime.smackx
5=org.igniterealtime.smack
4=org.jivesoftware.smackx
3=org.jivesoftware.smack
2=javax

View file

@ -28,6 +28,7 @@ import org.jivesoftware.smack.Manager;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.util.Async;
import org.jivesoftware.smackx.ping.PingManager;
import android.app.AlarmManager;
@ -173,7 +174,13 @@ public final class ServerPingWithAlarmManager extends Manager {
*/
public static void onCreate(Context context) {
sContext = context;
context.registerReceiver(ALARM_BROADCAST_RECEIVER, new IntentFilter(PING_ALARM_ACTION));
int receiverFlags = 0;
if (Build.VERSION.SDK_INT >= 34) {
receiverFlags |= 4; // RECEIVER_NOT_EXPORTED
}
context.registerReceiver(ALARM_BROADCAST_RECEIVER, new IntentFilter(PING_ALARM_ACTION), receiverFlags);
sAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
int pendingIntentFlags = 0;
if (Build.VERSION.SDK_INT >= 23) {

View file

@ -499,7 +499,7 @@ public class XMPPBOSHConnection extends AbstractXMPPConnection {
*
* @author Guenther Niess
*/
private class BOSHConnectionListener implements BOSHClientConnListener {
private final class BOSHConnectionListener implements BOSHClientConnListener {
/**
* Notify the BOSHConnection about connection state changes.
@ -556,7 +556,7 @@ public class XMPPBOSHConnection extends AbstractXMPPConnection {
*
* @author Guenther Niess
*/
private class BOSHPacketReader implements BOSHClientResponseListener {
private final class BOSHPacketReader implements BOSHClientResponseListener {
/**
* Parse the received packets and notify the corresponding connection.

View file

@ -281,8 +281,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
*/
protected Writer writer;
protected SmackException currentSmackException;
protected XMPPException currentXmppException;
private Exception currentConnectionException;
protected boolean tlsHandled;
@ -511,8 +510,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
public abstract boolean isUsingCompression();
protected void initState() {
currentSmackException = null;
currentXmppException = null;
currentConnectionException = null;
saslFeatureReceived = lastFeaturesReceived = tlsHandled = false;
// TODO: We do not init closingStreamReceived here, as the integration tests use it to check if we waited for
// it.
@ -686,28 +684,12 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
return streamId;
}
protected final void throwCurrentConnectionException() throws SmackException, XMPPException {
if (currentSmackException != null) {
throw currentSmackException;
} else if (currentXmppException != null) {
throw currentXmppException;
}
throw new AssertionError("No current connection exception set, although throwCurrentException() was called");
}
protected final boolean hasCurrentConnectionException() {
return currentSmackException != null || currentXmppException != null;
return currentConnectionException != null;
}
protected final void setCurrentConnectionExceptionAndNotify(Exception exception) {
if (exception instanceof SmackException) {
currentSmackException = (SmackException) exception;
} else if (exception instanceof XMPPException) {
currentXmppException = (XMPPException) exception;
} else {
currentSmackException = new SmackException.SmackWrappedException(exception);
}
currentConnectionException = exception;
notifyWaitingThreads();
}
@ -741,10 +723,12 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
return true;
}
protected final void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor) throws InterruptedException, SmackException, XMPPException {
protected final void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor)
throws InterruptedException, SmackException.SmackWrappedException, NoResponseException {
boolean success = waitFor(() -> condition.get().booleanValue() || hasCurrentConnectionException());
if (hasCurrentConnectionException()) {
throwCurrentConnectionException();
final Exception currentConnectionException = this.currentConnectionException;
if (currentConnectionException != null) {
throw new SmackException.SmackWrappedException(currentConnectionException);
}
// If there was no connection exception and we still did not successfully wait for the condition to hold, then
@ -1048,7 +1032,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
protected final boolean waitForClosingStreamTagFromServer() {
try {
waitForConditionOrThrowConnectionException(() -> closingStreamReceived, "closing stream tag from the server");
} catch (InterruptedException | SmackException | XMPPException e) {
} catch (InterruptedException | SmackException.SmackWrappedException | NoResponseException e) {
LOGGER.log(Level.INFO, "Exception while waiting for closing stream element from the server " + this, e);
return false;
}
@ -1460,7 +1444,14 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
int parserDepth = parser.getDepth();
Stanza stanza = null;
try {
stanza = PacketParserUtils.parseStanza(parser, incomingStreamXmlEnvironment);
try {
stanza = PacketParserUtils.parseStanza(parser, incomingStreamXmlEnvironment);
} catch (NullPointerException e) {
// Those exceptions should probably be wrapped into a SmackParsingException and therefore likely constitute a missing verification in the throwing parser.
String message = "Smack parser throw unexpected exception '" + e.getMessage() + "', please report this at " + Smack.BUG_REPORT_URL;
LOGGER.log(Level.SEVERE, message, e);
throw new IOException(message, e);
}
}
catch (XmlPullParserException | SmackParsingException | IOException | IllegalArgumentException e) {
CharSequence content = PacketParserUtils.parseContentDepth(parser,

View file

@ -1,6 +1,6 @@
/**
*
* Copyright 2020-2021 Florian Schmaus
* Copyright 2020-2024 Florian Schmaus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -17,6 +17,9 @@
package org.jivesoftware.smack;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.logging.Logger;
import org.jivesoftware.smack.util.FileUtils;
@ -29,6 +32,16 @@ public class Smack {
public static final String SMACK_PACKAGE = SMACK_ORG + ".smack";
public static final URL BUG_REPORT_URL;
static {
try {
BUG_REPORT_URL = URI.create("https://discourse.igniterealtime.org/c/smack/smack-support/9").toURL();
} catch (MalformedURLException e) {
throw new ExceptionInInitializerError(e);
}
}
/**
* Returns the Smack version information, e.g."1.3.0".
*

View file

@ -18,6 +18,7 @@
package org.jivesoftware.smack;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
@ -60,7 +61,7 @@ public final class SmackConfiguration {
static {
try {
SMACK_URL = new URL(SMACK_URL_STRING);
SMACK_URL = URI.create(SMACK_URL_STRING).toURL();
} catch (MalformedURLException e) {
throw new IllegalStateException(e);
}

View file

@ -164,7 +164,7 @@ public class SmackReactor {
return scheduledActions.remove(scheduledAction);
}
private class Reactor extends Thread {
private final class Reactor extends Thread {
private volatile long shutdownRequestTimestamp = -1;

View file

@ -117,7 +117,7 @@ public final class HttpLookupMethod {
*/
public static InputStream getXrdStream(DomainBareJid xmppServiceAddress) throws IOException {
final String metadataUrl = "https://" + xmppServiceAddress + "/.well-known/host-meta";
final URL putUrl = new URL(metadataUrl);
final URL putUrl = URI.create(metadataUrl).toURL();
final URLConnection urlConnection = putUrl.openConnection();
return urlConnection.getInputStream();
}

View file

@ -39,6 +39,7 @@ import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.SmackException.OutgoingQueueFullException;
import org.jivesoftware.smack.SmackException.SmackWrappedException;
import org.jivesoftware.smack.SmackFuture;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.XMPPException.FailedNonzaException;
@ -259,7 +260,7 @@ public final class ModularXmppClientToServerConnection extends AbstractXMPPConne
@Override
public void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor)
throws InterruptedException, SmackException, XMPPException {
throws InterruptedException, SmackWrappedException, NoResponseException {
ModularXmppClientToServerConnection.this.waitForConditionOrThrowConnectionException(condition, waitFor);
}
@ -596,8 +597,7 @@ public final class ModularXmppClientToServerConnection extends AbstractXMPPConne
case "error":
StreamError streamError = PacketParserUtils.parseStreamError(parser, null);
StreamErrorException streamErrorException = new StreamErrorException(streamError);
currentXmppException = streamErrorException;
notifyWaitingThreads();
setCurrentConnectionExceptionAndNotify(streamErrorException);
throw streamErrorException;
case "features":
parseFeatures(parser);
@ -1048,8 +1048,7 @@ public final class ModularXmppClientToServerConnection extends AbstractXMPPConne
XmppInputOutputFilter filter = it.next();
try {
filter.waitUntilInputOutputClosed();
} catch (IOException | CertificateException | InterruptedException | SmackException
| XMPPException e) {
} catch (IOException | CertificateException | InterruptedException | SmackException | XMPPException e) {
LOGGER.log(Level.WARNING, "waitUntilInputOutputClosed() threw", e);
}
}

View file

@ -26,6 +26,7 @@ import java.util.Queue;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.SmackException.SmackWrappedException;
import org.jivesoftware.smack.SmackReactor;
import org.jivesoftware.smack.SmackReactor.ChannelSelectedCallback;
import org.jivesoftware.smack.XMPPException;
@ -127,7 +128,8 @@ public abstract class ModularXmppClientToServerConnectionInternal {
public abstract void asyncGo(Runnable runnable);
public abstract void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor) throws InterruptedException, SmackException, XMPPException;
public abstract void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor)
throws InterruptedException, SmackWrappedException, NoResponseException;
public abstract void notifyWaitingThreads();

View file

@ -1,6 +1,6 @@
/**
*
* Copyright 2019-2021 Florian Schmaus
* Copyright 2019-2024 Florian Schmaus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -20,10 +20,15 @@ import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.text.ParseException;
import org.jivesoftware.smack.packet.Element;
import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.parsing.SmackParsingException.SmackUriSyntaxParsingException;
import org.jivesoftware.smack.xml.XmlPullParserException;
public class AbstractProvider<E extends Element> {
@ -106,4 +111,14 @@ public class AbstractProvider<E extends Element> {
return e;
}
public static URL toUrl(String string) throws SmackUriSyntaxParsingException, MalformedURLException {
URI uri;
try {
uri = new URI(string);
} catch (URISyntaxException e) {
throw new SmackUriSyntaxParsingException(e);
}
return uri.toURL();
}
}

View file

@ -87,7 +87,7 @@ public class EventManger<K, R, E extends Exception> {
return true;
}
private static class Reference<V> {
private static final class Reference<V> {
volatile V eventResult;
}

View file

@ -49,6 +49,7 @@ import org.jivesoftware.smackx.iot.provisioning.BecameFriendListener;
import org.jivesoftware.smackx.iot.provisioning.IoTProvisioningManager;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.BareJid;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;

View file

@ -1,6 +1,6 @@
/**
*
* Copyright 2021 Florian Schmaus
* Copyright 2021-2024 Florian Schmaus
*
* This file is part of smack-examples.
*
@ -25,7 +25,6 @@ import java.net.URISyntaxException;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnection;
import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnectionConfiguration;
import org.jivesoftware.smack.util.TLSUtils;

View file

@ -31,6 +31,7 @@ import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnection;
import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnectionConfiguration;
import org.jivesoftware.smack.debugger.ConsoleDebugger;
import org.jivesoftware.smack.debugger.SmackDebuggerFactory;
import org.jivesoftware.smackx.omemo.util.OmemoConstants;
import org.jivesoftware.smackx.pep.PepManager;
import org.jivesoftware.smackx.pubsub.PubSubManager;

View file

@ -37,6 +37,7 @@ import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import org.jivesoftware.smack.util.TLSUtils;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.iqregister.AccountManager;

View file

@ -32,6 +32,7 @@ import org.jivesoftware.smack.util.EqualsUtil;
import org.jivesoftware.smack.util.HashCode;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smackx.hashes.HashManager;
import org.jivesoftware.smackx.hashes.element.HashElement;
import org.jivesoftware.smackx.thumbnails.element.ThumbnailElement;

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.provider.ExtensionElementProvider;
import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.file_metadata.element.FileMetadataElement;
import org.jivesoftware.smackx.hashes.element.HashElement;
import org.jivesoftware.smackx.hashes.provider.HashElementProvider;

View file

@ -160,7 +160,7 @@ public abstract class AbstractHttpOverXmppProvider<H extends AbstractHttpOverXmp
while (!done) {
XmlPullParser.Event eventType = parser.next();
if ((eventType == XmlPullParser.Event.END_ELEMENT) && parser.getName().equals(ELEMENT_XML)) {
if (eventType == XmlPullParser.Event.END_ELEMENT && parser.getName().equals(ELEMENT_XML)) {
done = true;
} else { // just write everything else as text

View file

@ -1,6 +1,6 @@
/**
*
* Copyright © 2017 Grigory Fedorov, 2017-2019 Florian Schmaus
* Copyright © 2017 Grigory Fedorov, 2017-2024 Florian Schmaus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -17,12 +17,14 @@
package org.jivesoftware.smackx.httpfileupload.provider;
import java.io.IOException;
import java.net.URI;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.jivesoftware.smack.packet.IqData;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.parsing.SmackParsingException.SmackUriSyntaxParsingException;
import org.jivesoftware.smack.provider.IqProvider;
import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
@ -42,7 +44,7 @@ import org.jivesoftware.smackx.httpfileupload.element.Slot_V0_2;
public class SlotProvider extends IqProvider<Slot> {
@Override
public Slot parse(XmlPullParser parser, int initialDepth, IqData iqData, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException {
public Slot parse(XmlPullParser parser, int initialDepth, IqData iqData, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException, SmackUriSyntaxParsingException {
final String namespace = parser.getNamespace();
final UploadService.Version version = HttpFileUploadManager.namespaceToVersion(namespace);
@ -63,7 +65,7 @@ public class SlotProvider extends IqProvider<Slot> {
switch (version) {
case v0_2:
String putUrlString = parser.nextText();
putUrl = new URL(putUrlString);
putUrl = toUrl(putUrlString);
break;
case v0_3:
putElementV04Content = parsePutElement_V0_4(parser);
@ -85,7 +87,7 @@ public class SlotProvider extends IqProvider<Slot> {
default:
throw new AssertionError();
}
getUrl = new URL(getUrlString);
getUrl = toUrl(getUrlString);
break;
}
break;
@ -114,7 +116,7 @@ public class SlotProvider extends IqProvider<Slot> {
final int initialDepth = parser.getDepth();
String putUrlString = parser.getAttributeValue(null, "url");
URL putUrl = new URL(putUrlString);
URL putUrl = URI.create(putUrlString).toURL();
Map<String, String> headers = null;
outerloop: while (true) {

View file

@ -20,6 +20,7 @@ import java.util.List;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smackx.forward.packet.Forwarded;
import org.jivesoftware.smackx.rsm.packet.RSMSet;
import org.jivesoftware.smackx.xdata.packet.DataForm;

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.packet.MessageView;
import org.jivesoftware.smack.packet.XmlElement;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smackx.forward.packet.Forwarded;
import org.jxmpp.jid.Jid;

View file

@ -17,9 +17,11 @@
package org.jivesoftware.smackx.mam.element;
import java.util.List;
import javax.xml.namespace.QName;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.forward.packet.Forwarded;
import org.jivesoftware.smackx.rsm.packet.RSMSet;
import org.jivesoftware.smackx.xdata.packet.DataForm;

View file

@ -17,9 +17,11 @@
package org.jivesoftware.smackx.mam.element;
import java.util.List;
import javax.xml.namespace.QName;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.forward.packet.Forwarded;
import org.jivesoftware.smackx.rsm.packet.RSMSet;
import org.jivesoftware.smackx.xdata.packet.DataForm;

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.provider.ExtensionElementProvider;
import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.thumbnails.element.ThumbnailElement;
public class ThumbnailElementProvider extends ExtensionElementProvider<ThumbnailElement> {

View file

@ -26,6 +26,7 @@ import java.util.Date;
import org.jivesoftware.smack.test.util.SmackTestSuite;
import org.jivesoftware.smack.test.util.SmackTestUtil;
import org.jivesoftware.smackx.file_metadata.element.FileMetadataElement;
import org.jivesoftware.smackx.file_metadata.provider.FileMetadataElementProvider;
import org.jivesoftware.smackx.hashes.HashManager;

View file

@ -24,6 +24,7 @@ import java.io.IOException;
import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.test.util.SmackTestUtil;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.thumbnails.element.ThumbnailElement;
import org.junit.jupiter.params.ParameterizedTest;

View file

@ -461,7 +461,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* IQIBBInputStream class implements IBBInputStream to be used with IQ stanzas encapsulating the
* data packets.
*/
private class IQIBBInputStream extends IBBInputStream {
private final class IQIBBInputStream extends IBBInputStream {
@Override
protected StanzaListener getDataPacketListener() {
@ -541,7 +541,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* MessageIBBInputStream class implements IBBInputStream to be used with message stanzas
* encapsulating the data packets.
*/
private class MessageIBBInputStream extends IBBInputStream {
private final class MessageIBBInputStream extends IBBInputStream {
@Override
protected StanzaListener getDataPacketListener() {
@ -590,7 +590,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* containing an In-Band Bytestream data stanza extension whose session ID matches this sessions
* ID.
*/
private class IBBDataPacketFilter implements StanzaFilter {
private final class IBBDataPacketFilter implements StanzaFilter {
@Override
public boolean accept(Stanza packet) {
@ -814,7 +814,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* IQIBBOutputStream class implements IBBOutputStream to be used with IQ stanzas encapsulating
* the data packets.
*/
private class IQIBBOutputStream extends IBBOutputStream {
private final class IQIBBOutputStream extends IBBOutputStream {
@Override
protected synchronized void writeToXML(DataPacketExtension data) throws IOException {
@ -845,7 +845,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* MessageIBBOutputStream class implements IBBOutputStream to be used with message stanzas
* encapsulating the data packets.
*/
private class MessageIBBOutputStream extends IBBOutputStream {
private final class MessageIBBOutputStream extends IBBOutputStream {
@Override
protected synchronized void writeToXML(DataPacketExtension data) throws NotConnectedException, InterruptedException {

View file

@ -433,7 +433,7 @@ public class Socks5Proxy {
/**
* Implementation of a simplified SOCKS5 proxy server.
*/
private class Socks5ServerProcess implements Runnable {
private final class Socks5ServerProcess implements Runnable {
@Override
public void run() {

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData.Action;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData.AllowedAction;

View file

@ -22,6 +22,7 @@ import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.util.Objects;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData;
import org.jivesoftware.smackx.xdata.form.FillableForm;
import org.jivesoftware.smackx.xdata.form.SubmitForm;

View file

@ -20,6 +20,7 @@ import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData;
import org.jivesoftware.smackx.commands.packet.AdHocCommandDataBuilder;
import org.jivesoftware.smackx.xdata.form.SubmitForm;

View file

@ -17,6 +17,7 @@
package org.jivesoftware.smackx.commands;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData;
import org.jivesoftware.smackx.xdata.form.FillableForm;
import org.jivesoftware.smackx.xdata.packet.DataForm;

View file

@ -17,6 +17,7 @@
package org.jivesoftware.smackx.muc;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.muc.packet.GroupChatInvitation;
public interface DirectMucInvitationListener {

View file

@ -29,6 +29,7 @@ import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.StanzaExtensionFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.MessageBuilder;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.muc.packet.GroupChatInvitation;

View file

@ -18,10 +18,11 @@
package org.jivesoftware.smackx.muc;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
@ -215,9 +216,9 @@ public class RoomInfo {
if (urlField != null && !urlField.getValues().isEmpty()) {
String urlString = urlField.getFirstValue();
try {
logs = new URL(urlString);
} catch (MalformedURLException e) {
LOGGER.log(Level.SEVERE, "Could not parse</