1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2025-09-09 17:19:39 +02:00

Smack 4.2.2

-----BEGIN PGP SIGNATURE-----
 
 iQGTBAABCgB9FiEEl3UFnzoh3OFr5PuuIjmn6PWFIFIFAloZnf5fFIAAAAAALgAo
 aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDk3
 NzUwNTlGM0EyMURDRTE2QkU0RkJBRTIyMzlBN0U4RjU4NTIwNTIACgkQIjmn6PWF
 IFLcIQgAsTLRI3sWIZDPRuI5YaU/y6beqqzMp5cQgk/9+9DHGBoziLEU1spkvBs2
 Yvlwu3NtHSJsI+ibzYLEFRnzEwuW07vXw7R5J+kRSZrsE40z1HCQRwUIXDkPgghe
 MuL6vT6OV+kLqKb33YLSBuT2fj2pzVE6mRmMsnFekay/weEqOGUZaY9Hd5lJ31/9
 33fQC0FQfKULQ5t7PbdfX4dDDNWn0n6v+KjvjaskHI0oA+vqPWxPkj8gNXWW8b72
 tVV4h5uXQ0ziK3oED79+GH+DSiET9N2PmsZ7woXiFy5H8KbcQDVe5Pazf+Iq2VQ+
 Vi6Vxikr6Ak+v2Xkt+e3x9E6mZDI1w==
 =CVqq
 -----END PGP SIGNATURE-----

Merge tag '4.2.2'

Smack 4.2.2
This commit is contained in:
Florian Schmaus 2017-11-25 18:45:32 +01:00
commit 76a6b9f2a1
16 changed files with 235 additions and 81 deletions

View file

