@@ -30,11 +30,11 @@ public class ReverseTcpProxyMuxClient extends Mux {
30
30
31
31
private static final Logger log = LoggerFactory .getLogger (ReverseTcpProxyMuxClient .class );
32
32
/**
33
- * 端口映射关系
34
- * key: 本地监听的TCP服务
33
+ * 端口映射关系<p>
34
+ * key: 本地监听的TCP服务<p>
35
35
* value: 经过 {@code top.meethigher.proxy.tcp.mux.ReverseTcpProxyMuxServer }转发的内网服务
36
36
*/
37
- protected final Map <MuxNetAddress , List < NetAddress > > mapper ;
37
+ protected final Map <MuxNetAddress , NetAddress > mapper ;
38
38
39
39
protected final NetServerOptions netServerOptions ;
40
40
@@ -46,7 +46,7 @@ public class ReverseTcpProxyMuxClient extends Mux {
46
46
47
47
protected final List <NetServer > netServers = new ArrayList <>();
48
48
49
- protected ReverseTcpProxyMuxClient (Vertx vertx , String secret , Map <MuxNetAddress , List < NetAddress > > mapper , NetServerOptions netServerOptions , NetClient netClient , NetAddress muxServer , String name ) {
49
+ public ReverseTcpProxyMuxClient (Vertx vertx , String secret , Map <MuxNetAddress , NetAddress > mapper , NetServerOptions netServerOptions , NetClient netClient , NetAddress muxServer , String name ) {
50
50
super (vertx , secret );
51
51
this .mapper = mapper ;
52
52
this .netServerOptions = netServerOptions ;
@@ -56,41 +56,43 @@ protected ReverseTcpProxyMuxClient(Vertx vertx, String secret, Map<MuxNetAddress
56
56
}
57
57
58
58
59
- protected void handleConnect (NetSocket src , MuxNetAddress local , List < NetAddress > backendServers ) {
59
+ protected void handleConnect (NetSocket src , MuxNetAddress localServer , NetAddress backendServer ) {
60
60
src .pause ();
61
- log .debug ("{}: source {} -- {} connected" , local .getName (), src .localAddress (), src .remoteAddress ());
62
- src .closeHandler (v -> log .debug ("{}: source {} -- {} closed" , local .getName (), src .localAddress (), src .remoteAddress ()));
61
+ log .debug ("{}: source {} -- {} connected" , localServer .getName (), src .localAddress (), src .remoteAddress ());
62
+ src .exceptionHandler (e -> log .error ("{}: source {} -- {} exception occurred" , localServer .getName (), src .localAddress (), src .remoteAddress (), e ))
63
+ .closeHandler (v -> log .debug ("{}: source {} -- {} closed" , localServer .getName (), src .localAddress (), src .remoteAddress ()));
63
64
netClient .connect (muxServer .getPort (), muxServer .getHost ())
64
65
.onFailure (e -> {
65
- log .error ("{}: failed to connect to {}" , local .getName (), muxServer , e );
66
+ log .error ("{}: failed to connect to {}" , localServer .getName (), muxServer , e );
66
67
src .close ();
67
68
})
68
69
.onSuccess (dst -> {
69
70
dst .pause ();
70
- log .debug ("{}: target {} -- {} connected" , local .getName (), dst .localAddress (), dst .remoteAddress ());
71
- dst .closeHandler (v -> log .debug ("{}: target {} -- {} closed" , local .getName (), dst .localAddress (), dst .remoteAddress ()));
71
+ log .debug ("{}: target {} -- {} connected" , localServer .getName (), dst .localAddress (), dst .remoteAddress ());
72
+ dst .exceptionHandler (e -> log .error ("{}: target {} -- {} exception occurred" , localServer .getName (), dst .localAddress (), dst .remoteAddress (), e ))
73
+ .closeHandler (v -> log .debug ("{}: target {} -- {} closed" , localServer .getName (), dst .localAddress (), dst .remoteAddress ()));
72
74
Handler <Void > writeSuccessHandler = t -> {
73
75
// https://github.com/meethigher/tcp-reverse-proxy/issues/12
74
76
// 将日志记录详细,便于排查问题
75
77
src .pipeTo (dst )
76
78
.onSuccess (v -> log .debug ("{}: source {} -- {} pipe to target {} -- {} succeeded" ,
77
- local .getName (), src .localAddress (), src .remoteAddress (), dst .localAddress (), dst .remoteAddress ()))
79
+ localServer .getName (), src .localAddress (), src .remoteAddress (), dst .localAddress (), dst .remoteAddress ()))
78
80
.onFailure (e -> log .error ("{}: source {} -- {} pipe to target {} -- {} failed" ,
79
- local .getName (), src .localAddress (), src .remoteAddress (), dst .localAddress (), dst .remoteAddress (), e ));
81
+ localServer .getName (), src .localAddress (), src .remoteAddress (), dst .localAddress (), dst .remoteAddress (), e ));
80
82
dst .pipeTo (src )
81
83
.onSuccess (v -> log .debug ("{}: target {} -- {} pipe to source {} -- {} succeeded" ,
82
- local .getName (), dst .localAddress (), dst .remoteAddress (), src .localAddress (), src .remoteAddress ()))
84
+ localServer .getName (), dst .localAddress (), dst .remoteAddress (), src .localAddress (), src .remoteAddress ()))
83
85
.onFailure (e -> log .error ("{}: target {} -- {} pipe to source {} -- {} failed" ,
84
- local .getName (), dst .localAddress (), dst .remoteAddress (), src .localAddress (), src .remoteAddress (), e ));
86
+ localServer .getName (), dst .localAddress (), dst .remoteAddress (), src .localAddress (), src .remoteAddress (), e ));
85
87
log .debug ("{}: source {} -- {} bound to target {} -- {} with backend server {}" ,
86
- local .getName (),
88
+ localServer .getName (),
87
89
src .localAddress (), src .remoteAddress (),
88
90
dst .localAddress (), dst .remoteAddress (),
89
- backendServers );
91
+ backendServer );
90
92
src .resume ();
91
93
dst .resume ();
92
94
};
93
- dst .write (this .encode (backendServers ))
95
+ dst .write (this .encode (backendServer ))
94
96
.onSuccess (writeSuccessHandler )
95
97
.onFailure (e -> {
96
98
dst .close ();
@@ -151,17 +153,11 @@ public static String generateName() {
151
153
public static ReverseTcpProxyMuxClient create () {
152
154
Vertx vertx = Vertx .vertx ();
153
155
return new ReverseTcpProxyMuxClient (vertx , Mux .SECRET_DEFAULT ,
154
- new HashMap <MuxNetAddress , List < NetAddress > >() {{
156
+ new HashMap <MuxNetAddress , NetAddress >() {{
155
157
put (new MuxNetAddress ("0.0.0.0" , 6666 , "ssh1" ),
156
- new ArrayList <NetAddress >() {{
157
- add (new NetAddress ("127.0.0.1" , 22 ));
158
- add (new NetAddress ("127.0.0.1" , 23 ));
159
- }});
158
+ new NetAddress ("127.0.0.1" , 22 ));
160
159
put (new MuxNetAddress ("0.0.0.0" , 6667 , "ssh2" ),
161
- new ArrayList <NetAddress >() {{
162
- add (new NetAddress ("127.0.0.1" , 22 ));
163
- add (new NetAddress ("127.0.0.1" , 23 ));
164
- }});
160
+ new NetAddress ("127.0.0.1" , 22 ));
165
161
166
162
}}, new NetServerOptions (), vertx .createNetClient (),
167
163
new NetAddress ("10.0.0.30" , 22 ),
0 commit comments