@@ -107,17 +107,28 @@ protected boolean doHandle(Vertx vertx, NetSocket netSocket, TunnelMessageType t
107
107
TunnelMessage .OpenDataPortAck .Builder builder = TunnelMessage .OpenDataPortAck
108
108
.newBuilder ();
109
109
if (secret .equals (parsed .getSecret ())) {
110
- final DataProxyServer dataProxyServer = new DataProxyServer (vertx , parsed .getDataProxyName (), parsed .getDataProxyPort (), netSocket );
111
- if (dataProxyServer .startSync ()) {
112
- result = true ;
113
- builder .setSuccess (result ).setMessage ("success" );
114
- netSocket .write (encode (TunnelMessageType .OPEN_DATA_PORT_ACK ,
115
- builder .build ().toByteArray ()));
116
- authedSockets .put (netSocket , dataProxyServer );
117
- } else {
118
- builder .setSuccess (result ).setMessage ("fail to open data port " + parsed .getDataProxyPort ());
119
- netSocket .write (encode (TunnelMessageType .OPEN_DATA_PORT_ACK ,
120
- builder .build ().toByteArray ())).onComplete (ar -> netSocket .close ());
110
+ synchronized (ReverseTcpProxyTunnelServer .class ) {
111
+ // 判断dataProxyName是否唯一
112
+ for (DataProxyServer server : authedSockets .values ()) {
113
+ if (server .name .equals (parsed .getDataProxyName ())) {
114
+ builder .setSuccess (result ).setMessage (server .name + " already started" );
115
+ netSocket .write (encode (TunnelMessageType .OPEN_DATA_PORT_ACK ,
116
+ builder .build ().toByteArray ())).onComplete (ar -> netSocket .close ());
117
+ return result ;
118
+ }
119
+ }
120
+ final DataProxyServer dataProxyServer = new DataProxyServer (vertx , parsed .getDataProxyName (), parsed .getDataProxyPort (), netSocket );
121
+ if (dataProxyServer .startSync ()) {
122
+ result = true ;
123
+ builder .setSuccess (result ).setMessage ("success" );
124
+ netSocket .write (encode (TunnelMessageType .OPEN_DATA_PORT_ACK ,
125
+ builder .build ().toByteArray ()));
126
+ authedSockets .put (netSocket , dataProxyServer );
127
+ } else {
128
+ builder .setSuccess (result ).setMessage ("fail to open data port " + parsed .getDataProxyPort ());
129
+ netSocket .write (encode (TunnelMessageType .OPEN_DATA_PORT_ACK ,
130
+ builder .build ().toByteArray ())).onComplete (ar -> netSocket .close ());
131
+ }
121
132
}
122
133
123
134
} else {
0 commit comments