Skip to content

Commit d959212

Browse files
author
Ranjan Dasgupta
authored
Merge pull request #666 from Pitel/patch-3
Fix compatibility with Android < 7.0
2 parents 525c705 + 23e8c35 commit d959212

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

  • org.eclipse.paho.client.mqttv3/src/main/java/org/eclipse/paho/client/mqttv3/internal

org.eclipse.paho.client.mqttv3/src/main/java/org/eclipse/paho/client/mqttv3/internal/SSLNetworkModule.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package org.eclipse.paho.client.mqttv3.internal;
1717

1818
import java.io.IOException;
19+
import java.lang.NoClassDefFoundError;
20+
import java.lang.NoSuchMethodError;
1921
import java.util.ArrayList;
2022
import java.util.List;
2123

@@ -134,17 +136,25 @@ public void start() throws IOException, MqttException {
134136
socket.setSoTimeout(this.handshakeTimeoutSecs * 1000);
135137

136138
// SNI support. Should be automatic under some circumstances - not all, apparently
137-
SSLParameters sslParameters = new SSLParameters();
138-
List<SNIServerName> sniHostNames = new ArrayList<SNIServerName>(1);
139-
sniHostNames.add(new SNIHostName(host));
140-
sslParameters.setServerNames(sniHostNames);
141-
((SSLSocket)socket).setSSLParameters(sslParameters);
139+
try {
140+
SSLParameters sslParameters = new SSLParameters();
141+
List<SNIServerName> sniHostNames = new ArrayList<SNIServerName>(1);
142+
sniHostNames.add(new SNIHostName(host));
143+
sslParameters.setServerNames(sniHostNames);
144+
((SSLSocket)socket).setSSLParameters(sslParameters);
145+
} catch(NoClassDefFoundError e) {
146+
// Android < 7.0
147+
}
142148

143149
// If default Hostname verification is enabled, use the same method that is used with HTTPS
144150
if(this.httpsHostnameVerificationEnabled) {
145-
SSLParameters sslParams = new SSLParameters();
146-
sslParams.setEndpointIdentificationAlgorithm("HTTPS");
147-
((SSLSocket) socket).setSSLParameters(sslParams);
151+
try {
152+
SSLParameters sslParams = new SSLParameters();
153+
sslParams.setEndpointIdentificationAlgorithm("HTTPS");
154+
((SSLSocket) socket).setSSLParameters(sslParams);
155+
} catch(NoSuchMethodError e) {
156+
// Android < 7.0
157+
}
148158
}
149159
((SSLSocket) socket).startHandshake();
150160
if (hostnameVerifier != null && !this.httpsHostnameVerificationEnabled) {

0 commit comments

Comments
 (0)