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