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