diff --git a/smack-bosh/build.gradle b/smack-bosh/build.gradle index a3416325e..f686c8209 100644 --- a/smack-bosh/build.gradle +++ b/smack-bosh/build.gradle @@ -4,5 +4,7 @@ This API is considered beta quality.""" dependencies { compile project(':smack-core') - compile 'org.igniterealtime.jbosh:jbosh:[0.9,0.10)' + // See https://issues.igniterealtime.org/browse/SMACK-858 and + // comment in version.gradle why the specify the version this way. + compile 'org.igniterealtime.jbosh:jbosh:[0.9.1,0.9.999]' } 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 a83819ad2..8cf01fe85 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 @@ -19,6 +19,8 @@ package org.jivesoftware.smack.bosh; import java.net.URI; import java.net.URISyntaxException; +import java.util.HashMap; +import java.util.Map; import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.proxy.ProxyInfo; @@ -34,6 +36,7 @@ public final class BOSHConfiguration extends ConnectionConfiguration { private final boolean https; private final String file; + private Map httpHeaders; private BOSHConfiguration(Builder builder) { super(builder); @@ -49,6 +52,7 @@ public final class BOSHConfiguration extends ConnectionConfiguration { } else { file = builder.file; } + httpHeaders = builder.httpHeaders; } public boolean isProxyEnabled() { @@ -76,6 +80,10 @@ public final class BOSHConfiguration extends ConnectionConfiguration { return new URI((https ? "https://" : "http://") + this.host + ":" + this.port + file); } + public Map getHttpHeaders() { + return httpHeaders; + } + public static Builder builder() { return new Builder(); } @@ -83,6 +91,7 @@ public final class BOSHConfiguration extends ConnectionConfiguration { public static final class Builder extends ConnectionConfiguration.Builder { private boolean https; private String file; + private Map httpHeaders = new HashMap<>(); private Builder() { } @@ -101,6 +110,11 @@ public final class BOSHConfiguration extends ConnectionConfiguration { return this; } + public Builder addHttpHeader(String name, String value) { + httpHeaders.put(name, value); + return this; + } + @Override public BOSHConfiguration build() { return new BOSHConfiguration(this); diff --git a/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java b/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java index 4270ffdee..7e1d97122 100644 --- a/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java +++ b/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java @@ -22,6 +22,7 @@ import java.io.PipedReader; import java.io.PipedWriter; import java.io.StringReader; import java.io.Writer; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -157,8 +158,13 @@ public class XMPPBOSHConnection extends AbstractXMPPConnection { if (config.isProxyEnabled()) { cfgBuilder.setProxy(config.getProxyAddress(), config.getProxyPort()); } + cfgBuilder.setCompressionEnabled(config.isCompressionEnabled()); + for (Map.Entry h : config.getHttpHeaders().entrySet()) { + cfgBuilder.addHttpHeader(h.getKey(), h.getValue()); + } + client = BOSHClient.create(cfgBuilder.build()); client.addBOSHClientConnListener(new BOSHConnectionListener());