📄 remoterequesthandlertunnel.java
字号:
package com.sslexplorer.forwarding;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.maverick.multiplex.MultiplexedConnection;
import com.sslexplorer.boot.RequestHandlerTunnel;
import com.sslexplorer.core.CoreServlet;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class RemoteRequestHandlerTunnel implements RequestHandlerTunnel {
static Log log = LogFactory.getLog(RemoteRequestHandlerTunnel.class);
MultiplexedConnection con;
String addr;
int port;
String hostToConnect;
int portToConnect;
ServerSocket server;
Thread t;
VPNListeningSocket vpnSocket;
public RemoteRequestHandlerTunnel(String addr,
int port,
String hostToConnect,
int portToConnect,
VPNListeningSocket vpnSocket) throws IOException {
this.addr = addr;
this.port = port;
this.hostToConnect = hostToConnect;
this.portToConnect = portToConnect;
this.vpnSocket = vpnSocket;
}
public void tunnel(InputStream in, OutputStream out) {
try {
vpnSocket.addListener(new Runnable() {
public void run() {
close();
}
});
this.con = new MultiplexedConnection(10, 0, 0, in, out, null);
server = new ServerSocket(port, 50, InetAddress.getByName(addr));
Socket socket;
while ((socket = server.accept()) != null) {
RemoteForwardingChannel channel = new RemoteForwardingChannel(socket,
hostToConnect, portToConnect, vpnSocket);
try {
con.openChannel(channel);
} catch(IOException ex) {
// Channel failed to open
if (log.isInfoEnabled())
log.info("Failed to open remote forwarding channel", ex);
break;
}
}
} catch (IOException ex) {
if (log.isInfoEnabled())
log.info("ServerSocket failed to bind or accept", ex);
} finally {
close();
}
}
private synchronized void closeSocket() {
if (log.isInfoEnabled())
log.info("Closing socket " + addr + ":" + port);
if (server != null) {
try {
server.close();
} catch (Throwable t) {}
server = null;
}
}
public void close() {
if (log.isInfoEnabled())
log.info("Closing remote forwarding handler " + addr + ":" + port);
vpnSocket.closeActiveTunnels();
closeSocket();
con.disconnect(1, "Multiplexed connection tunnel is closing");
CoreServlet.getServlet().getConnectProxyMethodHandler().releasePort(port);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -