16bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu/*
26bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu * Copyright (C) 2009 The Android Open Source Project
36bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu *
46bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu * Licensed under the Apache License, Version 2.0 (the "License");
56bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu * you may not use this file except in compliance with the License.
66bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu * You may obtain a copy of the License at
76bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu *
86bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu *      http://www.apache.org/licenses/LICENSE-2.0
96bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu *
106bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu * Unless required by applicable law or agreed to in writing, software
116bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu * distributed under the License is distributed on an "AS IS" BASIS,
126bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu * See the License for the specific language governing permissions and
146bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu * limitations under the License.
156bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu */
166bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
176bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhupackage com.android.dumprendertree.forwarder;
186bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
196bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhuimport java.io.BufferedReader;
206bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhuimport java.io.File;
216bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhuimport java.io.FileReader;
226bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhuimport java.io.IOException;
236bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
248b85dceadf281705a94d7546556fa5969364a658Christian Mehlmauerimport android.os.Environment;
256bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhuimport android.util.Log;
266bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
276bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhupublic class ForwardService {
286bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
29d467347d7301043664c2c4b5a05170ae1b7b0afdGuang Zhu    private ForwardServer fs8000, fs8080, fs8443;
306bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
316bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    private static ForwardService inst;
326bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
336bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    private static final String LOGTAG = "ForwardService";
346bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
356bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    private static final String DEFAULT_TEST_HOST = "android-browser-test.mtv.corp.google.com";
366bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
378b85dceadf281705a94d7546556fa5969364a658Christian Mehlmauer    private static final String FORWARD_HOST_CONF =
388b85dceadf281705a94d7546556fa5969364a658Christian Mehlmauer        Environment.getExternalStorageDirectory() + "/drt_forward_host.txt";
396bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
406bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    private ForwardService() {
416bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        int addr = getForwardHostAddr();
426bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        if (addr != -1) {
43d467347d7301043664c2c4b5a05170ae1b7b0afdGuang Zhu            fs8000 = new ForwardServer(8000, addr, 8000);
446bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            fs8080 = new ForwardServer(8080, addr, 8080);
456bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            fs8443 = new ForwardServer(8443, addr, 8443);
466bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        }
476bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    }
486bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
496bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    public static ForwardService getForwardService() {
506bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        if (inst == null) {
516bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            inst = new ForwardService();
526bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        }
536bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        return inst;
546bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    }
556bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
566bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    public void startForwardService() {
576bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        try {
58d467347d7301043664c2c4b5a05170ae1b7b0afdGuang Zhu            if (fs8000 != null)
59d467347d7301043664c2c4b5a05170ae1b7b0afdGuang Zhu                fs8000.start();
606bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            if (fs8080 != null)
616bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                fs8080.start();
626bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            if (fs8443 != null)
636bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                fs8443.start();
646bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        } catch (IOException ioe) {
656bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            Log.w(LOGTAG, "failed to start forwarder. http tests will fail.", ioe);
666bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            return;
676bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        }
686bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    }
696bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
706bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    public void stopForwardService() {
71d467347d7301043664c2c4b5a05170ae1b7b0afdGuang Zhu        if (fs8000 != null) {
72d467347d7301043664c2c4b5a05170ae1b7b0afdGuang Zhu            fs8000.stop();
73d467347d7301043664c2c4b5a05170ae1b7b0afdGuang Zhu            fs8000 = null;
746bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        }
756bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        if (fs8080 != null) {
766bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            fs8080.stop();
776bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            fs8080 = null;
786bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        }
796bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        if (fs8443 != null) {
806bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            fs8443.stop();
816bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            fs8443 = null;
826bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        }
836bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        Log.v(LOGTAG, "forwarders stopped.");
846bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    }
856bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu
866bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    private static int getForwardHostAddr() {
876bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        int addr = -1;
886bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        String host = null;
896bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        File forwardHostConf = new File(FORWARD_HOST_CONF);
906bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        if (forwardHostConf.isFile()) {
916bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            BufferedReader hostReader = null;
926bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            try {
936bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                hostReader = new BufferedReader(new FileReader(forwardHostConf));
946bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                host = hostReader.readLine();
956bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                Log.v(LOGTAG, "read forward host from file: " + host);
966bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            } catch (IOException ioe) {
976bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                Log.v(LOGTAG, "cannot read forward host from file", ioe);
986bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            } finally {
996bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                if (hostReader != null) {
1006bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                    try {
1016bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                        hostReader.close();
1026bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                    } catch (IOException ioe) {
1036bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                        // burn!!!
1046bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                    }
1056bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu                }
1066bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            }
1076bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        }
1086bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        if (host == null || host.length() == 0)
1096bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            host = DEFAULT_TEST_HOST;
1106bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        try {
1116bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            addr = AdbUtils.resolve(host);
1126bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        } catch (IOException ioe) {
1136bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu            Log.e(LOGTAG, "failed to resolve server address", ioe);
1146bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        }
1156bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu        return addr;
1166bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu    }
1176bf18bae60ae1ff0bf2407e8db115cbbab6f1b84Guang Zhu}
118