mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-11-22 12:02:05 +01:00
Compare commits
26 commits
a8f16a1122
...
5e561f410a
Author | SHA1 | Date | |
---|---|---|---|
5e561f410a | |||
|
0561aaa9bc | ||
|
c696925d33 | ||
|
6c5e64b2ca | ||
|
6498ca796b | ||
|
74a7a2689e | ||
|
37a2df5486 | ||
|
75636884ad | ||
|
7e8fddcbf8 | ||
|
9c7e575e9e | ||
|
d7858d2e8f | ||
|
18647c24ca | ||
|
d67262a5e0 | ||
|
1eb5649123 | ||
|
0191ed7174 | ||
|
6e6a3ef88d | ||
|
9e5ac5a39a | ||
|
3c5fb5810e | ||
|
caa479fac4 | ||
|
3b0c2f752f | ||
|
0ee5acc494 | ||
|
8b9cd98756 | ||
|
d3de2d65b9 | ||
|
02d8f53246 | ||
|
5dd08fc215 | ||
|
072761a0ad |
123 changed files with 372 additions and 253 deletions
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
|
@ -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
|
||||
|
|
10
Makefile
10
Makefile
|
@ -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"
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
ext {
|
||||
javaVersion = JavaVersion.VERSION_11
|
||||
javaMajor = javaVersion.getMajorVersion()
|
||||
smackMinAndroidSdk = 23
|
||||
smackMinAndroidSdk = 26
|
||||
|
||||
androidBootClasspath = { getAndroidRuntimeJar() }
|
||||
}
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -4,8 +4,8 @@ plugins {
|
|||
id 'org.igniterealtime.smack.global-conventions'
|
||||
}
|
||||
|
||||
if (JavaVersion.current().isJava8Compatible()) {
|
||||
tasks.withType(Javadoc) {
|
||||
|
||||
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
|
||||
|
@ -16,13 +16,7 @@ if (JavaVersion.current().isJava8Compatible()) {
|
|||
// 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) {
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
@ -1459,8 +1443,15 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
|||
ParserUtils.assertAtStartTag(parser);
|
||||
int parserDepth = parser.getDepth();
|
||||
Stanza stanza = null;
|
||||
try {
|
||||
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,
|
||||
|
|
|
@ -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".
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 URL", e);
|
||||
logs = new URI(urlString).toURL();
|
||||
} catch (MalformedURLException | URISyntaxException e) {
|
||||
throw new IllegalArgumentException("Could not parse '" + urlString + "' to URL", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,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.muc.packet.GroupChatInvitation;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
|
|
|
@ -20,6 +20,7 @@ import java.util.List;
|
|||
|
||||
import org.jivesoftware.smack.util.EqualsUtil;
|
||||
import org.jivesoftware.smack.util.HashCode;
|
||||
|
||||
import org.jivesoftware.smackx.formtypes.FormFieldRegistry;
|
||||
import org.jivesoftware.smackx.mediaelement.element.MediaElement;
|
||||
import org.jivesoftware.smackx.xdata.FormField;
|
||||
|
|
|
@ -28,7 +28,7 @@ public interface FormFieldWithOptions {
|
|||
*/
|
||||
List<FormField.Option> getOptions();
|
||||
|
||||
public interface Builder<B extends FormField.Builder<?, ?>> {
|
||||
interface Builder<B extends FormField.Builder<?, ?>> {
|
||||
|
||||
default B addOption(String option) {
|
||||
return addOption(new FormField.Option(option));
|
||||
|
|
|
@ -29,6 +29,7 @@ import javax.xml.namespace.QName;
|
|||
|
||||
import org.jivesoftware.smack.packet.XmlEnvironment;
|
||||
import org.jivesoftware.smack.parsing.SmackParsingException;
|
||||
import org.jivesoftware.smack.parsing.SmackParsingException.RequiredValueMissingException;
|
||||
import org.jivesoftware.smack.provider.ExtensionElementProvider;
|
||||
import org.jivesoftware.smack.roster.packet.RosterPacket;
|
||||
import org.jivesoftware.smack.roster.provider.RosterPacketProvider;
|
||||
|
@ -185,10 +186,9 @@ public class DataFormProvider extends ExtensionElementProvider<DataForm> {
|
|||
FormField.Type type = null;
|
||||
{
|
||||
String fieldTypeString = parser.getAttributeValue("type");
|
||||
if (fieldTypeString != null) {
|
||||
// FormField.Type.fromString() will return null if its input is null.
|
||||
type = FormField.Type.fromString(fieldTypeString);
|
||||
}
|
||||
}
|
||||
|
||||
List<FormField.Value> values = new ArrayList<>();
|
||||
List<FormField.Option> options = new ArrayList<>();
|
||||
|
@ -238,6 +238,14 @@ public class DataFormProvider extends ExtensionElementProvider<DataForm> {
|
|||
}
|
||||
}
|
||||
|
||||
if (type != FormField.Type.fixed && fieldName == null) {
|
||||
String typeString = "unspecified";
|
||||
if (type != null) {
|
||||
typeString = type.toString();
|
||||
}
|
||||
throw new RequiredValueMissingException("The data form field of " + typeString + " type has no 'var' attribute, even though one is required as per XEP-0004 § 3.2");
|
||||
}
|
||||
|
||||
if (type == null) {
|
||||
// The field name 'FORM_TYPE' is magic.
|
||||
if (fieldName.equals(FormField.FORM_TYPE)) {
|
||||
|
|
|
@ -46,6 +46,7 @@ import org.jivesoftware.smack.packet.IQ;
|
|||
import org.jivesoftware.smack.packet.StanzaError;
|
||||
import org.jivesoftware.smack.test.util.NetworkUtil;
|
||||
import org.jivesoftware.smack.util.ExceptionUtil;
|
||||
|
||||
import org.jivesoftware.smackx.bytestreams.ibb.IBBPacketUtils;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream.StreamHost;
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.jivesoftware.smack.packet.EmptyResultIQ;
|
|||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.StanzaError;
|
||||
import org.jivesoftware.smack.util.CloseableUtil;
|
||||
|
||||
import org.jivesoftware.smackx.bytestreams.ibb.IBBPacketUtils;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream.StreamHost;
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.jivesoftware.smack.packet.Message;
|
|||
import org.jivesoftware.smack.packet.Stanza;
|
||||
import org.jivesoftware.smack.test.util.SmackTestSuite;
|
||||
import org.jivesoftware.smack.test.util.WaitForPacketListener;
|
||||
|
||||
import org.jivesoftware.smackx.muc.packet.GroupChatInvitation;
|
||||
import org.jivesoftware.smackx.muc.packet.MUCUser;
|
||||
import org.jivesoftware.smackx.muc.packet.MUCUser.Invite;
|
||||
|
|
|
@ -24,6 +24,7 @@ import java.io.IOException;
|
|||
import org.jivesoftware.smack.parsing.SmackParsingException;
|
||||
import org.jivesoftware.smack.test.util.TestUtils;
|
||||
import org.jivesoftware.smack.xml.XmlPullParserException;
|
||||
|
||||
import org.jivesoftware.smackx.muc.provider.GroupChatInvitationProvider;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
|
@ -96,7 +96,7 @@ public class DeliveryReceiptTest extends SmackTestSuite {
|
|||
rrl.waitUntilInvocationOrTimeout();
|
||||
}
|
||||
|
||||
private static class TestReceiptReceivedListener extends WaitForPacketListener implements ReceiptReceivedListener {
|
||||
private static final class TestReceiptReceivedListener extends WaitForPacketListener implements ReceiptReceivedListener {
|
||||
@Override
|
||||
public void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt) {
|
||||
assertThat("julia@capulet.com", equalsCharSequence(fromJid));
|
||||
|
|
|
@ -17,11 +17,13 @@
|
|||
package org.jivesoftware.smackx.xdata.provider;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import org.jivesoftware.smack.parsing.SmackParsingException;
|
||||
import org.jivesoftware.smack.test.util.SmackTestUtil;
|
||||
import org.jivesoftware.smack.util.PacketParserUtils;
|
||||
import org.jivesoftware.smack.xml.XmlPullParser;
|
||||
import org.jivesoftware.smack.xml.XmlPullParserException;
|
||||
|
@ -30,6 +32,8 @@ import org.jivesoftware.smackx.xdata.FormField;
|
|||
import org.jivesoftware.smackx.xdata.packet.DataForm;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.EnumSource;
|
||||
|
||||
public class DataFormProviderTest {
|
||||
|
||||
|
@ -144,4 +148,14 @@ public class DataFormProviderTest {
|
|||
assertEquals(FormField.Type.hidden, usernameFormField.getType());
|
||||
assertEquals("", usernameFormField.getLabel());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@EnumSource(SmackTestUtil.XmlPullParserKind.class)
|
||||
public void testShouldThrowSmackParsingException(SmackTestUtil.XmlPullParserKind parserKind) {
|
||||
String form = "<x xmlns='jabber:x:data' type='form'>"
|
||||
+ "<field/>"
|
||||
+ "</x>";
|
||||
SmackParsingException.RequiredValueMissingException exception = assertThrows(SmackParsingException.RequiredValueMissingException.class, () -> SmackTestUtil.parse(form, DataFormProvider.class, parserKind));
|
||||
assertEquals("The data form field of unspecified type has no 'var' attribute, even though one is required as per XEP-0004 § 3.2", exception.getMessage());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1557,6 +1557,9 @@ public final class Roster extends Manager {
|
|||
* Ignore ItemTypes as of RFC 6121, 2.1.2.5.
|
||||
*
|
||||
* This is used by {@link RosterPushListener} and {@link RosterResultListener}.
|
||||
*
|
||||
* @param item the roster item to check
|
||||
* @return <code>true</code> if the item type should be ignored
|
||||
* */
|
||||
private static boolean hasValidSubscriptionType(RosterPacket.Item item) {
|
||||
switch (item.getItemType()) {
|
||||
|
@ -1615,7 +1618,7 @@ public final class Roster extends Manager {
|
|||
/**
|
||||
* Listens for all presence packets and processes them.
|
||||
*/
|
||||
private class PresencePacketListener implements StanzaListener {
|
||||
private final class PresencePacketListener implements StanzaListener {
|
||||
|
||||
@Override
|
||||
public void processStanza(Stanza packet) throws NotConnectedException, InterruptedException {
|
||||
|
@ -1790,7 +1793,7 @@ public final class Roster extends Manager {
|
|||
/**
|
||||
* Handles Roster results as described in <a href="https://tools.ietf.org/html/rfc6121#section-2.1.4">RFC 6121 2.1.4</a>.
|
||||
*/
|
||||
private class RosterResultListener implements SuccessCallback<IQ> {
|
||||
private final class RosterResultListener implements SuccessCallback<IQ> {
|
||||
|
||||
@Override
|
||||
public void onSuccess(IQ packet) {
|
||||
|
|
|
@ -396,7 +396,7 @@ public class ChatConnectionTest {
|
|||
}
|
||||
}
|
||||
|
||||
private static class TestMessageListener implements ChatMessageListener {
|
||||
private static final class TestMessageListener implements ChatMessageListener {
|
||||
private Chat msgChat;
|
||||
private int counter = 0;
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ application {
|
|||
|
||||
dependencies {
|
||||
api project(':smack-java11-full')
|
||||
api project(':smack-websocket-okhttp')
|
||||
api project(':smack-resolver-dnsjava')
|
||||
implementation project(':smack-websocket-java11')
|
||||
implementation "com.google.guava:guava:${guavaVersion}"
|
||||
|
|
|
@ -44,6 +44,7 @@ import org.jivesoftware.smackx.jiveproperties.packet.JivePropertiesExtension;
|
|||
|
||||
import org.igniterealtime.smack.XmppConnectionStressTest.StressTestFailedException.ErrorsWhileSendingOrReceivingException;
|
||||
import org.igniterealtime.smack.XmppConnectionStressTest.StressTestFailedException.NotAllMessagesReceivedException;
|
||||
|
||||
import org.jxmpp.jid.EntityFullJid;
|
||||
|
||||
public class XmppConnectionStressTest {
|
||||
|
|
|
@ -392,12 +392,12 @@ public final class Configuration {
|
|||
}
|
||||
|
||||
public Builder setEnabledTests(String enabledTestsString) {
|
||||
enabledTests = getTestSetFrom(enabledTestsString);
|
||||
enabledTests = getTestSetFrom(enabledTestsString, "enabled");
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDisabledTests(String disabledTestsString) {
|
||||
disabledTests = getTestSetFrom(disabledTestsString);
|
||||
disabledTests = getTestSetFrom(disabledTestsString, "disabled");
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -625,7 +625,8 @@ public final class Configuration {
|
|||
return res;
|
||||
}
|
||||
|
||||
private static Set<String> getTestSetFrom(String input) {
|
||||
private static Set<String> getTestSetFrom(String input, String name) {
|
||||
StringUtils.requireNullOrNotEmpty(input, "Most provide a value for " + name + " tests");
|
||||
return split(input, s -> {
|
||||
s = s.trim();
|
||||
if (s.startsWith("smackx.") || s.startsWith("smack.")) {
|
||||
|
|
|
@ -74,6 +74,7 @@ import org.igniterealtime.smack.inttest.annotations.AfterClass;
|
|||
import org.igniterealtime.smack.inttest.annotations.BeforeClass;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
|
||||
import org.reflections.Reflections;
|
||||
import org.reflections.scanners.MethodAnnotationsScanner;
|
||||
import org.reflections.scanners.MethodParameterScanner;
|
||||
|
@ -150,8 +151,15 @@ public class SmackIntegrationTestFramework {
|
|||
LOGGER.info("SmackIntegrationTestFramework[" + testRunResult.testRunId + ']' + " finished: "
|
||||
+ successfulTests + '/' + availableTests + " [" + failedTests + " failed]");
|
||||
|
||||
if (failedTests > 0) {
|
||||
LOGGER.warning("💀 The following " + failedTests + " tests failed! 💀");
|
||||
if (failedTests == 0) {
|
||||
LOGGER.info("All possible Smack Integration Tests completed successfully. \\o/");
|
||||
return;
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder("💀 The following " + failedTests + " tests failed! 💀\n -");
|
||||
StringUtils.appendTo(testRunResult.failedIntegrationTests, "\n- ", sb, t -> sb.append(t.concreteTest));
|
||||
LOGGER.warning(sb.toString());
|
||||
|
||||
final SortedSet<String> bySpecification = new TreeSet<>();
|
||||
for (FailedTest failedTest : testRunResult.failedIntegrationTests) {
|
||||
final Throwable cause = failedTest.failureReason;
|
||||
|
@ -166,9 +174,6 @@ public class SmackIntegrationTestFramework {
|
|||
if (!bySpecification.isEmpty()) {
|
||||
LOGGER.log(Level.SEVERE, "The failed tests correspond to the following specifications:" + System.lineSeparator() + String.join(System.lineSeparator(), bySpecification));
|
||||
}
|
||||
} else {
|
||||
LOGGER.info("All possible Smack Integration Tests completed successfully. \\o/");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -47,11 +47,13 @@ import org.jivesoftware.smack.util.MultiMap;
|
|||
import org.jivesoftware.smack.util.StringUtils;
|
||||
import org.jivesoftware.smack.websocket.java11.Java11WebSocketFactory;
|
||||
import org.jivesoftware.smack.websocket.okhttp.OkHttpWebSocketFactory;
|
||||
|
||||
import org.jivesoftware.smackx.admin.ServiceAdministrationManager;
|
||||
import org.jivesoftware.smackx.iqregister.AccountManager;
|
||||
|
||||
import org.igniterealtime.smack.inttest.Configuration.AccountRegistration;
|
||||
import org.igniterealtime.smack.inttest.SmackIntegrationTestFramework.AccountNum;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
import org.jxmpp.jid.parts.Localpart;
|
||||
|
|
|
@ -32,6 +32,7 @@ import org.igniterealtime.smack.inttest.AbstractSmackSpecificLowLevelIntegration
|
|||
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
||||
import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
|
||||
import org.jxmpp.jid.EntityFullJid;
|
||||
|
||||
public class StreamManagementTest extends AbstractSmackSpecificLowLevelIntegrationTest<XMPPTCPConnection> {
|
||||
|
|
|
@ -22,6 +22,7 @@ import org.jivesoftware.smack.util.StringUtils;
|
|||
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
|
||||
public class IncomingMessageListenerIntegrationTest extends AbstractChatIntegrationTest {
|
||||
|
|
|
@ -23,6 +23,7 @@ import org.jivesoftware.smack.util.StringUtils;
|
|||
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
|
||||
public class OutgoingMessageListenerIntegrationTest extends AbstractChatIntegrationTest {
|
||||
|
|
|
@ -26,6 +26,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
|||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.FullJid;
|
||||
|
||||
public class LowLevelRosterIntegrationTest extends AbstractSmackLowLevelIntegrationTest {
|
||||
|
|
|
@ -40,6 +40,7 @@ import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
|||
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
|
||||
import org.igniterealtime.smack.inttest.util.ResultSyncPoint;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.BareJid;
|
||||
import org.jxmpp.jid.Jid;
|
||||
|
||||
|
|
|
@ -24,6 +24,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.commands.packet.AdHocCommandDataBuilder.NextStage;
|
||||
|
|
|
@ -26,6 +26,7 @@ import java.util.Arrays;
|
|||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
|
||||
import org.jivesoftware.smackx.filetransfer.FileTransfer.Status;
|
||||
|
||||
import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest;
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
|||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.util.XmppDateTime;
|
||||
|
||||
@SpecificationReference(document = "XEP-0080", version = "1.9")
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
|||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.Jid;
|
||||
|
||||
@SpecificationReference(document = "XEP-0347", version = "0.5.1")
|
||||
|
|
|
@ -35,6 +35,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
|||
import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
|
||||
import org.jxmpp.jid.Jid;
|
||||
|
||||
@SpecificationReference(document = "XEP-0347", version = "0.5.1")
|
||||
|
|
|
@ -35,6 +35,7 @@ import org.jivesoftware.smack.packet.Message;
|
|||
import org.jivesoftware.smack.packet.Stanza;
|
||||
import org.jivesoftware.smack.packet.StanzaBuilder;
|
||||
import org.jivesoftware.smack.packet.StanzaError;
|
||||
|
||||
import org.jivesoftware.smackx.mam.MamManager.MamQuery;
|
||||
import org.jivesoftware.smackx.mam.MamManager.MamQueryArgs;
|
||||
|
||||
|
@ -44,6 +45,7 @@ import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
|||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
|
||||
@SpecificationReference(document = "XEP-0313", version = "0.6.3")
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.jivesoftware.smack.XMPPException;
|
|||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
import org.jivesoftware.smack.packet.StanzaError;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MissingMucCreationAcknowledgeException;
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MucAlreadyJoinedException;
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.NotAMucServiceException;
|
||||
|
@ -34,6 +35,7 @@ import org.jivesoftware.smackx.xdata.form.Form;
|
|||
import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
||||
import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
||||
|
||||
import org.jxmpp.jid.DomainBareJid;
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
|
@ -105,7 +107,7 @@ public abstract class AbstractMultiUserChatIntegrationTest extends AbstractSmack
|
|||
* @throws XmppStringprepException if the prefix isn't a valid XMPP Localpart
|
||||
*/
|
||||
public EntityBareJid getRandomRoom(String prefix) throws XmppStringprepException {
|
||||
final String roomNameLocal = String.join("-", prefix, testRunId, StringUtils.insecureRandomString(6));
|
||||
final String roomNameLocal = String.join("-", "sinttest", prefix, testRunId, StringUtils.insecureRandomString(3));
|
||||
return JidCreate.entityBareFrom(Localpart.from(roomNameLocal), mucService.getDomain());
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import java.util.Map;
|
|||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.packet.StanzaError;
|
||||
|
||||
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
|
||||
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
|
||||
import org.jivesoftware.smackx.disco.packet.DiscoverItems;
|
||||
|
@ -97,7 +98,7 @@ public class MultiUserChatEntityIntegrationTest extends AbstractMultiUserChatInt
|
|||
"service. The service SHOULD return a full list of the public rooms it hosts (i.e., not return any rooms that" +
|
||||
"are hidden).")
|
||||
public void mucTestForDiscoveringRooms() throws Exception {
|
||||
EntityBareJid mucAddressPublic = getRandomRoom("smack-inttest-publicroom");
|
||||
EntityBareJid mucAddressPublic = getRandomRoom("publicroom");
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddressPublic);
|
||||
|
||||
EntityBareJid mucAddressHidden = getRandomRoom("smack-inttest-hiddenroom");
|
||||
|
@ -127,7 +128,7 @@ public class MultiUserChatEntityIntegrationTest extends AbstractMultiUserChatInt
|
|||
"Using the disco#info protocol, an entity may also query a specific chat room for more detailed information " +
|
||||
"about the room....The room MUST return its identity and SHOULD return the features it supports")
|
||||
public void mucTestForDiscoveringRoomInfo() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-discoinfo");
|
||||
EntityBareJid mucAddress = getRandomRoom("discoinfo");
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
createMuc(mucAsSeenByOne, Resourcepart.from("one-" + randomString));
|
||||
|
||||
|
@ -154,7 +155,7 @@ public class MultiUserChatEntityIntegrationTest extends AbstractMultiUserChatInt
|
|||
"of existing occupants if that information is publicly available, or return no list at all if this " +
|
||||
"information is kept private.")
|
||||
public void mucTestForDiscoveringRoomItems() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-discoitems");
|
||||
EntityBareJid mucAddress = getRandomRoom("discoitems");
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
createMuc(mucAsSeenByOne, Resourcepart.from("one-" + randomString));
|
||||
|
||||
|
@ -178,7 +179,7 @@ public class MultiUserChatEntityIntegrationTest extends AbstractMultiUserChatInt
|
|||
"If a non-occupant attempts to send a disco request to an address of the form <room@service/nick>, a MUC " +
|
||||
"service MUST return a <bad-request> error")
|
||||
public void mucTestForRejectingDiscoOnRoomOccupantByNonOccupant() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-discoitems");
|
||||
EntityBareJid mucAddress = getRandomRoom("discoitems");
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
final Resourcepart nicknameOne = Resourcepart.from("one-" + randomString);
|
||||
createMuc(mucAsSeenByOne, nicknameOne);
|
||||
|
|
|
@ -32,6 +32,7 @@ import org.jivesoftware.smack.XMPPException;
|
|||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smack.packet.StanzaError;
|
||||
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MissingMucCreationAcknowledgeException;
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MucAlreadyJoinedException;
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MucConfigurationNotSupportedException;
|
||||
|
@ -42,6 +43,7 @@ import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
|||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
import org.jxmpp.jid.parts.Resourcepart;
|
||||
import org.jxmpp.stringprep.XmppStringprepException;
|
||||
|
@ -57,7 +59,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
|
|||
|
||||
@SmackIntegrationTest
|
||||
public void mucTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-message");
|
||||
EntityBareJid mucAddress = getRandomRoom("message");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -98,7 +100,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
|
|||
"users from the room... and destroys the room")
|
||||
public void mucDestroyOwnerTest() throws TimeoutException, Exception {
|
||||
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-destroy-owner");
|
||||
EntityBareJid mucAddress = getRandomRoom("destroy-owner");
|
||||
|
||||
MultiUserChat muc = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
createMuc(muc, Resourcepart.from("one-" + randomString));
|
||||
|
@ -145,7 +147,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
|
|||
"users from the room... and destroys the room")
|
||||
public void mucDestroyTestOccupant() throws TimeoutException, Exception {
|
||||
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-destroy-occupant");
|
||||
EntityBareJid mucAddress = getRandomRoom("destroy-occupant");
|
||||
|
||||
MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByParticipant = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -189,7 +191,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
|
|||
throws XmppStringprepException, MucAlreadyJoinedException, MissingMucCreationAcknowledgeException,
|
||||
NotAMucServiceException, NoResponseException, XMPPErrorException, NotConnectedException,
|
||||
InterruptedException, MucConfigurationNotSupportedException {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-muc-name-change");
|
||||
EntityBareJid mucAddress = getRandomRoom("muc-name-change");
|
||||
|
||||
MultiUserChat muc = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
createMuc(muc, Resourcepart.from("one-" + randomString));
|
||||
|
@ -214,7 +216,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
|
|||
public void mucTestVisitorNotAllowedToChangeSubject() throws XmppStringprepException, MucAlreadyJoinedException,
|
||||
MissingMucCreationAcknowledgeException, NotAMucServiceException, NoResponseException,
|
||||
XMPPErrorException, NotConnectedException, InterruptedException, TestNotPossibleException {
|
||||
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-visitor-change-subject");
|
||||
final EntityBareJid mucAddress = getRandomRoom("visitor-change-subject");
|
||||
final MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
final MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
||||
|
@ -250,7 +252,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
|
|||
public void mucTestChangeRoomName() throws XmppStringprepException, MucAlreadyJoinedException,
|
||||
MissingMucCreationAcknowledgeException, NotAMucServiceException, NoResponseException,
|
||||
XMPPErrorException, NotConnectedException, InterruptedException, TestNotPossibleException {
|
||||
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-change-room-name");
|
||||
final EntityBareJid mucAddress = getRandomRoom("change-room-name");
|
||||
final MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
final Resourcepart nicknameOne = Resourcepart.from("one-" + randomString);
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
|||
import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
|
||||
import org.jxmpp.jid.DomainBareJid;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
import org.jxmpp.jid.parts.Localpart;
|
||||
|
|
|
@ -41,6 +41,7 @@ import org.jivesoftware.smack.packet.Stanza;
|
|||
import org.jivesoftware.smack.packet.StanzaError;
|
||||
import org.jivesoftware.smack.sm.predicates.ForEveryMessage;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MissingMucCreationAcknowledgeException;
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MucAlreadyJoinedException;
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MucConfigurationNotSupportedException;
|
||||
|
@ -49,6 +50,7 @@ import org.jivesoftware.smackx.muc.packet.MUCItem;
|
|||
import org.jivesoftware.smackx.muc.packet.MUCUser;
|
||||
|
||||
import org.igniterealtime.smack.inttest.Configuration;
|
||||
import org.igniterealtime.smack.inttest.Configuration.CompatibilityMode;
|
||||
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
||||
import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
|
@ -56,6 +58,7 @@ import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
|||
import org.igniterealtime.smack.inttest.util.MultiResultSyncPoint;
|
||||
import org.igniterealtime.smack.inttest.util.ResultSyncPoint;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
import org.jxmpp.jid.parts.Resourcepart;
|
||||
|
@ -83,7 +86,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
// stanzas arrive. Instead, it joins a chatroom and listens for its stanzas using basic stanza handling. As
|
||||
// this uses exactly one stanza listener, that's guaranteed to be invoked in order of stanza arrival, which is
|
||||
// not necessarily the case when using the MUC API.
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-eventordering");
|
||||
EntityBareJid mucAddress = getRandomRoom("eventordering");
|
||||
final String mucSubject = "Subject smack-inttest-eventordering " + randomString;
|
||||
final String mucMessage = "Message smack-inttest-eventordering " + randomString;
|
||||
|
||||
|
@ -114,8 +117,13 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
final List<Stanza> results = new ArrayList<>();
|
||||
final StanzaListener stanzaListener = stanza -> {
|
||||
results.add(stanza);
|
||||
if (stanza instanceof Message && ((Message) stanza).getSubject() != null) {
|
||||
subjectResultSyncPoint.signal(((Message) stanza).getSubject());
|
||||
// TODO: Use pattern matching for instanceof once Smack is Java 16 or higher.
|
||||
if (stanza instanceof Message) {
|
||||
Message message = (Message) stanza;
|
||||
String subject = message.getSubject();
|
||||
if (subject != null) {
|
||||
subjectResultSyncPoint.signal(subject);
|
||||
}
|
||||
}
|
||||
};
|
||||
conTwo.addStanzaListener(stanzaListener, FromMatchesFilter.create(mucAddress));
|
||||
|
@ -125,7 +133,12 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
|
||||
subjectResultSyncPoint.waitForResult(timeout); // Wait for subject, as it should be 4th (last)
|
||||
|
||||
assertEquals(4, results.size(), "Unexpected amount of stanzas received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "'.");
|
||||
if (sinttestConfiguration.compatibilityMode == CompatibilityMode.ejabberd) {
|
||||
// ejabberd MUCs also send their own presence with caps information as very first presence.
|
||||
results.remove(0);
|
||||
}
|
||||
|
||||
assertEquals(4, results.size(), "Unexpected amount of stanzas received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "'. Results: " + results);
|
||||
assertTrue(results.get(0) instanceof Presence, "Expected the first stanza that was received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "' to be a presence stanza (but it was not).");
|
||||
assertEquals(JidCreate.fullFrom(mucAddress, nicknameOne), results.get(0).getFrom(), "Unexpected 'from' address of the first stanza that was received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "'.");
|
||||
assertTrue(results.get(1) instanceof Presence, "Expected the second stanza that was received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "' to be a presence stanza (but it was not).");
|
||||
|
@ -162,7 +175,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"§ 7.2.1: In order to participate in the discussions held in a multi-user chat room, a user MUST first become an occupant by entering the room [...] " +
|
||||
"§ 7.4: If the sender is not an occupant of the room, the service SHOULD return a <not-acceptable/> error to the sender and SHOULD NOT reflect the message to all occupants")
|
||||
public void mucSendBeforeJoiningTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-send-without-joining");
|
||||
EntityBareJid mucAddress = getRandomRoom("send-without-joining");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -202,7 +215,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"complete list of the existing occupants to the new occupant and only then send the new occupant's own " +
|
||||
"presence to the new occupant.")
|
||||
public void mucJoinPresenceInformationTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-presenceinfo");
|
||||
EntityBareJid mucAddress = getRandomRoom("presenceinfo");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -261,7 +274,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"the service MUST also send presence from the new participant's occupant JID to the full JIDs of all the " +
|
||||
"occupants (including the new occupant)")
|
||||
public void mucJoinPresenceBroadcastTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-presenceinfo");
|
||||
EntityBareJid mucAddress = getRandomRoom("presenceinfo");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -320,7 +333,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"full JID as shown above), the service MUST warn the user by including a status code of \"100\" in the " +
|
||||
"initial presence that the room sends to the new occupant.")
|
||||
public void mucJoinNonAnonymousRoomTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-joinnonanonymousroom");
|
||||
EntityBareJid mucAddress = getRandomRoom("joinnonanonymousroom");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -377,7 +390,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"option), but MUST include the new occupant's full JID only in the presence notifications it sends to " +
|
||||
"occupants with a role of \"moderator\" and not to non-moderator occupants.")
|
||||
public void mucJoinSemiAnonymousRoomReceivedByNonModeratorTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-seminanonymous-by-non-moderator");
|
||||
EntityBareJid mucAddress = getRandomRoom("seminanonymous-by-non-moderator");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -423,7 +436,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"option), but MUST include the new occupant's full JID only in the presence notifications it sends to " +
|
||||
"occupants with a role of \"moderator\" and not to non-moderator occupants.")
|
||||
public void mucJoinSemiAnonymousRoomReceivedByModeratorTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-seminanonymous-by-moderator");
|
||||
EntityBareJid mucAddress = getRandomRoom("seminanonymous-by-moderator");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -467,7 +480,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"service MUST deny access to the room and inform the user that they are unauthorized; this is done by returning " +
|
||||
"a presence stanza of type \"error\" specifying a <not-authorized/> error.")
|
||||
public void mucJoinPasswordProtectedWithoutPasswordRoomTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-enterpasswordprotectedroom");
|
||||
EntityBareJid mucAddress = getRandomRoom("enterpasswordprotectedroom");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -503,7 +516,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"service MUST deny access to the room and inform the user that they are unauthorized; this is done by returning " +
|
||||
"a presence stanza of type \"error\" specifying a <not-authorized/> error.")
|
||||
public void mucJoinPasswordProtectedRoomWrongPasswordTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-enterpasswordprotectedroom");
|
||||
EntityBareJid mucAddress = getRandomRoom("enterpasswordprotectedroom");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -540,7 +553,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"service MUST deny access to the room and inform the user that they are unauthorized; this is done by returning " +
|
||||
"a presence stanza of type \"error\" specifying a <not-authorized/> error.")
|
||||
public void mucJoinPasswordProtectedRoomCorrectPasswordTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-enterpasswordprotectedroom");
|
||||
EntityBareJid mucAddress = getRandomRoom("enterpasswordprotectedroom");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -582,7 +595,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"room and inform the user that they are not allowed to enter the room; this is done by returning a presence " +
|
||||
"stanza of type \"error\" specifying a <registration-required/> error condition.")
|
||||
public void mucJoinMembersOnlyRoomTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-entermembersonlyroom");
|
||||
EntityBareJid mucAddress = getRandomRoom("entermembersonlyroom");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -620,7 +633,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"access to the room and inform the user of the fact that they are banned; this is done by returning a presence " +
|
||||
"stanza of type \"error\" specifying a <forbidden/> error condition.")
|
||||
public void mucBannedUserJoinRoomTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-banneduser");
|
||||
EntityBareJid mucAddress = getRandomRoom("banneduser");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -656,7 +669,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"room and inform the user of the conflict; this is done by returning a presence stanza of type \"error\" " +
|
||||
"specifying a <conflict/> error condition.")
|
||||
public void mucNicknameConflictJoinRoomTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-nicknameclash");
|
||||
EntityBareJid mucAddress = getRandomRoom("nicknameclash");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -690,7 +703,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"specifying a <service-unavailable/> error condition. Alternatively, the room could kick an \"idle user\" " +
|
||||
"in order to free up space (where the definition of \"idle user\" is up to the implementation).")
|
||||
public void mucMaxUsersLimitJoinRoomTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-maxusersreached");
|
||||
EntityBareJid mucAddress = getRandomRoom("maxusersreached");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -769,7 +782,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"room MUST allow the admin or owner to join, up to some reasonable number of additional occupants; this " +
|
||||
"helps to prevent denial of service attacks caused by stuffing the room with non-admin users.")
|
||||
public void mucMaxUsersLimitAdminCanStillJoinRoomTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-maxusersreached-adminjoin");
|
||||
EntityBareJid mucAddress = getRandomRoom("maxusersreached-adminjoin");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -821,7 +834,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"room MUST allow the admin or owner to join, up to some reasonable number of additional occupants; this " +
|
||||
"helps to prevent denial of service attacks caused by stuffing the room with non-admin users.")
|
||||
public void mucMaxUsersLimitOwnerCanStillJoinRoomTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-maxusersreached-ownerjoin");
|
||||
EntityBareJid mucAddress = getRandomRoom("maxusersreached-ownerjoin");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -878,7 +891,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
throw new TestNotPossibleException("ejabberd does not implement MUC locked rooms as per XEP-0045 § 7.2.10");
|
||||
}
|
||||
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-lockedroom");
|
||||
EntityBareJid mucAddress = getRandomRoom("lockedroom");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -915,7 +928,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"discussions are logged. This is done by including a status code of \"170\" in the initial presence that the " +
|
||||
"room sends to the new occupant.")
|
||||
public void mucJoinRoomWithPublicLoggingTest() throws Exception {
|
||||
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-publiclogging");
|
||||
final EntityBareJid mucAddress = getRandomRoom("publiclogging");
|
||||
|
||||
final MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
final MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -956,7 +969,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"case, nick='oldhag') - A status code of 303 This enables the recipients to correlate the old roomnick with " +
|
||||
"the new roomnick.\n")
|
||||
public void mucChangeNicknameInformationTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-changenickname");
|
||||
EntityBareJid mucAddress = getRandomRoom("changenickname");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -1051,7 +1064,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"service MUST deny the nickname change request and inform the user of the conflict; this is done by " +
|
||||
"returning a presence stanza of type \"error\" specifying a <conflict/> error condition:")
|
||||
public void mucBlockChangeNicknameInformationTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-blockchangenickname");
|
||||
EntityBareJid mucAddress = getRandomRoom("blockchangenickname");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -1096,7 +1109,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
|
|||
"JID to the departing occupant's full JIDs, including a status code of \"110\" to indicate that this " +
|
||||
"notification is \"self-presence\"")
|
||||
public void mucLeaveTest() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-leave");
|
||||
EntityBareJid mucAddress = getRandomRoom("leave");
|
||||
|
||||
MultiUserChat muc = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
try {
|
||||
|
|
|
@ -32,6 +32,7 @@ import java.util.stream.Collectors;
|
|||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.packet.Presence;
|
||||
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MissingMucCreationAcknowledgeException;
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.MucAlreadyJoinedException;
|
||||
import org.jivesoftware.smackx.muc.MultiUserChatException.NotAMucServiceException;
|
||||
|
@ -43,6 +44,7 @@ import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
|||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
import org.igniterealtime.smack.inttest.util.ResultSyncPoint;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
import org.jxmpp.jid.EntityFullJid;
|
||||
import org.jxmpp.jid.Jid;
|
||||
|
@ -70,7 +72,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"communicate the change to all occupants [...] (§ 9.6) The service MUST then send updated presence from this " +
|
||||
"individual to all occupants, indicating the addition of moderator status...")
|
||||
public void mucRoleTestForReceivingModerator() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -109,7 +111,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"communicate the change to all occupants [...] (§ 9.6) The service MUST then send updated presence from this " +
|
||||
"individual to all occupants, indicating the addition of moderator status...")
|
||||
public void mucRoleTestForWitnessingModerator() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -150,7 +152,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"communicate the change to all occupants [...] (§ 9.7) The service MUST then send updated presence from this " +
|
||||
"individual to all occupants, indicating the removal of moderator status...")
|
||||
public void mucRoleTestForRemovingModerator() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -188,7 +190,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"communicate the change to all occupants [...] (§ 9.7) The service MUST then send updated presence from this " +
|
||||
"individual to all occupants, indicating the removal of moderator status...")
|
||||
public void mucRoleTestForWitnessingModeratorRemoval() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -228,7 +230,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"communicate the change to all occupants [...] (§ 8.4) The service MUST then send updated presence from " +
|
||||
"this individual to all occupants, indicating the removal of voice privileges...")
|
||||
public void mucRoleTestForRevokingVoice() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -263,7 +265,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"communicate the change to all occupants [...] (§ 8.4) The service MUST then send updated presence from " +
|
||||
"this individual to all occupants, indicating the removal of voice privileges...")
|
||||
public void mucRoleTestForWitnessingRevokingVoice() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -302,7 +304,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"communicate that to all occupants [...] (§ 10.6) If the user is in the room, the service MUST then send " +
|
||||
"updated presence from this individual to all occupants, indicating the granting of admin status...")
|
||||
public void mucAffiliationTestForReceivingAdmin() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -341,7 +343,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"communicate that to all occupants [...] (§ 10.6) If the user is in the room, the service MUST then send " +
|
||||
"updated presence from this individual to all occupants, indicating the granting of admin status...")
|
||||
public void mucAffiliationTestForWitnessingAdmin() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -381,7 +383,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"updated presence from this individual to all occupants, indicating the loss of admin status by sending a " +
|
||||
"presence element...")
|
||||
public void mucAffiliationTestForRemovingAdmin() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -431,7 +433,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"updated presence from this individual to all occupants, indicating the loss of admin status by sending a " +
|
||||
"presence element...")
|
||||
public void mucAffiliationTestForWitnessingAdminRemoval() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -473,7 +475,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"presence information, optionally along with the reason (if provided) and the roomnick or bare JID of the " +
|
||||
"user who initiated the kick.")
|
||||
public void mucPresenceTestForGettingKicked() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -517,7 +519,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"(<room@service/nick>) to all the remaining occupants (just as it does when occupants exit the room of their " +
|
||||
"own volition), including the status code and optionally the reason and actor.")
|
||||
public void mucPresenceTestForWitnessingKick() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -564,7 +566,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"affected by happenings in the room...Affiliations are granted, revoked, and maintained based on the user's " +
|
||||
"bare JID, not the nick as with roles.")
|
||||
public void mucTestPersistentAffiliation() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -605,7 +607,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"moderator attempts to revoke voice privileges from such a user, the service MUST deny the request and return " +
|
||||
"a <not-allowed/> error to the sender along with the offending item(s)")
|
||||
public void mucTestModeratorCannotRevokeVoiceFromOwner() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -637,7 +639,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
"than themselves (i.e., an unaffiliated moderator SHOULD NOT be allowed to revoke moderation privileges from " +
|
||||
"an admin or an owner, and an admin SHOULD NOT be allowed to revoke moderation privileges from an owner)")
|
||||
public void mucTestModeratorCannotBeRevokedFromHigherAffiliation() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
|
||||
EntityBareJid mucAddress = getRandomRoom("inttest");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -683,7 +685,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
@SmackIntegrationTest(section = "5.1.2", quote =
|
||||
"...the initial default roles that a service SHOULD set based on the user's affiliation...")
|
||||
public void mucTestDefaultRoleForAffiliationInUnmoderatedRoom() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-unmoderatedroles");
|
||||
EntityBareJid mucAddress = getRandomRoom("unmoderatedroles");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -736,7 +738,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
@SmackIntegrationTest(section = "5.1.2", quote =
|
||||
"...the initial default roles that a service SHOULD set based on the user's affiliation...")
|
||||
public void mucTestDefaultRoleForAffiliationInModeratedRoom() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-moderatedroles");
|
||||
EntityBareJid mucAddress = getRandomRoom("moderatedroles");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
@ -799,7 +801,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
|
|||
@SmackIntegrationTest(section = "5.1.2", quote =
|
||||
"...the initial default roles that a service SHOULD set based on the user's affiliation...")
|
||||
public void mucTestDefaultRoleForAffiliationInMembersOnlyRoom() throws Exception {
|
||||
EntityBareJid mucAddress = getRandomRoom("smack-inttest-membersonlyroles");
|
||||
EntityBareJid mucAddress = getRandomRoom("membersonlyroles");
|
||||
|
||||
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
|
|
@ -24,6 +24,7 @@ import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
|||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
import org.jxmpp.jid.EntityFullJid;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
|
@ -48,7 +49,7 @@ public class ParticipantStatusIntegrationTest extends AbstractMultiUserChatInteg
|
|||
@SmackIntegrationTest(section = "9.4", quote = "An admin might want to revoke a user's membership [...] The service MUST then send updated presence from this individual to all occupants, indicating the loss of membership by sending a presence element that contains an <x/> element qualified by the 'http://jabber.org/protocol/muc#user' namespace and containing an <item/> child with the 'affiliation' attribute set to a value of \"none\".")
|
||||
public void testMembershipRevokedInOpenRoom() throws Exception {
|
||||
// Setup test fixture.
|
||||
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-participantstatus-membership-revoked-open");
|
||||
final EntityBareJid mucAddress = getRandomRoom("participantstatus-membership-revoked-open");
|
||||
final MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
final MultiUserChat mucAsSeenByTarget = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
||||
|
@ -89,7 +90,7 @@ public class ParticipantStatusIntegrationTest extends AbstractMultiUserChatInteg
|
|||
@SmackIntegrationTest(section = "9.4", quote = "An admin might want to revoke a user's membership [...] If the room is members-only, the service MUST remove the user from the room, including a status code of 321 to indicate that the user was removed because of an affiliation change, and inform all remaining occupants")
|
||||
public void testMembershipRevokedInMemberOnlyRoom() throws Exception {
|
||||
// Setup test fixture.
|
||||
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-participantstatus-membership-revoked-membersonly");
|
||||
final EntityBareJid mucAddress = getRandomRoom("participantstatus-membership-revoked-membersonly");
|
||||
final MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
final MultiUserChat mucAsSeenByTarget = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ package org.jivesoftware.smackx.muc;
|
|||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.packet.Presence;
|
||||
|
||||
import org.jivesoftware.smackx.muc.packet.MUCUser;
|
||||
|
||||
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
||||
|
@ -26,6 +27,7 @@ import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
|||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.jxmpp.jid.EntityBareJid;
|
||||
import org.jxmpp.jid.EntityFullJid;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
|
@ -50,7 +52,7 @@ public class UserStatusIntegrationTest extends AbstractMultiUserChatIntegrationT
|
|||
@SmackIntegrationTest(section = "9.4", quote = "An admin might want to revoke a user's membership [...] The service MUST then send updated presence from this individual to all occupants, indicating the loss of membership by sending a presence element that contains an <x/> element qualified by the 'http://jabber.org/protocol/muc#user' namespace and containing an <item/> child with the 'affiliation' attribute set to a value of \"none\".")
|
||||
public void testMembershipRevokedInOpenRoom() throws Exception {
|
||||
// Setup test fixture.
|
||||
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-userstatus-membership-revoked-membersonly");
|
||||
final EntityBareJid mucAddress = getRandomRoom("userstatus-membership-revoked-membersonly");
|
||||
final MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
final MultiUserChat mucAsSeenByTarget = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
||||
|
@ -89,7 +91,7 @@ public class UserStatusIntegrationTest extends AbstractMultiUserChatIntegrationT
|
|||
@SmackIntegrationTest(section = "9.4", quote = "An admin might want to revoke a user's membership [...] If the room is members-only, the service MUST remove the user from the room, including a status code of 321 to indicate that the user was removed because of an affiliation change, and inform all remaining occupants")
|
||||
public void testMembershipRevokedInMemberOnlyRoom() throws Exception {
|
||||
// Setup test fixture.
|
||||
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-userstatus-membership-revoked-membersonly");
|
||||
final EntityBareJid mucAddress = getRandomRoom("userstatus-membership-revoked-membersonly");
|
||||
final MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
|
||||
final MultiUserChat mucAsSeenByTarget = mucManagerTwo.getMultiUserChat(mucAddress);
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ import org.jivesoftware.smackx.pep.PepManager;
|
|||
import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
||||
import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
||||
|
||||
import org.jxmpp.jid.BareJid;
|
||||
|
||||
public abstract class AbstractOpenPgpIntegrationTest extends AbstractSmackIntegrationTest {
|
||||
|
|
|
@ -31,6 +31,7 @@ import java.security.NoSuchProviderException;
|
|||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
|
||||
import org.jivesoftware.smackx.ox.crypto.PainlessOpenPgpProvider;
|
||||
import org.jivesoftware.smackx.ox.exception.InvalidBackupCodeException;
|
||||
import org.jivesoftware.smackx.ox.exception.MissingOpenPgpKeyException;
|
||||
|
@ -41,15 +42,16 @@ import org.jivesoftware.smackx.ox.store.filebased.FileBasedOpenPgpStore;
|
|||
import org.jivesoftware.smackx.ox.util.OpenPgpPubSubUtil;
|
||||
import org.jivesoftware.smackx.pubsub.PubSubException;
|
||||
|
||||
import org.bouncycastle.openpgp.PGPException;
|
||||
import org.bouncycastle.openpgp.PGPPublicKeyRing;
|
||||
import org.bouncycastle.openpgp.PGPSecretKeyRing;
|
||||
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
||||
import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
||||
import org.igniterealtime.smack.inttest.annotations.AfterClass;
|
||||
import org.igniterealtime.smack.inttest.annotations.BeforeClass;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
|
||||
import org.bouncycastle.openpgp.PGPException;
|
||||
import org.bouncycastle.openpgp.PGPPublicKeyRing;
|
||||
import org.bouncycastle.openpgp.PGPSecretKeyRing;
|
||||
import org.pgpainless.key.OpenPgpV4Fingerprint;
|
||||
import org.pgpainless.key.protection.UnprotectedKeysProtector;
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ import org.igniterealtime.smack.inttest.annotations.BeforeClass;
|
|||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.pgpainless.decryption_verification.OpenPgpMetadata;
|
||||
import org.pgpainless.key.OpenPgpV4Fingerprint;
|
||||
import org.pgpainless.key.protection.UnprotectedKeysProtector;
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest;
|
|||
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
|
||||
import org.jxmpp.jid.Jid;
|
||||
|
||||
@SpecificationReference(document = "XEP-0199", version = "2.0.1")
|
||||
|
|
|
@ -35,6 +35,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
|
|||
import org.igniterealtime.smack.inttest.TestNotPossibleException;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
|
||||
import org.jxmpp.jid.DomainBareJid;
|
||||
|
||||
@SpecificationReference(document = "XEP-0060", version = "1.26.0")
|
||||
|
|
|
@ -25,6 +25,7 @@ import java.net.URISyntaxException;
|
|||
import org.jivesoftware.smack.parsing.SmackParsingException;
|
||||
import org.jivesoftware.smack.util.Async.ThrowingRunnable;
|
||||
import org.jivesoftware.smack.xml.XmlPullParserException;
|
||||
|
||||
import org.jivesoftware.smackx.mediaelement.element.MediaElement;
|
||||
import org.jivesoftware.smackx.softwareinfo.SoftwareInfoManager;
|
||||
import org.jivesoftware.smackx.softwareinfo.form.SoftwareInfoForm;
|
||||
|
|
|
@ -34,6 +34,7 @@ import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
|||
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
|
||||
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
|
||||
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
|
||||
@SpecificationReference(document = "XEP-0118", version = "1.3.0")
|
||||
|
|
|
@ -30,26 +30,26 @@ import org.junit.jupiter.api.Test;
|
|||
|
||||
public class SmackIntegrationTestFrameWorkTest {
|
||||
|
||||
private static class ValidLowLevelList {
|
||||
private static final class ValidLowLevelList {
|
||||
@SuppressWarnings({"unused", "MethodCanBeStatic"})
|
||||
public void test(List<AbstractXMPPConnection> connections) {
|
||||
}
|
||||
}
|
||||
|
||||
private static class InvalidLowLevelList {
|
||||
private static final class InvalidLowLevelList {
|
||||
@SuppressWarnings({"unused", "MethodCanBeStatic"})
|
||||
public void test(List<AbstractXMPPConnection> connections, boolean invalid) {
|
||||
}
|
||||
}
|
||||
|
||||
private static class ValidLowLevelVarargs {
|
||||
private static final class ValidLowLevelVarargs {
|
||||
@SuppressWarnings({"unused", "MethodCanBeStatic"})
|
||||
public void test(AbstractXMPPConnection connectionOne, AbstractXMPPConnection connectionTwo,
|
||||
AbstractXMPPConnection connectionThree) {
|
||||
}
|
||||
}
|
||||
|
||||
private static class InvalidLowLevelVarargs {
|
||||
private static final class InvalidLowLevelVarargs {
|
||||
@SuppressWarnings({"unused", "MethodCanBeStatic"})
|
||||
public void test(AbstractXMPPConnection connectionOne, Integer invalid, AbstractXMPPConnection connectionTwo,
|
||||
AbstractXMPPConnection connectionThree) {
|
||||
|
@ -96,7 +96,7 @@ public class SmackIntegrationTestFrameWorkTest {
|
|||
assertNull(determinedParameterType);
|
||||
}
|
||||
|
||||
private static class ValidUnconnectedConnectionSource {
|
||||
private static final class ValidUnconnectedConnectionSource {
|
||||
@SuppressWarnings({"unused", "MethodCanBeStatic"})
|
||||
public void test(AbstractSmackLowLevelIntegrationTest.UnconnectedConnectionSource source) {
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestFramework.TestRunRes
|
|||
import org.igniterealtime.smack.inttest.annotations.AfterClass;
|
||||
import org.igniterealtime.smack.inttest.annotations.BeforeClass;
|
||||
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
|
@ -97,7 +97,7 @@ public class MultiResultSyncPointTest {
|
|||
}
|
||||
}
|
||||
|
||||
private static class TestException extends Exception {
|
||||
private static final class TestException extends Exception {
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -73,7 +73,7 @@ public class ResultSyncPointTest {
|
|||
}
|
||||
}
|
||||
|
||||
private static class TestException extends Exception {
|
||||
private static final class TestException extends Exception {
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -16,8 +16,7 @@ dependencies {
|
|||
api project(':smack-openpgp')
|
||||
api project(':smack-resolver-minidns')
|
||||
api project(':smack-resolver-minidns-dox')
|
||||
// TODO: Change this to smack-websocket-java11 once it arrives.
|
||||
api project(':smack-websocket-okhttp')
|
||||
api project(':smack-websocket-java11')
|
||||
api project(':smack-tcp')
|
||||
|
||||
testImplementation(testFixtures(project(":smack-core")))
|
||||
|
@ -50,7 +49,7 @@ task convertModularXmppClientToServerConnectionStateGraphDotToPng(type: Exec) {
|
|||
}
|
||||
copyJavadocDocFiles.dependsOn convertModularXmppClientToServerConnectionStateGraphDotToPng
|
||||
|
||||
task cleanGenerateFiles(type: Delete) {
|
||||
task cleanGeneratedFiles(type: Delete) {
|
||||
delete 'src/javadoc/org/jivesoftware/smack/full/doc-files/ModularXmppClientToServerConnectionStateGraph.dot', 'src/javadoc/org/jivesoftware/smack/full/doc-files/ModularXmppClientToServerConnectionStateGraph.png'
|
||||
}
|
||||
clean.dependsOn cleanGenerateFiles
|
||||
clean.dependsOn cleanGeneratedFiles
|
||||
|
|
|
@ -221,7 +221,7 @@ public class XmppHostnameVerifier implements HostnameVerifier {
|
|||
afterWildcard = afterWildcard.substring(wildcardIndex + 1);
|
||||
|
||||
int beforeStartIndex = name.indexOf(beforeWildcard);
|
||||
if ((beforeStartIndex == -1) || (isBeginning && beforeStartIndex != 0)) {
|
||||
if (beforeStartIndex == -1 || (isBeginning && beforeStartIndex != 0)) {
|
||||
return false;
|
||||
}
|
||||
isBeginning = false;
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.jivesoftware.smack.SmackException.NoResponseException;
|
|||
import org.jivesoftware.smack.SmackException.NotConnectedException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
|
||||
import org.jivesoftware.smackx.jingleold.JingleSession;
|
||||
import org.jivesoftware.smackx.jingleold.media.PayloadType;
|
||||
import org.jivesoftware.smackx.jingleold.nat.TransportCandidate;
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.jivesoftware.smack.SmackException.NoResponseException;
|
|||
import org.jivesoftware.smack.SmackException.NotConnectedException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
|
||||
import org.jivesoftware.smackx.jingleold.nat.TransportCandidate;
|
||||
|
||||
/**
|
||||
|
|
|
@ -21,6 +21,7 @@ import org.jivesoftware.smack.SmackException.NotConnectedException;
|
|||
import org.jivesoftware.smack.XMPPConnection;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
|
||||
import org.jivesoftware.smackx.jingleold.JingleSession;
|
||||
import org.jivesoftware.smackx.jingleold.listeners.CreatedJingleSessionListener;
|
||||
import org.jivesoftware.smackx.jingleold.listeners.JingleSessionListener;
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.jivesoftware.smack.SmackException.NotConnectedException;
|
|||
import org.jivesoftware.smack.XMPPConnection;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
|
||||
|
||||
import org.jivesoftware.smackx.jingleold.JingleSession;
|
||||
import org.jivesoftware.smackx.jingleold.listeners.CreatedJingleSessionListener;
|
||||
import org.jivesoftware.smackx.jingleold.listeners.JingleSessionListener;
|
||||
|
|
|
@ -301,7 +301,7 @@ public class AgentRoster {
|
|||
/**
|
||||
* Listens for all presence packets and processes them.
|
||||
*/
|
||||
private class PresencePacketListener implements StanzaListener {
|
||||
private final class PresencePacketListener implements StanzaListener {
|
||||
@Override
|
||||
public void processStanza(Stanza packet) {
|
||||
Presence presence = (Presence) packet;
|
||||
|
@ -376,7 +376,7 @@ public class AgentRoster {
|
|||
/**
|
||||
* Listens for all roster packets and processes them.
|
||||
*/
|
||||
private class AgentStatusListener implements StanzaListener {
|
||||
private final class AgentStatusListener implements StanzaListener {
|
||||
|
||||
@Override
|
||||
public void processStanza(Stanza packet) {
|
||||
|
|
|
@ -39,9 +39,10 @@ import org.jivesoftware.smack.XMPPException;
|
|||
import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
|
||||
import org.jivesoftware.smackx.omemo.signal.SignalOmemoService;
|
||||
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.igniterealtime.smack.inttest.SmackIntegrationTestFramework;
|
||||
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
|
||||
public class SmackOmemoSignalIntegrationTestFramework {
|
||||
|
||||
static {
|
||||
|
|
|
@ -20,11 +20,17 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.omemo.signal;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.jivesoftware.smackx.omemo.element.OmemoBundleElement;
|
||||
import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
|
||||
import org.jivesoftware.smackx.omemo.internal.OmemoDevice;
|
||||
import org.jivesoftware.smackx.omemo.trust.OmemoFingerprint;
|
||||
import org.jivesoftware.smackx.omemo.util.OmemoKeyUtil;
|
||||
|
||||
import org.signal.libsignal.protocol.IdentityKey;
|
||||
import org.signal.libsignal.protocol.IdentityKeyPair;
|
||||
import org.signal.libsignal.protocol.InvalidKeyException;
|
||||
|
@ -38,11 +44,6 @@ import org.signal.libsignal.protocol.state.SessionRecord;
|
|||
import org.signal.libsignal.protocol.state.SignedPreKeyRecord;
|
||||
import org.signal.libsignal.protocol.util.Medium;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* Concrete implementation of the KeyUtil for an implementation using the Signal library.
|
||||
*
|
||||
|
@ -72,8 +73,8 @@ public class SignalOmemoKeyUtil extends OmemoKeyUtil<IdentityKeyPair, IdentityKe
|
|||
|
||||
start--;
|
||||
|
||||
for (int i=0;i<count;i++) {
|
||||
int pkIdx = ((start + i) % (Medium.MAX_VALUE-1)) + 1;
|
||||
for (int i = 0; i < count; i++) {
|
||||
int pkIdx = ((start + i) % (Medium.MAX_VALUE - 1)) + 1;
|
||||
results.add(new PreKeyRecord(pkIdx, Curve.generateKeyPair()));
|
||||
}
|
||||
|
||||
|
|
|
@ -468,7 +468,7 @@ public class CachingOmemoStore<T_IdKeyPair, T_IdKey, T_PreKey, T_SigPreKey, T_Se
|
|||
* @param <T_SigPreKey> type of the public signed preKey
|
||||
* @param <T_Sess> type of the OMEMO session
|
||||
*/
|
||||
private static class KeyCache<T_IdKeyPair, T_IdKey, T_PreKey, T_SigPreKey, T_Sess> {
|
||||
private static final class KeyCache<T_IdKeyPair, T_IdKey, T_PreKey, T_SigPreKey, T_Sess> {
|
||||
private T_IdKeyPair identityKeyPair;
|
||||
private final TreeMap<Integer, T_PreKey> preKeys = new TreeMap<>();
|
||||
private final TreeMap<Integer, T_SigPreKey> signedPreKeys = new TreeMap<>();
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue