1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $RCSfile$
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Revision$
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Date$
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Copyright 2009 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 java.net.URI;
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.net.URISyntaxException;
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.ConnectionConfiguration;
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.proxy.ProxyInfo;
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Configuration to use while establishing the connection to the XMPP server via
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * HTTP binding.
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @see BOSHConnection
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Guenther Niess
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class BOSHConfiguration extends ConnectionConfiguration {
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private boolean ssl;
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private String file;
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public BOSHConfiguration(String xmppDomain) {
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        super(xmppDomain, 7070);
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        setSASLAuthenticationEnabled(true);
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        ssl = false;
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        file = "/http-bind/";
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public BOSHConfiguration(String xmppDomain, int port) {
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        super(xmppDomain, port);
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        setSASLAuthenticationEnabled(true);
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        ssl = false;
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        file = "/http-bind/";
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Create a HTTP Binding configuration.
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param https true if you want to use SSL
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. false for http://domain.lt:7070/http-bind).
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param host the hostname or IP address of the connection manager
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. domain.lt for http://domain.lt:7070/http-bind).
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param port the port of the connection manager
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. 7070 for http://domain.lt:7070/http-bind).
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param filePath the file which is described by the URL
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. /http-bind for http://domain.lt:7070/http-bind).
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param xmppDomain the XMPP service name
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. domain.lt for the user alice@domain.lt)
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public BOSHConfiguration(boolean https, String host, int port, String filePath, String xmppDomain) {
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        super(host, port, xmppDomain);
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        setSASLAuthenticationEnabled(true);
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        ssl = https;
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        file = (filePath != null ? filePath : "/");
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Create a HTTP Binding configuration.
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param https true if you want to use SSL
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. false for http://domain.lt:7070/http-bind).
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param host the hostname or IP address of the connection manager
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. domain.lt for http://domain.lt:7070/http-bind).
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param port the port of the connection manager
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. 7070 for http://domain.lt:7070/http-bind).
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param filePath the file which is described by the URL
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. /http-bind for http://domain.lt:7070/http-bind).
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param proxy the configuration of a proxy server.
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param xmppDomain the XMPP service name
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *             (e.g. domain.lt for the user alice@domain.lt)
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public BOSHConfiguration(boolean https, String host, int port, String filePath, ProxyInfo proxy, String xmppDomain) {
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        super(host, port, xmppDomain, proxy);
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        setSASLAuthenticationEnabled(true);
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        ssl = https;
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        file = (filePath != null ? filePath : "/");
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public boolean isProxyEnabled() {
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return (proxy != null && proxy.getProxyType() != ProxyInfo.ProxyType.NONE);
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public ProxyInfo getProxyInfo() {
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return proxy;
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getProxyAddress() {
107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return (proxy != null ? proxy.getProxyAddress() : null);
108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public int getProxyPort() {
111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return (proxy != null ? proxy.getProxyPort() : 8080);
112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public boolean isUsingSSL() {
115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return ssl;
116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public URI getURI() throws URISyntaxException {
119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (file.charAt(0) != '/') {
120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            file = '/' + file;
121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return new URI((ssl ? "https://" : "http://") + getHost() + ":" + getPort() + file);
123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
125