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