ProxyService.java revision 602b232a06ede86999aa362a12eb28cbc782dc1d
1602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkpackage com.android.proxyhandler;
2602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
3602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport android.app.Service;
4602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport android.content.Intent;
5602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport android.net.Proxy;
6602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport android.net.ProxyProperties;
7602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport android.os.Bundle;
8602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport android.os.IBinder;
9602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport android.text.TextUtils;
10602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
11602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk/**
12602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk * @hide
13602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk */
14602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkpublic class ProxyService extends Service {
15602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
16602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    private static ProxyServer server = null;
17602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
18602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    /** Keep these values up-to-date with PacManager.java */
19602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    public static final String KEY_PROXY = "keyProxy";
20602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    public static final String HOST = "localhost";
21602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    public static final int PORT = 8182;
22602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    public static final String EXCL_LIST = "";
23602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
24602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    @Override
25602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    public int onStartCommand(Intent intent, int flags, int startId) {
26602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        if (intent != null) {
27602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            handleCommand(intent);
28602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        }
29602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        return START_STICKY;
30602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    }
31602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
32602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    private void handleCommand(Intent intent) {
33602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        Bundle bundle = intent.getExtras();
34602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        ProxyProperties proxy = null;
35602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        if ((bundle != null) && bundle.containsKey(Proxy.EXTRA_PROXY_INFO)) {
36602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            proxy = bundle.getParcelable(Proxy.EXTRA_PROXY_INFO);
37602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            if ((proxy != null) && !TextUtils.isEmpty(proxy.getPacFileUrl())) {
38602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk                startProxy(proxy);
39602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            } else {
40602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk                stopSelf();
41602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            }
42602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        } else {
43602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            stopSelf();
44602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        }
45602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    }
46602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
47602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
48602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    private void startProxy(ProxyProperties proxy) {
49602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        if (server == null) {
50602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            server = new ProxyServer();
51602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            server.startServer();
52602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        }
53602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        server.setProxy(proxy);
54602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    }
55602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
56602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    @Override
57602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    public void onDestroy() {
58602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        if (server != null) {
59602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            server.stopServer();
60602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk            server = null;
61602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        }
62602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    }
63602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk
64602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    @Override
65602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    public IBinder onBind(Intent intent) {
66602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk        return null;
67602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk    }
68602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk}