package net.i2p.util; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.SocketAddress; import java.nio.channels.SocketChannel; /** * A simple in-JVM Socket using Piped Streams. * We use port numbers just like regular sockets. * Can only connect to InternalServerSocket. * @since 0.7.9 */ public class InternalSocket extends Socket { private InputStream _is; private OutputStream _os; /** server side */ InternalSocket(InputStream is, OutputStream os) { _is = is; _os = os; } /** * client side * @param port > 0 */ public InternalSocket(int port) throws IOException { if (port <= 0) throw new IOException("bad port number"); InternalServerSocket.internalConnect(port, this); } /** * Convenience method to return either a Socket or an InternalSocket * @param port > 0 */ public static Socket getSocket(String host, int port) throws IOException { if (System.getProperty("router.version") != null && (host.equals("127.0.0.1") || host.equals("localhost"))) { try { return new InternalSocket(port); } catch (IOException ioe) {} // guess it wasn't really internal... } return new Socket(host, port); } @Override public InputStream getInputStream() { return _is; } @Override public OutputStream getOutputStream() { return _os; } void setInputStream(InputStream is) { _is = is; } void setOutputStream(OutputStream os) { _os = os; } @Override public synchronized void close() { try { if (_is != null) { _is.close(); _is = null; } } catch (IOException ie) {} try { if (_os != null) { _os.close(); _os = null; } } catch (IOException ie) {} } @Override public synchronized boolean isClosed() { return _is == null || _os == null; } @Override public String toString() { return ("Internal socket"); } // ignored stuff /** warning - unsupported */ @Override public void setSoTimeout(int timeout) {} @Override public int getSoTimeout () { return 0; } // everything below here unsupported /** @deprecated unsupported */ @Deprecated @Override public void bind(SocketAddress endpoint) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void connect(SocketAddress endpoint) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void connect(SocketAddress endpoint, int timeout) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public SocketChannel getChannel() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public InetAddress getInetAddress() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public boolean getKeepAlive() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public InetAddress getLocalAddress() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public int getLocalPort() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public SocketAddress getLocalSocketAddress() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public boolean getOOBInline() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public int getPort() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public int getReceiveBufferSize() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public SocketAddress getRemoteSocketAddress() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public boolean getReuseAddress() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public int getSendBufferSize() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public int getSoLinger() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public boolean getTcpNoDelay() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public int getTrafficClass() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public boolean isBound() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public boolean isConnected() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public boolean isInputShutdown() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public boolean isOutputShutdown() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void sendUrgentData(int data) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void setKeepAlive(boolean on) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void setOOBInline(boolean on) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void setReceiveBufferSize(int size) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void setReuseAddress(boolean on) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void setSendBufferSize(int size) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void setSoLinger(boolean on, int linger) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void setTcpNoDelay(boolean on) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void setTrafficClass(int cize) { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void shutdownInput() { throw new UnsupportedOperationException(); } /** @deprecated unsupported */ @Deprecated @Override public void shutdownOutput() { throw new UnsupportedOperationException(); } }