@ -45,16 +45,19 @@ public class AbstractConnectionListener implements ConnectionListener {
// do nothing
}
@Deprecated
@Override
public void reconnectingIn(int seconds) {
// do nothing
}
@Deprecated
@Override
public void reconnectionFailed(Exception e) {
// do nothing
}
@Deprecated
@Override
public void reconnectionSuccessful() {
// do nothing

View file

@ -1241,6 +1241,8 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
/**
* Sends a notification indicating that the connection was reconnected successfully.
*/
// TODO: Remove in Smack 4.3
@Deprecated
protected void notifyReconnection() {
// Notify connection listeners of the reconnection.
for (ConnectionListener listener : connectionListeners) {

View file

@ -18,6 +18,7 @@
package org.jivesoftware.smack;
import java.net.InetAddress;
import java.security.KeyStore;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@ -505,7 +506,7 @@ public abstract class ConnectionConfiguration {
private SecurityMode securityMode = SecurityMode.ifpossible;
private DnssecMode dnssecMode = DnssecMode.disabled;
private String keystorePath = System.getProperty("javax.net.ssl.keyStore");
private String keystoreType = "jks";
private String keystoreType = KeyStore.getDefaultType();
private String pkcs11Library = "pkcs11.config";
private SSLContext customSSLContext;
private String[] enabledSSLProtocols;

View file

@ -64,7 +64,10 @@ public interface ConnectionListener {
/**
* The connection has reconnected successfully to the server. Connections will
* reconnect to the server when the previous socket connection was abruptly closed.
* @deprecated use {@link #connected(XMPPConnection)} or {@link #authenticated(XMPPConnection, boolean)} instead.
*/
// TODO: Remove in Smack 4.3
@Deprecated
public void reconnectionSuccessful();
// The next two methods *must* only be invoked by ReconnectionManager
@ -78,6 +81,8 @@ public interface ConnectionListener {
*
* @param seconds remaining seconds before attempting a reconnection.
*/
// TODO: Remove in Smack 4.3
@Deprecated
public void reconnectingIn(int seconds);
/**
@ -90,5 +95,7 @@ public interface ConnectionListener {
*
* @param e the exception that caused the reconnection to fail.
*/
// TODO: Remove in Smack 4.3
@Deprecated
public void reconnectionFailed(Exception e);
}

View file

@ -0,0 +1,50 @@
/**
*
* Copyright 2017 Florian Schmaus.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.smack;
/**
* A listener for the {@link ReconnectionManager}. Use
* {@link ReconnectionManager#addReconnectionListener(ReconnectionListener)} to add new listeners to the reconnection
* manager.
*
* @since 4.2.2
*/
public interface ReconnectionListener {
/**
* The connection will retry to reconnect in the specified number of seconds.
* <p>
* Note: This method is only called if {@link ReconnectionManager#isAutomaticReconnectEnabled()} returns true, i.e.
* only when the reconnection manager is enabled for the connection.
* </p>
*
* @param seconds remaining seconds before attempting a reconnection.
*/
public void reconnectingIn(int seconds);
/**
* An attempt to connect to the server has failed. The connection will keep trying reconnecting to the server in a
* moment.
* <p>
* Note: This method is only called if {@link ReconnectionManager#isAutomaticReconnectEnabled()} returns true, i.e.
* only when the reconnection manager is enabled for the connection.
* </p>
*
* @param e the exception that caused the reconnection to fail.
*/
public void reconnectionFailed(Exception e);
}

View file

@ -20,7 +20,9 @@ import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.WeakHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -103,6 +105,8 @@ public final class ReconnectionManager {
return enabledPerDefault;
}
private final Set<ReconnectionListener> reconnectionListeners = new CopyOnWriteArraySet<>();
// Holds the connection to the server
private final WeakReference<AbstractXMPPConnection> weakRefConnection;
private final int randomBase = new Random().nextInt(13) + 2; // between 2 and 15 seconds
@ -134,6 +138,27 @@ public final class ReconnectionManager {
defaultReconnectionPolicy = reconnectionPolicy;
}
/**
* Add a new reconnection listener.
*
* @param listener the listener to add
* @return <code>true</code> if the listener was not already added
* @since 4.2.2
*/
public boolean addReconnectionListener(ReconnectionListener listener) {
return reconnectionListeners.add(listener);
}
/**
* Remove a reconnection listener.
* @param listener the listener to remove
* @return <code>true</code> if the listener was active and got removed.
* @since 4.2.2
*/
public boolean removeReconnectionListener(ReconnectionListener listener) {
return reconnectionListeners.remove(listener);
}
/**
* Set the fixed delay in seconds between the reconnection attempts Also set the connection
* policy to {@link ReconnectionPolicy#FIXED_DELAY}.
@ -208,6 +233,7 @@ public final class ReconnectionManager {
/**
* The process will try the reconnection until the connection succeed or the user cancel it
*/
@SuppressWarnings("deprecation")
@Override
public void run() {
final AbstractXMPPConnection connection = weakRefConnection.get();
@ -233,6 +259,9 @@ public final class ReconnectionManager {
try {
Thread.sleep(1000);
remainingSeconds--;
for (ReconnectionListener listener : reconnectionListeners) {
listener.reconnectingIn(remainingSeconds);
}
for (ConnectionListener listener : connection.connectionListeners) {
listener.reconnectingIn(remainingSeconds);
}
@ -244,6 +273,9 @@ public final class ReconnectionManager {
}
}
for (ReconnectionListener listener : reconnectionListeners) {
listener.reconnectingIn(0);
}
for (ConnectionListener listener : connection.connectionListeners) {
listener.reconnectingIn(0);
}
@ -269,6 +301,9 @@ public final class ReconnectionManager {
}
catch (SmackException | IOException | XMPPException e) {
// Fires the failed reconnection notification
for (ReconnectionListener listener : reconnectionListeners) {
listener.reconnectionFailed(e);
}
for (ConnectionListener listener : connection.connectionListeners) {
listener.reconnectionFailed(e);
}

View file

@ -18,8 +18,13 @@ package org.jivesoftware.smack.debugger;
import java.io.Reader;
import java.io.Writer;
import java.util.logging.Logger;
import org.jivesoftware.smack.AbstractConnectionListener;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.ReconnectionListener;
import org.jivesoftware.smack.ReconnectionManager;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.packet.TopLevelStreamElement;
import org.jivesoftware.smack.util.ObservableReader;
@ -31,9 +36,12 @@ import org.jxmpp.jid.EntityFullJid;
public abstract class AbstractDebugger extends SmackDebugger {
private static final Logger LOGGER = Logger.getLogger(AbstractDebugger.class.getName());
public static boolean printInterpreted = false;
private final ConnectionListener connListener;
private final ReconnectionListener reconnectionListener;
private final ReaderListener readerListener;
private final WriterListener writerListener;
@ -63,7 +71,7 @@ public abstract class AbstractDebugger extends SmackDebugger {
};
this.writer.addWriterListener(writerListener);
connListener = new ConnectionListener() {
connListener = new AbstractConnectionListener() {
@Override
public void connected(XMPPConnection connection) {
log("XMPPConnection connected ("
@ -92,6 +100,9 @@ public abstract class AbstractDebugger extends SmackDebugger {
connection +
")", e);
}
};
reconnectionListener = new ReconnectionListener() {
@Override
public void reconnectionFailed(Exception e) {
log(
@ -100,13 +111,6 @@ public abstract class AbstractDebugger extends SmackDebugger {
")", e);
}
@Override
public void reconnectionSuccessful() {
log(
"XMPPConnection reconnected (" +
connection +
")");
}
@Override
public void reconnectingIn(int seconds) {
log(
"XMPPConnection (" +
@ -114,6 +118,14 @@ public abstract class AbstractDebugger extends SmackDebugger {
") will reconnect in " + seconds);
}
};
if (connection instanceof AbstractXMPPConnection) {
AbstractXMPPConnection abstractXmppConnection = (AbstractXMPPConnection) connection;
ReconnectionManager.getInstanceFor(abstractXmppConnection).addReconnectionListener(reconnectionListener);
} else {
LOGGER.info("The connection instance " + connection
+ " is not an instance of AbstractXMPPConnection, thus we can not install the ReconnectionListener");
}
}
protected abstract void log(String logMessage);

View file

@ -88,6 +88,7 @@ public class DummyConnection extends AbstractXMPPConnection {
user = getUserJid();
}
@SuppressWarnings("deprecation")
@Override
protected void connectInternal() {
connected = true;
@ -95,6 +96,7 @@ public class DummyConnection extends AbstractXMPPConnection {
tlsHandled.reportSuccess();
streamId = "dummy-" + new Random(new Date().getTime()).nextInt();
// TODO: Remove in Smack 4.3, and likely the suppression of the deprecation warning.
if (reconnect) {
notifyReconnection();
}