Statistics
| Branch: | Revision:

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

History | View | Annotate | Download (2 kB)

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

    
3
import android.content.Context;
4

    
5
import org.apache.http.HttpVersion;
6
import org.apache.http.conn.ClientConnectionManager;
7
import org.apache.http.conn.scheme.PlainSocketFactory;
8
import org.apache.http.conn.scheme.Scheme;
9
import org.apache.http.conn.scheme.SchemeRegistry;
10
import org.apache.http.conn.ssl.SSLSocketFactory;
11
import org.apache.http.impl.client.DefaultHttpClient;
12
import org.apache.http.impl.conn.SingleClientConnManager;
13
import org.apache.http.params.BasicHttpParams;
14
import org.apache.http.params.CoreProtocolPNames;
15
import org.apache.http.params.HttpParams;
16

    
17
import com.rackspacecloud.android.R;
18

    
19
import java.io.InputStream;
20
import java.security.KeyStore;
21

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

    
33
        final Context context;
34
/*
35
        public CustomHttpClient(Context context, HttpParams params) {
36
                super(params);
37
                this.context = context;
38
        }
39
        */
40
        public CustomHttpClient(Context context) {
41
                super();
42
                this.context = context;
43
        }
44
        
45
        @Override
46
        protected ClientConnectionManager createClientConnectionManager() {
47
                SchemeRegistry registry = new SchemeRegistry();
48
                registry.register(new Scheme("http", PlainSocketFactory
49
                                .getSocketFactory(), 80));
50
                registry.register(new Scheme("https", newSslSocketFactory(), 443));
51
                return new SingleClientConnManager(getParams(), registry);
52
        }
53

    
54
        private SSLSocketFactory newSslSocketFactory() {
55
                try {
56
                        KeyStore trusted = KeyStore.getInstance("BKS");
57
                        InputStream in = context.getResources().openRawResource(
58
                                        R.raw.android231);
59
                        try {
60
                                trusted.load(in, "changeit".toCharArray());
61
                        } finally {
62
                                in.close();
63
                        }
64
                        return new SSLSocketFactory(trusted);
65
                } catch (Exception e) {
66
                        throw new AssertionError(e);
67
                }
68
        }
69
}