package net.i2p.i2ptunnel.socks; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.nio.channels.SelectableChannel; import net.i2p.client.streaming.I2PSocket; import net.i2p.client.streaming.I2PSocketOptions; import net.i2p.data.DataFormatException; import net.i2p.data.Destination; /** * Wrapper around the Socket obtained from the Outproxy, which is a * wrapper around the Orchid Stream. * * @since 0.9.27 */ class SocketWrapper implements I2PSocket { private final Socket socket; private static final Destination DUMMY_DEST = new Destination(); static { try { DUMMY_DEST.fromByteArray(new byte[387]); } catch (DataFormatException dfe) { throw new RuntimeException(dfe); } } public SocketWrapper(Socket sock) { socket = sock; } /** * @return the Destination of this side of the socket. */ public Destination getThisDestination() { return DUMMY_DEST; } /** * @return the destination of the peer. */ public Destination getPeerDestination() { return DUMMY_DEST; } public InputStream getInputStream() throws IOException { return socket.getInputStream(); } public OutputStream getOutputStream() throws IOException { return socket.getOutputStream(); } /** * @return null always */ @Deprecated public SelectableChannel getChannel() { return null; } /** * @return null always */ public I2PSocketOptions getOptions() { return null; } /** * Does nothing */ public void setOptions(I2PSocketOptions options) {} public long getReadTimeout() { return -1; } public void setReadTimeout(long ms) {} public void close() throws IOException { socket.close(); } /** * Just calls close() * @since 0.9.30 */ public void reset() throws IOException { close(); } public boolean isClosed() { return socket.isClosed(); } /** * Deprecated, unimplemented, does nothing */ public void setSocketErrorListener(SocketErrorListener lsnr) {} /** * The remote port. * @return Default I2PSession.PORT_UNSPECIFIED (0) or PORT_ANY (0) */ public int getPort() { try { return socket.getPort(); } catch (UnsupportedOperationException uoe) { // prior to 1.2.2-0.2 return 0; } } /** * The local port. * @return 0 always */ public int getLocalPort() { return 0; } }