mirror of
https://github.com/hierynomus/sshj.git
synced 2025-12-06 15:20:54 +03:00
Removed Java 7 backport Socket utilities (#880)
This commit is contained in:
@@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C)2009 - SSHJ Contributors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package com.hierynomus.sshj.backport;
|
|
||||||
|
|
||||||
import net.schmizz.sshj.common.IOUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.net.*;
|
|
||||||
|
|
||||||
public class Jdk7HttpProxySocket extends Socket {
|
|
||||||
|
|
||||||
private Proxy httpProxy = null;
|
|
||||||
|
|
||||||
public Jdk7HttpProxySocket(Proxy proxy) {
|
|
||||||
super(proxy.type() == Proxy.Type.HTTP ? Proxy.NO_PROXY : proxy);
|
|
||||||
if (proxy.type() == Proxy.Type.HTTP) {
|
|
||||||
this.httpProxy = proxy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void connect(SocketAddress endpoint, int timeout) throws IOException {
|
|
||||||
if (httpProxy != null) {
|
|
||||||
connectHttpProxy(endpoint, timeout);
|
|
||||||
} else {
|
|
||||||
super.connect(endpoint, timeout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void connectHttpProxy(SocketAddress endpoint, int timeout) throws IOException {
|
|
||||||
super.connect(httpProxy.address(), timeout);
|
|
||||||
|
|
||||||
if (!(endpoint instanceof InetSocketAddress)) {
|
|
||||||
throw new SocketException("Expected an InetSocketAddress to connect to, got: " + endpoint);
|
|
||||||
}
|
|
||||||
InetSocketAddress isa = (InetSocketAddress) endpoint;
|
|
||||||
String httpConnect = "CONNECT " + isa.getHostName() + ":" + isa.getPort() + " HTTP/1.0\n\n";
|
|
||||||
getOutputStream().write(httpConnect.getBytes(IOUtils.UTF8));
|
|
||||||
checkAndFlushProxyResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkAndFlushProxyResponse()throws IOException {
|
|
||||||
InputStream socketInput = getInputStream();
|
|
||||||
byte[] tmpBuffer = new byte[512];
|
|
||||||
int len = socketInput.read(tmpBuffer, 0, tmpBuffer.length);
|
|
||||||
|
|
||||||
if (len == 0) {
|
|
||||||
throw new SocketException("Empty response from proxy");
|
|
||||||
}
|
|
||||||
|
|
||||||
String proxyResponse = new String(tmpBuffer, 0, len, IOUtils.UTF8);
|
|
||||||
|
|
||||||
// Expecting HTTP/1.x 200 OK
|
|
||||||
if (proxyResponse.contains("200")) {
|
|
||||||
// Flush any outstanding message in buffer
|
|
||||||
if (socketInput.available() > 0) {
|
|
||||||
socketInput.skip(socketInput.available());
|
|
||||||
}
|
|
||||||
// Proxy Connect Successful
|
|
||||||
} else {
|
|
||||||
throw new SocketException("Fail to create Socket\nResponse was:" + proxyResponse);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C)2009 - SSHJ Contributors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package com.hierynomus.sshj.backport;
|
|
||||||
|
|
||||||
import java.io.Closeable;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.Socket;
|
|
||||||
|
|
||||||
public class Sockets {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Java 7 and up have Socket implemented as Closeable, whereas Java6 did not have this inheritance.
|
|
||||||
* @param socket The socket to wrap as Closeable
|
|
||||||
* @return The (potentially wrapped) Socket as a Closeable.
|
|
||||||
*/
|
|
||||||
public static Closeable asCloseable(final Socket socket) {
|
|
||||||
if (Closeable.class.isAssignableFrom(socket.getClass())) {
|
|
||||||
return Closeable.class.cast(socket);
|
|
||||||
} else {
|
|
||||||
return new Closeable() {
|
|
||||||
@Override
|
|
||||||
public void close() throws IOException {
|
|
||||||
socket.close();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -22,8 +22,6 @@ import java.io.IOException;
|
|||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static com.hierynomus.sshj.backport.Sockets.asCloseable;
|
|
||||||
|
|
||||||
public class SocketStreamCopyMonitor
|
public class SocketStreamCopyMonitor
|
||||||
extends Thread {
|
extends Thread {
|
||||||
|
|
||||||
@@ -43,7 +41,7 @@ public class SocketStreamCopyMonitor
|
|||||||
await(y);
|
await(y);
|
||||||
} catch (IOException ignored) {
|
} catch (IOException ignored) {
|
||||||
} finally {
|
} finally {
|
||||||
IOUtils.closeQuietly(channel, asCloseable(socket));
|
IOUtils.closeQuietly(channel, socket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ import java.net.Socket;
|
|||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static com.hierynomus.sshj.backport.Sockets.asCloseable;
|
|
||||||
|
|
||||||
public class LocalPortForwarder {
|
public class LocalPortForwarder {
|
||||||
|
|
||||||
public static class ForwardedChannel
|
public static class ForwardedChannel
|
||||||
@@ -78,7 +76,7 @@ public class LocalPortForwarder {
|
|||||||
chan.open();
|
chan.open();
|
||||||
chan.start();
|
chan.start();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
IOUtils.closeQuietly(chan, asCloseable(socket));
|
IOUtils.closeQuietly(chan, socket);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user