1997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/**
2997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Digi-Key
3997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * http://www.digikey.com
4997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu *
5997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright 2010 Logicopolis Technology Inc. All rights reserved.
6997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * http://www.logicopolis.com
7997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */
8997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
9997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupackage org.ksoap2.transport;
10997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
11997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.IOException;
12997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
13997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/**
14997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * KeepAliveHttpsTransport deals with the problems with the Android ssl libraries having trouble with certificates and
15997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * certificate authorities somehow messing up connecting/needing reconnects. Added as generic class for SE since it
16997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * might be useful in SE environments as well and can be used as an example to create your own transport
17997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * implementations.
18997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu *
19997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @author Manfred Moser <manfred@simpligility.com>
20997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu *
21997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @see "http://groups.google.com/group/android-developers/browse_thread/thread/3dcf62e7886a213/21f912bb90a011d6"
22997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @see "http://code.google.com/p/android/issues/detail?id=7074"
23997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @see "http://crazybob.org/2010_02_01_crazyboblee_archive.html"
24997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */
25997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupublic class KeepAliveHttpsTransportSE extends HttpsTransportSE
26997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu{
27997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    private final String host;
28997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    private final int port;
29997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    private final String file;
30997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    private final int timeout;
31997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    private ServiceConnection serviceConnection;
32997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
33997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public KeepAliveHttpsTransportSE(String host, int port, String file, int timeout) {
34997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu        super(host, port, file, timeout);
35997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu        this.host = host;
36997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu        this.port = port;
37997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu        this.file = file;
38997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu        this.timeout = timeout;
39997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    }
40997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
41997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    /**
42997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * Get a service connection. Returns an implementation of {@link org.ksoap2.transport.ServiceConnectionSE} that
43997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * ignores "Connection: close" request property setting and has "Connection: keep-alive" always set and is uses
44997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * a https connection.
45997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     * @see org.ksoap2.transport.HttpTransportSE#getServiceConnection()
46997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu     */
47997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    //@Override
48997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    public ServiceConnection getServiceConnection() throws IOException
49997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    {
50997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu        if (serviceConnection == null) {
51997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu            serviceConnection = new HttpsServiceConnectionSEIgnoringConnectionClose(host, port,
52997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu                    file, timeout);
53997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu            serviceConnection.setRequestProperty("Connection", "keep-alive");
54997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu        }
55997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu        return serviceConnection;
56997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu    }
57997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu
58997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu}
59