1602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkpackage com.android.proxyhandler; 2602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 3602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport java.io.IOException; 4602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport java.io.InputStream; 5602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport java.io.OutputStream; 6602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkimport java.net.Socket; 7602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 8602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk/** 9602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk * @hide 10602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk */ 11602b232a06ede86999aa362a12eb28cbc782dc1dJason Monkpublic class SocketConnect extends Thread { 12602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 13602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk private InputStream from; 14602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk private OutputStream to; 15602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 16602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk public SocketConnect(Socket from, Socket to) throws IOException { 17602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk this.from = from.getInputStream(); 18602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk this.to = to.getOutputStream(); 19602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk start(); 20602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } 21602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 22602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk @Override 23602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk public void run() { 24602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk final byte[] buffer = new byte[512]; 25602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 26602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk try { 27602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk while (true) { 28602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk int r = from.read(buffer); 29602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk if (r < 0) { 30602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk break; 31602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } 32602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk to.write(buffer, 0, r); 33602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } 34602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk from.close(); 35602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk to.close(); 36602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } catch (IOException io) { 37602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 38602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } 39602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } 40602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 41602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk public static void connect(Socket first, Socket second) { 42602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk try { 43602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk SocketConnect sc1 = new SocketConnect(first, second); 44602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk SocketConnect sc2 = new SocketConnect(second, first); 45602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk try { 46602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk sc1.join(); 47602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } catch (InterruptedException e) { 48602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } 49602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk try { 50602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk sc2.join(); 51602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } catch (InterruptedException e) { 52602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } 53602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } catch (IOException e) { 54602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk e.printStackTrace(); 55602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } 56602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk } 57602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 58602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk 59602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk} 60