Statistics
| Branch: | Revision:

root / src / com / rackspace / cloud / files / api / client / CustomHttpClient.java @ b347d5e3

History | View | Annotate | Download (1.7 kB)

1
package com.rackspace.cloud.files.api.client;
2

    
3
import android.content.Context;
4
import org.apache.http.conn.ClientConnectionManager;
5
import org.apache.http.conn.scheme.PlainSocketFactory;
6
import org.apache.http.conn.scheme.Scheme;
7
import org.apache.http.conn.scheme.SchemeRegistry;
8
import org.apache.http.conn.ssl.SSLSocketFactory;
9
import org.apache.http.impl.client.DefaultHttpClient;
10
import org.apache.http.impl.conn.SingleClientConnManager;
11

    
12
import com.rackspacecloud.android.R;
13

    
14
import java.io.InputStream;
15
import java.security.KeyStore;
16

    
17
/**
18
 * 
19
 * @author Chmouel Boudjnah <chmouel.boudjnah@rackspace.co.uk>
20
 * 
21
 *         Custom implementation of HTTPClient using the keystore (in bks
22
 *         format) from android 2.3.1 which allow us to connect to London
23
 *         CloudFiles SSL host which doesn't work with the default keystore in
24
 *         other version than 2.3.1.
25
 */
26
public class CustomHttpClient extends DefaultHttpClient {
27

    
28
        final Context context;
29

    
30
        public CustomHttpClient(Context context) {
31
                this.context = context;
32
        }
33

    
34
        @Override
35
        protected ClientConnectionManager createClientConnectionManager() {
36
                SchemeRegistry registry = new SchemeRegistry();
37
                registry.register(new Scheme("http", PlainSocketFactory
38
                                .getSocketFactory(), 80));
39
                registry.register(new Scheme("https", newSslSocketFactory(), 443));
40
                return new SingleClientConnManager(getParams(), registry);
41
        }
42

    
43
        private SSLSocketFactory newSslSocketFactory() {
44
                try {
45
                        KeyStore trusted = KeyStore.getInstance("BKS");
46
                        InputStream in = context.getResources().openRawResource(
47
                                        R.raw.android231);
48
                        try {
49
                                trusted.load(in, "changeit".toCharArray());
50
                        } finally {
51
                                in.close();
52
                        }
53
                        return new SSLSocketFactory(trusted);
54
                } catch (Exception e) {
55
                        throw new AssertionError(e);
56
                }
57
        }
58
}