diff --git a/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/BOSHConfiguration.java b/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/BOSHConfiguration.java index 680e37975..a4c2db65e 100644 --- a/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/BOSHConfiguration.java +++ b/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/BOSHConfiguration.java @@ -77,7 +77,7 @@ public final class BOSHConfiguration extends ConnectionConfiguration { } public URI getURI() throws URISyntaxException { - String uri = https ? "https://" : "http://" + getHostString() + ":" + this.port + file; + String uri = (https ? "https://" : "http://") + getHostString() + ":" + this.port + file; return new URI(uri); } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java b/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java index 0b3e35eb5..244c741da 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java @@ -1,6 +1,6 @@ /** * - * Copyright 2009 Jive Software, 2018-2021 Florian Schmaus. + * Copyright 2009 Jive Software, 2018-2022 Florian Schmaus. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -2006,11 +2006,18 @@ public abstract class AbstractXMPPConnection implements XMPPConnection { }, timeout, TimeUnit.MILLISECONDS); addAsyncStanzaListener(stanzaListener, replyFilter); - try { - sendStanza(stanza); - } - catch (NotConnectedException | InterruptedException exception) { - future.setException(exception); + Runnable sendOperation = () -> { + try { + sendStanza(stanza); + } + catch (NotConnectedException | InterruptedException exception) { + future.setException(exception); + } + }; + if (SmackConfiguration.TRUELY_ASYNC_SENDS) { + Async.go(sendOperation); + } else { + sendOperation.run(); } return future; diff --git a/smack-core/src/main/java/org/jivesoftware/smack/SmackConfiguration.java b/smack-core/src/main/java/org/jivesoftware/smack/SmackConfiguration.java index b93ec12cc..907a288b6 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/SmackConfiguration.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/SmackConfiguration.java @@ -1,6 +1,6 @@ /** * - * Copyright 2003-2007 Jive Software, 2018-2021 Florian Schmaus. + * Copyright 2003-2007 Jive Software, 2018-2022 Florian Schmaus. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -386,4 +386,14 @@ public final class SmackConfiguration { } } } + + /** + * If enabled, causes {@link AbstractXMPPConnection} to create a thread for every asynchronous send operation. This + * is meant to work-around a shortcoming of Smack 4.4, where certain send operations are not asynchronous even if + * they should be. This is an expert setting, do not toggle if you do not understand the consequences or have been + * told to do so. Note that it is expected that this will not be needed in future Smack versions. + * + * @since 4.4.6 + */ + public static boolean TRUELY_ASYNC_SENDS = false; }