1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $RCSfile$ 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Revision: 3306 $ 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Date: 2006-01-16 14:34:56 -0300 (Mon, 16 Jan 2006) $ 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Copyright 2003-2007 Jive Software. 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * you may not use this file except in compliance with the License. 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * You may obtain a copy of the License at 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * http://www.apache.org/licenses/LICENSE-2.0 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, software 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS, 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * See the License for the specific language governing permissions and 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * limitations under the License. 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.jivesoftware.smack; 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.proxy.ProxyInfo; 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.util.DNSUtil; 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.util.dns.HostAddress; 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport javax.net.SocketFactory; 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport javax.net.ssl.SSLContext; 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.auth.callback.CallbackHandler; 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.io.File; 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.ArrayList; 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Collections; 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.List; 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Configuration to use while establishing the connection to the server. It is possible to 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * configure the path to the trustore file that keeps the trusted CA root certificates and 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * enable or disable all or some of the checkings done while verifying server certificates.<p> 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * It is also possible to configure if TLS, SASL, and compression are used or not. 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Gaston Dombiak 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class ConnectionConfiguration implements Cloneable { 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Hostname of the XMPP server. Usually servers use the same service name as the name 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * of the server. However, there are some servers like google where host would be 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * talk.google.com and the serviceName would be gmail.com. 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String serviceName; 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String host; 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private int port; 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected List<HostAddress> hostAddresses; 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String truststorePath; 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String truststoreType; 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String truststorePassword; 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String keystorePath; 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String keystoreType; 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String pkcs11Library; 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean verifyChainEnabled = false; 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean verifyRootCAEnabled = false; 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean selfSignedCertificateEnabled = false; 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean expiredCertificatesCheckEnabled = false; 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean notMatchingDomainCheckEnabled = false; 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean isRosterVersioningAvailable = false; 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private SSLContext customSSLContext; 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean compressionEnabled = false; 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean saslAuthenticationEnabled = true; 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Used to get information from the user 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private CallbackHandler callbackHandler; 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean debuggerEnabled = Connection.DEBUG_ENABLED; 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Flag that indicates if a reconnection should be attempted when abruptly disconnected 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean reconnectionAllowed = true; 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Holds the socket factory that is used to generate the socket in the connection 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private SocketFactory socketFactory; 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Holds the authentication information for future reconnections 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String username; 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String password; 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String resource; 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean sendPresence = true; 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean rosterLoadedAtLogin = true; 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private SecurityMode securityMode = SecurityMode.enabled; 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Holds the proxy information (such as proxyhost, proxyport, username, password etc) 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected ProxyInfo proxy; 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates a new ConnectionConfiguration for the specified service name. 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * A DNS SRV lookup will be performed to find out the actual host address 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * and port to use for the connection. 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param serviceName the name of the service provided by an XMPP server. 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public ConnectionConfiguration(String serviceName) { 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Perform DNS lookup to get host and port to use 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen hostAddresses = DNSUtil.resolveXMPPDomain(serviceName); 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen init(serviceName, ProxyInfo.forDefaultProxy()); 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected ConnectionConfiguration() { 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /* Does nothing */ 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates a new ConnectionConfiguration for the specified service name 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * with specified proxy. 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * A DNS SRV lookup will be performed to find out the actual host address 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * and port to use for the connection. 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param serviceName the name of the service provided by an XMPP server. 125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param proxy the proxy through which XMPP is to be connected 126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public ConnectionConfiguration(String serviceName,ProxyInfo proxy) { 128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Perform DNS lookup to get host and port to use 129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen hostAddresses = DNSUtil.resolveXMPPDomain(serviceName); 130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen init(serviceName, proxy); 131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates a new ConnectionConfiguration using the specified host, port and 135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * service name. This is useful for manually overriding the DNS SRV lookup 136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * process that's used with the {@link #ConnectionConfiguration(String)} 137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * constructor. For example, say that an XMPP server is running at localhost 138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * in an internal network on port 5222 but is configured to think that it's 139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * "example.com" for testing purposes. This constructor is necessary to connect 140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * to the server in that case since a DNS SRV lookup for example.com would not 141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * point to the local testing server. 142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param host the host where the XMPP server is running. 144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param port the port where the XMPP is listening. 145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param serviceName the name of the service provided by an XMPP server. 146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public ConnectionConfiguration(String host, int port, String serviceName) { 148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen initHostAddresses(host, port); 149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen init(serviceName, ProxyInfo.forDefaultProxy()); 150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates a new ConnectionConfiguration using the specified host, port and 154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * service name. This is useful for manually overriding the DNS SRV lookup 155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * process that's used with the {@link #ConnectionConfiguration(String)} 156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * constructor. For example, say that an XMPP server is running at localhost 157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * in an internal network on port 5222 but is configured to think that it's 158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * "example.com" for testing purposes. This constructor is necessary to connect 159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * to the server in that case since a DNS SRV lookup for example.com would not 160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * point to the local testing server. 161d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param host the host where the XMPP server is running. 163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param port the port where the XMPP is listening. 164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param serviceName the name of the service provided by an XMPP server. 165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param proxy the proxy through which XMPP is to be connected 166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public ConnectionConfiguration(String host, int port, String serviceName, ProxyInfo proxy) { 168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen initHostAddresses(host, port); 169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen init(serviceName, proxy); 170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 172d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates a new ConnectionConfiguration for a connection that will connect 174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * to the desired host and port. 175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param host the host where the XMPP server is running. 177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param port the port where the XMPP is listening. 178d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 179d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public ConnectionConfiguration(String host, int port) { 180d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen initHostAddresses(host, port); 181d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen init(host, ProxyInfo.forDefaultProxy()); 182d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 183d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 184d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 185d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates a new ConnectionConfiguration for a connection that will connect 186d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * to the desired host and port with desired proxy. 187d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 188d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param host the host where the XMPP server is running. 189d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param port the port where the XMPP is listening. 190d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param proxy the proxy through which XMPP is to be connected 191d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 192d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public ConnectionConfiguration(String host, int port, ProxyInfo proxy) { 193d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen initHostAddresses(host, port); 194d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen init(host, proxy); 195d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 196d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 197d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected void init(String serviceName, ProxyInfo proxy) { 198d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.serviceName = serviceName; 199d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.proxy = proxy; 200d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 201d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Build the default path to the cacert truststore file. By default we are 202d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // going to use the file located in $JREHOME/lib/security/cacerts. 203d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String javaHome = System.getProperty("java.home"); 204d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen StringBuilder buffer = new StringBuilder(); 205d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buffer.append(javaHome).append(File.separator).append("lib"); 206d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buffer.append(File.separator).append("security"); 207d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buffer.append(File.separator).append("cacerts"); 208d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen truststorePath = buffer.toString(); 209d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Set the default store type 210d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen truststoreType = "jks"; 211d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Set the default password of the cacert file that is "changeit" 212d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen truststorePassword = "changeit"; 213d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen keystorePath = System.getProperty("javax.net.ssl.keyStore"); 214d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen keystoreType = "jks"; 215d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen pkcs11Library = "pkcs11.config"; 216d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 217d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen //Setting the SocketFactory according to proxy supplied 218d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen socketFactory = proxy.getSocketFactory(); 219d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 220d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 221d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 222d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the server name, also known as XMPP domain of the target server. 223d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 224d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param serviceName the XMPP domain of the target server. 225d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 226d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setServiceName(String serviceName) { 227d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.serviceName = serviceName; 228d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 229d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 230d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 231d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the server name of the target server. 232d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 233d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the server name of the target server. 234d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 235d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getServiceName() { 236d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return serviceName; 237d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 238d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 239d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 240d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the host to use when establishing the connection. The host and port to use 241d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * might have been resolved by a DNS lookup as specified by the XMPP spec (and therefore 242d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * may not match the {@link #getServiceName service name}. 243d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 244d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the host to use when establishing the connection. 245d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 246d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getHost() { 247d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return host; 248d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 249d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 250d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 251d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the port to use when establishing the connection. The host and port to use 252d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * might have been resolved by a DNS lookup as specified by the XMPP spec. 253d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 254d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the port to use when establishing the connection. 255d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 256d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public int getPort() { 257d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return port; 258d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 259d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 260d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setUsedHostAddress(HostAddress hostAddress) { 261d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.host = hostAddress.getFQDN(); 262d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.port = hostAddress.getPort(); 263d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 264d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 265d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 266d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the TLS security mode used when making the connection. By default, 267d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the mode is {@link SecurityMode#enabled}. 268d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 269d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the security mode. 270d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 271d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public SecurityMode getSecurityMode() { 272d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return securityMode; 273d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 274d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 275d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 276d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the TLS security mode used when making the connection. By default, 277d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the mode is {@link SecurityMode#enabled}. 278d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 279d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param securityMode the security mode. 280d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 281d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setSecurityMode(SecurityMode securityMode) { 282d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.securityMode = securityMode; 283d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 284d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 285d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 286d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Retuns the path to the trust store file. The trust store file contains the root 287d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * certificates of several well known CAs. By default, will attempt to use the 288d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the file located in $JREHOME/lib/security/cacerts. 289d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 290d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the path to the truststore file. 291d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 292d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getTruststorePath() { 293d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return truststorePath; 294d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 295d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 296d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 297d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the path to the trust store file. The truststore file contains the root 298d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * certificates of several well?known CAs. By default Smack is going to use 299d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the file located in $JREHOME/lib/security/cacerts. 300d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 301d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param truststorePath the path to the truststore file. 302d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 303d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setTruststorePath(String truststorePath) { 304d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.truststorePath = truststorePath; 305d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 306d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 307d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 308d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the trust store type, or <tt>null</tt> if it's not set. 309d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 310d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the trust store type. 311d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 312d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getTruststoreType() { 313d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return truststoreType; 314d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 315d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 316d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 317d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the trust store type. 318d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 319d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param truststoreType the trust store type. 320d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 321d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setTruststoreType(String truststoreType) { 322d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.truststoreType = truststoreType; 323d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 324d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 325d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 326d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the password to use to access the trust store file. It is assumed that all 327d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * certificates share the same password in the trust store. 328d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 329d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the password to use to access the truststore file. 330d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 331d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getTruststorePassword() { 332d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return truststorePassword; 333d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 334d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 335d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 336d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the password to use to access the trust store file. It is assumed that all 337d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * certificates share the same password in the trust store. 338d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 339d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param truststorePassword the password to use to access the truststore file. 340d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 341d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setTruststorePassword(String truststorePassword) { 342d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.truststorePassword = truststorePassword; 343d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 344d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 345d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 346d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Retuns the path to the keystore file. The key store file contains the 347d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * certificates that may be used to authenticate the client to the server, 348d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * in the event the server requests or requires it. 349d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 350d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the path to the keystore file. 351d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 352d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getKeystorePath() { 353d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return keystorePath; 354d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 355d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 356d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 357d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the path to the keystore file. The key store file contains the 358d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * certificates that may be used to authenticate the client to the server, 359d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * in the event the server requests or requires it. 360d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 361d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param keystorePath the path to the keystore file. 362d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 363d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setKeystorePath(String keystorePath) { 364d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.keystorePath = keystorePath; 365d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 366d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 367d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 368d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the keystore type, or <tt>null</tt> if it's not set. 369d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 370d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the keystore type. 371d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 372d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getKeystoreType() { 373d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return keystoreType; 374d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 375d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 376d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 377d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the keystore type. 378d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 379d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param keystoreType the keystore type. 380d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 381d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setKeystoreType(String keystoreType) { 382d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.keystoreType = keystoreType; 383d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 384d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 385d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 386d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 387d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the PKCS11 library file location, needed when the 388d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Keystore type is PKCS11. 389d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 390d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the path to the PKCS11 library file 391d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 392d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getPKCS11Library() { 393d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return pkcs11Library; 394d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 395d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 396d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 397d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the PKCS11 library file location, needed when the 398d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Keystore type is PKCS11 399d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 400d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param pkcs11Library the path to the PKCS11 library file 401d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 402d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setPKCS11Library(String pkcs11Library) { 403d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.pkcs11Library = pkcs11Library; 404d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 405d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 406d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 407d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if the whole chain of certificates presented by the server are going to 408d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * be checked. By default the certificate chain is not verified. 409d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 410d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if the whole chaing of certificates presented by the server are going to 411d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * be checked. 412d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 413d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isVerifyChainEnabled() { 414d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return verifyChainEnabled; 415d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 416d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 417d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 418d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if the whole chain of certificates presented by the server are going to 419d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * be checked. By default the certificate chain is not verified. 420d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 421d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param verifyChainEnabled if the whole chaing of certificates presented by the server 422d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * are going to be checked. 423d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 424d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setVerifyChainEnabled(boolean verifyChainEnabled) { 425d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.verifyChainEnabled = verifyChainEnabled; 426d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 427d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 428d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 429d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if root CA checking is going to be done. By default checking is disabled. 430d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 431d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if root CA checking is going to be done. 432d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 433d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isVerifyRootCAEnabled() { 434d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return verifyRootCAEnabled; 435d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 436d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 437d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 438d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if root CA checking is going to be done. By default checking is disabled. 439d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 440d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param verifyRootCAEnabled if root CA checking is going to be done. 441d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 442d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setVerifyRootCAEnabled(boolean verifyRootCAEnabled) { 443d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.verifyRootCAEnabled = verifyRootCAEnabled; 444d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 445d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 446d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 447d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if self-signed certificates are going to be accepted. By default 448d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * this option is disabled. 449d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 450d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if self-signed certificates are going to be accepted. 451d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 452d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isSelfSignedCertificateEnabled() { 453d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return selfSignedCertificateEnabled; 454d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 455d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 456d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 457d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if self-signed certificates are going to be accepted. By default 458d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * this option is disabled. 459d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 460d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param selfSignedCertificateEnabled if self-signed certificates are going to be accepted. 461d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 462d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setSelfSignedCertificateEnabled(boolean selfSignedCertificateEnabled) { 463d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.selfSignedCertificateEnabled = selfSignedCertificateEnabled; 464d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 465d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 466d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 467d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if certificates presented by the server are going to be checked for their 468d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * validity. By default certificates are not verified. 469d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 470d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if certificates presented by the server are going to be checked for their 471d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * validity. 472d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 473d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isExpiredCertificatesCheckEnabled() { 474d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return expiredCertificatesCheckEnabled; 475d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 476d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 477d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 478d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if certificates presented by the server are going to be checked for their 479d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * validity. By default certificates are not verified. 480d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 481d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param expiredCertificatesCheckEnabled if certificates presented by the server are going 482d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * to be checked for their validity. 483d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 484d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setExpiredCertificatesCheckEnabled(boolean expiredCertificatesCheckEnabled) { 485d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.expiredCertificatesCheckEnabled = expiredCertificatesCheckEnabled; 486d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 487d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 488d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 489d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if certificates presented by the server are going to be checked for their 490d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * domain. By default certificates are not verified. 491d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 492d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if certificates presented by the server are going to be checked for their 493d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * domain. 494d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 495d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isNotMatchingDomainCheckEnabled() { 496d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return notMatchingDomainCheckEnabled; 497d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 498d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 499d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 500d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if certificates presented by the server are going to be checked for their 501d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * domain. By default certificates are not verified. 502d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 503d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param notMatchingDomainCheckEnabled if certificates presented by the server are going 504d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * to be checked for their domain. 505d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 506d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setNotMatchingDomainCheckEnabled(boolean notMatchingDomainCheckEnabled) { 507d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.notMatchingDomainCheckEnabled = notMatchingDomainCheckEnabled; 508d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 509d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 510d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 511d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Gets the custom SSLContext for SSL sockets. This is null by default. 512d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 513d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the SSLContext previously set with setCustomSSLContext() or null. 514d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 515d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public SSLContext getCustomSSLContext() { 516d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return this.customSSLContext; 517d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 518d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 519d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 520d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets a custom SSLContext for creating SSL sockets. A custom Context causes all other 521d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * SSL/TLS realted settings to be ignored. 522d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 523d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param context the custom SSLContext for new sockets; null to reset default behavior. 524d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 525d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setCustomSSLContext(SSLContext context) { 526d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.customSSLContext = context; 527d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 528d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 529d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 530d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if the connection is going to use stream compression. Stream compression 531d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * will be requested after TLS was established (if TLS was enabled) and only if the server 532d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * offered stream compression. With stream compression network traffic can be reduced 533d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * up to 90%. By default compression is disabled. 534d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 535d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if the connection is going to use stream compression. 536d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 537d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isCompressionEnabled() { 538d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return compressionEnabled; 539d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 540d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 541d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 542d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if the connection is going to use stream compression. Stream compression 543d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * will be requested after TLS was established (if TLS was enabled) and only if the server 544d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * offered stream compression. With stream compression network traffic can be reduced 545d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * up to 90%. By default compression is disabled. 546d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 547d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param compressionEnabled if the connection is going to use stream compression. 548d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 549d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setCompressionEnabled(boolean compressionEnabled) { 550d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.compressionEnabled = compressionEnabled; 551d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 552d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 553d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 554d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if the client is going to use SASL authentication when logging into the 555d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * server. If SASL authenticatin fails then the client will try to use non-sasl authentication. 556d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * By default SASL is enabled. 557d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 558d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if the client is going to use SASL authentication when logging into the 559d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * server. 560d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 561d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isSASLAuthenticationEnabled() { 562d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return saslAuthenticationEnabled; 563d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 564d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 565d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 566d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets whether the client will use SASL authentication when logging into the 567d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * server. If SASL authenticatin fails then the client will try to use non-sasl authentication. 568d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * By default, SASL is enabled. 569d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 570d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param saslAuthenticationEnabled if the client is going to use SASL authentication when 571d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * logging into the server. 572d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 573d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setSASLAuthenticationEnabled(boolean saslAuthenticationEnabled) { 574d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.saslAuthenticationEnabled = saslAuthenticationEnabled; 575d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 576d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 577d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 578d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if the new connection about to be establish is going to be debugged. By 579d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * default the value of {@link Connection#DEBUG_ENABLED} is used. 580d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 581d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if the new connection about to be establish is going to be debugged. 582d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 583d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isDebuggerEnabled() { 584d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return debuggerEnabled; 585d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 586d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 587d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 588d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if the new connection about to be establish is going to be debugged. By 589d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * default the value of {@link Connection#DEBUG_ENABLED} is used. 590d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 591d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param debuggerEnabled if the new connection about to be establish is going to be debugged. 592d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 593d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setDebuggerEnabled(boolean debuggerEnabled) { 594d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.debuggerEnabled = debuggerEnabled; 595d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 596d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 597d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 598d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if the reconnection mechanism is allowed to be used. By default 599d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * reconnection is allowed. 600d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 601d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param isAllowed if the reconnection mechanism is allowed to use. 602d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 603d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setReconnectionAllowed(boolean isAllowed) { 604d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.reconnectionAllowed = isAllowed; 605d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 606d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 607d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns if the reconnection mechanism is allowed to be used. By default 608d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * reconnection is allowed. 609d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 610d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return if the reconnection mechanism is allowed to be used. 611d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 612d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isReconnectionAllowed() { 613d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return this.reconnectionAllowed; 614d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 615d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 616d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 617d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the socket factory used to create new xmppConnection sockets. 618d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * This is useful when connecting through SOCKS5 proxies. 619d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 620d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param socketFactory used to create new sockets. 621d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 622d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setSocketFactory(SocketFactory socketFactory) { 623d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.socketFactory = socketFactory; 624d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 625d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 626d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 627d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if an initial available presence will be sent to the server. By default 628d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * an available presence will be sent to the server indicating that this presence 629d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * is not online and available to receive messages. If you want to log in without 630d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * being 'noticed' then pass a <tt>false</tt> value. 631d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 632d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param sendPresence true if an initial available presence will be sent while logging in. 633d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 634d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setSendPresence(boolean sendPresence) { 635d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.sendPresence = sendPresence; 636d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 637d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 638d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 639d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if the roster will be loaded from the server when logging in. This 640d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * is the common behaviour for clients but sometimes clients may want to differ this 641d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * or just never do it if not interested in rosters. 642d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 643d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if the roster will be loaded from the server when logging in. 644d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 645d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isRosterLoadedAtLogin() { 646d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return rosterLoadedAtLogin; 647d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 648d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 649d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 650d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets if the roster will be loaded from the server when logging in. This 651d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * is the common behaviour for clients but sometimes clients may want to differ this 652d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * or just never do it if not interested in rosters. 653d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 654d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param rosterLoadedAtLogin if the roster will be loaded from the server when logging in. 655d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 656d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setRosterLoadedAtLogin(boolean rosterLoadedAtLogin) { 657d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.rosterLoadedAtLogin = rosterLoadedAtLogin; 658d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 659d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 660d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 661d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns a CallbackHandler to obtain information, such as the password or 662d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * principal information during the SASL authentication. A CallbackHandler 663d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * will be used <b>ONLY</b> if no password was specified during the login while 664d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * using SASL authentication. 665d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 666d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return a CallbackHandler to obtain information, such as the password or 667d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * principal information during the SASL authentication. 668d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 669d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public CallbackHandler getCallbackHandler() { 670d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return callbackHandler; 671d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 672d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 673d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 674d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets a CallbackHandler to obtain information, such as the password or 675d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * principal information during the SASL authentication. A CallbackHandler 676d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * will be used <b>ONLY</b> if no password was specified during the login while 677d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * using SASL authentication. 678d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 679d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param callbackHandler to obtain information, such as the password or 680d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * principal information during the SASL authentication. 681d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 682d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setCallbackHandler(CallbackHandler callbackHandler) { 683d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.callbackHandler = callbackHandler; 684d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 685d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 686d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 687d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the socket factory used to create new xmppConnection sockets. 688d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * This is useful when connecting through SOCKS5 proxies. 689d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 690d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return socketFactory used to create new sockets. 691d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 692d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public SocketFactory getSocketFactory() { 693d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return this.socketFactory; 694d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 695d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 696d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public List<HostAddress> getHostAddresses() { 697d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return Collections.unmodifiableList(hostAddresses); 698d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 699d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 700d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 701d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * An enumeration for TLS security modes that are available when making a connection 702d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * to the XMPP server. 703d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 704d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static enum SecurityMode { 705d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 706d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 707d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Securirty via TLS encryption is required in order to connect. If the server 708d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * does not offer TLS or if the TLS negotiaton fails, the connection to the server 709d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * will fail. 710d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 711d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen required, 712d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 713d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 714d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Security via TLS encryption is used whenever it's available. This is the 715d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * default setting. 716d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 717d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen enabled, 718d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 719d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 720d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Security via TLS encryption is disabled and only un-encrypted connections will 721d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * be used. If only TLS encryption is available from the server, the connection 722d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * will fail. 723d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 724d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen disabled 725d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 726d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 727d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 728d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the username to use when trying to reconnect to the server. 729d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 730d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the username to use when trying to reconnect to the server. 731d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 732d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String getUsername() { 733d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return this.username; 734d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 735d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 736d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 737d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the password to use when trying to reconnect to the server. 738d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 739d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the password to use when trying to reconnect to the server. 740d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 741d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String getPassword() { 742d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return this.password; 743d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 744d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 745d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 746d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the resource to use when trying to reconnect to the server. 747d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 748d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the resource to use when trying to reconnect to the server. 749d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 750d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String getResource() { 751d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return resource; 752d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 753d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 754d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen boolean isRosterVersioningAvailable(){ 755d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return isRosterVersioningAvailable; 756d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 757d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 758d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen void setRosterVersioningAvailable(boolean enabled){ 759d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen isRosterVersioningAvailable = enabled; 760d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 761d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 762d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 763d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if an available presence should be sent when logging in while reconnecting. 764d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 765d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if an available presence should be sent when logging in while reconnecting 766d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 767d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen boolean isSendPresence() { 768d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return sendPresence; 769d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 770d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 771d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen void setLoginInfo(String username, String password, String resource) { 772d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.username = username; 773d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.password = password; 774d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.resource = resource; 775d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 776d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 777d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private void initHostAddresses(String host, int port) { 778d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen hostAddresses = new ArrayList<HostAddress>(1); 779d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen HostAddress hostAddress; 780d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen try { 781d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen hostAddress = new HostAddress(host, port); 782d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } catch (Exception e) { 783d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen throw new IllegalStateException(e); 784d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 785d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen hostAddresses.add(hostAddress); 786d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 787d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 788