273
|
1 /*
|
|
2 * Copyright (c) 2006-2013 Christian Plattner. All rights reserved.
|
|
3 * Please refer to the LICENSE.txt for licensing details.
|
|
4 */
|
|
5
|
|
6 package ch.ethz.ssh2;
|
|
7
|
|
8 import java.io.IOException;
|
|
9 import java.net.InetSocketAddress;
|
|
10 import java.net.ServerSocket;
|
|
11
|
|
12 import ch.ethz.ssh2.channel.ChannelManager;
|
|
13 import ch.ethz.ssh2.channel.LocalAcceptThread;
|
|
14
|
|
15 /**
|
|
16 * A <code>LocalPortForwarder</code> forwards TCP/IP connections to a local
|
|
17 * port via the secure tunnel to another host (which may or may not be identical
|
|
18 * to the remote SSH-2 server). Checkout {@link Connection#createLocalPortForwarder(int, String, int)}
|
|
19 * on how to create one.
|
307
|
20 *
|
273
|
21 * @author Christian Plattner
|
|
22 * @version 2.50, 03/15/10
|
|
23 */
|
307
|
24 public class LocalPortForwarder {
|
|
25 final ChannelManager cm;
|
273
|
26
|
307
|
27 final String host_to_connect;
|
273
|
28
|
307
|
29 final int port_to_connect;
|
273
|
30
|
307
|
31 final LocalAcceptThread lat;
|
273
|
32
|
307
|
33 LocalPortForwarder(ChannelManager cm, int local_port, String host_to_connect, int port_to_connect)
|
|
34 throws IOException {
|
|
35 this.cm = cm;
|
|
36 this.host_to_connect = host_to_connect;
|
|
37 this.port_to_connect = port_to_connect;
|
|
38 lat = new LocalAcceptThread(cm, local_port, host_to_connect, port_to_connect);
|
|
39 lat.setDaemon(true);
|
|
40 lat.start();
|
|
41 }
|
273
|
42
|
307
|
43 LocalPortForwarder(ChannelManager cm, InetSocketAddress addr, String host_to_connect, int port_to_connect)
|
|
44 throws IOException {
|
|
45 this.cm = cm;
|
|
46 this.host_to_connect = host_to_connect;
|
|
47 this.port_to_connect = port_to_connect;
|
|
48 lat = new LocalAcceptThread(cm, addr, host_to_connect, port_to_connect);
|
|
49 lat.setDaemon(true);
|
|
50 lat.start();
|
|
51 }
|
273
|
52
|
307
|
53 /**
|
|
54 * Return the local socket address of the {@link ServerSocket} used to accept connections.
|
|
55 * @return
|
|
56 */
|
|
57 public InetSocketAddress getLocalSocketAddress() {
|
|
58 return (InetSocketAddress) lat.getServerSocket().getLocalSocketAddress();
|
|
59 }
|
273
|
60
|
307
|
61 /**
|
|
62 * Stop TCP/IP forwarding of newly arriving connections.
|
|
63 *
|
|
64 * @throws IOException
|
|
65 */
|
|
66 public void close() throws IOException {
|
|
67 lat.stopWorking();
|
|
68 }
|
273
|
69 }
|