From 4c49ca298aba62305fca8fbf0766283db44aec48 Mon Sep 17 00:00:00 2001 From: tromey Date: Wed, 28 Mar 2007 01:02:10 +0000 Subject: [PATCH] 2007-03-27 Casey Marshall PR classpath/31302: * gnu/javax/net/ssl/provider/SSLSocketImpl.java (SSLSocketImpl): Always make a new socket. (bind, connect, getInetAddress, getLocalAddress, getPort, getLocalPort, getRemoteSocketAddress, getLocalSocketAddress, setTcpNoDelay, getTcpNoDelay, setSoLinger, getSoLinger, setOOBInline, getOOBInline, setSoTimeout, getSoTimeout, setSendBufferSize, getSendBufferSize, setReceiveBufferSize, getReceiveBufferSize, setKeepAlive, getKeepAlive, setTrafficClass, getTrafficClass, setReuseAddress, getReuseAddress, close, shutdownInput, shutdownOutput, isConnected, isBound, isClosed, isInputShutdown, isOutputShutdown): Always use 'underlyingSocket'. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123285 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/classpath/ChangeLog | 16 ++ .../gnu/javax/net/ssl/provider/SSLSocketImpl.java | 169 +++++---------------- .../gnu/javax/net/ssl/provider/SSLSocketImpl.class | Bin 16460 -> 15480 bytes 3 files changed, 54 insertions(+), 131 deletions(-) diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog index 7c1e39103a2..376c072852d 100644 --- a/libjava/classpath/ChangeLog +++ b/libjava/classpath/ChangeLog @@ -1,3 +1,19 @@ +2007-03-27 Casey Marshall + + PR classpath/31302: + * gnu/javax/net/ssl/provider/SSLSocketImpl.java (SSLSocketImpl): + Always make a new socket. + (bind, connect, getInetAddress, getLocalAddress, getPort, + getLocalPort, getRemoteSocketAddress, getLocalSocketAddress, + setTcpNoDelay, getTcpNoDelay, setSoLinger, getSoLinger, + setOOBInline, getOOBInline, setSoTimeout, getSoTimeout, + setSendBufferSize, getSendBufferSize, setReceiveBufferSize, + getReceiveBufferSize, setKeepAlive, getKeepAlive, setTrafficClass, + getTrafficClass, setReuseAddress, getReuseAddress, close, + shutdownInput, shutdownOutput, isConnected, isBound, isClosed, + isInputShutdown, isOutputShutdown): Always use + 'underlyingSocket'. + 2007-03-27 Tom Tromey PR classpath/31303: diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/SSLSocketImpl.java b/libjava/classpath/gnu/javax/net/ssl/provider/SSLSocketImpl.java index 0181b66d854..eead7258bbc 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/SSLSocketImpl.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/SSLSocketImpl.java @@ -200,7 +200,7 @@ public class SSLSocketImpl extends SSLSocket public SSLSocketImpl(SSLContextImpl contextImpl, String host, int port) { - this(contextImpl, host, port, null, false); + this(contextImpl, host, port, new Socket(), true); } public SSLSocketImpl(SSLContextImpl contextImpl, String host, int port, @@ -412,17 +412,8 @@ public class SSLSocketImpl extends SSLSocket ByteBuffer emptyBuffer = ByteBuffer.allocate(0); SSLEngineResult result = null; - DataInputStream sockIn = null; - if (underlyingSocket != null) - sockIn = new DataInputStream(underlyingSocket.getInputStream()); - else - sockIn = new DataInputStream(super.getInputStream()); - - OutputStream sockOut = null; - if (underlyingSocket != null) - sockOut = underlyingSocket.getOutputStream(); - else - sockOut = super.getOutputStream(); + DataInputStream sockIn = new DataInputStream(underlyingSocket.getInputStream()); + OutputStream sockOut = underlyingSocket.getOutputStream(); try { @@ -550,69 +541,48 @@ public class SSLSocketImpl extends SSLSocket @Override public void bind(SocketAddress bindpoint) throws IOException { - if (underlyingSocket != null) - underlyingSocket.bind(bindpoint); - else - super.bind(bindpoint); + underlyingSocket.bind(bindpoint); } @Override public void connect(SocketAddress endpoint) throws IOException { - if (underlyingSocket != null) - underlyingSocket.connect(endpoint); - else - super.connect(endpoint); + underlyingSocket.connect(endpoint); } @Override public void connect(SocketAddress endpoint, int timeout) throws IOException { - if (underlyingSocket != null) - underlyingSocket.connect(endpoint, timeout); - else - super.connect(endpoint, timeout); + underlyingSocket.connect(endpoint, timeout); } @Override public InetAddress getInetAddress() { - if (underlyingSocket != null) - return underlyingSocket.getInetAddress(); - return super.getInetAddress(); + return underlyingSocket.getInetAddress(); } @Override public InetAddress getLocalAddress() { - if (underlyingSocket != null) - return underlyingSocket.getLocalAddress(); - return super.getLocalAddress(); + return underlyingSocket.getLocalAddress(); } @Override public int getPort() { - if (underlyingSocket != null) - return underlyingSocket.getPort(); - return super.getPort(); + return underlyingSocket.getPort(); } @Override public int getLocalPort() { - if (underlyingSocket != null) - return underlyingSocket.getLocalPort(); - return super.getLocalPort(); + return underlyingSocket.getLocalPort(); } @Override public SocketAddress getRemoteSocketAddress() { - if (underlyingSocket != null) - return underlyingSocket.getRemoteSocketAddress(); - return super.getRemoteSocketAddress(); + return underlyingSocket.getRemoteSocketAddress(); } public SocketAddress getLocalSocketAddress() { - if (underlyingSocket != null) - return underlyingSocket.getLocalSocketAddress(); - return super.getLocalSocketAddress(); + return underlyingSocket.getLocalSocketAddress(); } @Override public SocketChannel getChannel() @@ -632,32 +602,22 @@ public class SSLSocketImpl extends SSLSocket @Override public void setTcpNoDelay(boolean on) throws SocketException { - if (underlyingSocket != null) - underlyingSocket.setTcpNoDelay(on); - else - super.setTcpNoDelay(on); + underlyingSocket.setTcpNoDelay(on); } @Override public boolean getTcpNoDelay() throws SocketException { - if (underlyingSocket != null) - return underlyingSocket.getTcpNoDelay(); - return super.getTcpNoDelay(); + return underlyingSocket.getTcpNoDelay(); } @Override public void setSoLinger(boolean on, int linger) throws SocketException { - if (underlyingSocket != null) - underlyingSocket.setSoLinger(on, linger); - else - super.setSoLinger(on, linger); + underlyingSocket.setSoLinger(on, linger); } public int getSoLinger() throws SocketException { - if (underlyingSocket != null) - return underlyingSocket.getSoLinger(); - return super.getSoLinger(); + return underlyingSocket.getSoLinger(); } @Override public void sendUrgentData(int x) throws IOException @@ -667,167 +627,114 @@ public class SSLSocketImpl extends SSLSocket @Override public void setOOBInline(boolean on) throws SocketException { - if (underlyingSocket != null) - underlyingSocket.setOOBInline(on); - else - super.setOOBInline(on); + underlyingSocket.setOOBInline(on); } @Override public boolean getOOBInline() throws SocketException { - if (underlyingSocket != null) - return underlyingSocket.getOOBInline(); - return super.getOOBInline(); + return underlyingSocket.getOOBInline(); } @Override public void setSoTimeout(int timeout) throws SocketException { - if (underlyingSocket != null) - underlyingSocket.setSoTimeout(timeout); - else - super.setSoTimeout(timeout); + underlyingSocket.setSoTimeout(timeout); } @Override public int getSoTimeout() throws SocketException { - if (underlyingSocket != null) - return underlyingSocket.getSoTimeout(); - return super.getSoTimeout(); + return underlyingSocket.getSoTimeout(); } @Override public void setSendBufferSize(int size) throws SocketException { - if (underlyingSocket != null) - underlyingSocket.setSendBufferSize(size); - else - super.setSendBufferSize(size); + underlyingSocket.setSendBufferSize(size); } @Override public int getSendBufferSize() throws SocketException { - if (underlyingSocket != null) - return underlyingSocket.getSendBufferSize(); - return super.getSendBufferSize(); + return underlyingSocket.getSendBufferSize(); } @Override public void setReceiveBufferSize(int size) throws SocketException { - if (underlyingSocket != null) - underlyingSocket.setReceiveBufferSize(size); - else - underlyingSocket.setReceiveBufferSize(size); + underlyingSocket.setReceiveBufferSize(size); } @Override public int getReceiveBufferSize() throws SocketException { - if (underlyingSocket != null) - return underlyingSocket.getReceiveBufferSize(); - return super.getReceiveBufferSize(); + return underlyingSocket.getReceiveBufferSize(); } @Override public void setKeepAlive(boolean on) throws SocketException { - if (underlyingSocket != null) - underlyingSocket.setKeepAlive(on); - else - super.setKeepAlive(on); + underlyingSocket.setKeepAlive(on); } @Override public boolean getKeepAlive() throws SocketException { - if (underlyingSocket != null) - return underlyingSocket.getKeepAlive(); - return super.getKeepAlive(); + return underlyingSocket.getKeepAlive(); } @Override public void setTrafficClass(int tc) throws SocketException { - if (underlyingSocket != null) - underlyingSocket.setTrafficClass(tc); - else - super.setTrafficClass(tc); + underlyingSocket.setTrafficClass(tc); } @Override public int getTrafficClass() throws SocketException { - if (underlyingSocket != null) - return underlyingSocket.getTrafficClass(); - return super.getTrafficClass(); + return underlyingSocket.getTrafficClass(); } @Override public void setReuseAddress(boolean reuseAddress) throws SocketException { - if (underlyingSocket != null) - underlyingSocket.setReuseAddress(reuseAddress); - else - super.setReuseAddress(reuseAddress); + underlyingSocket.setReuseAddress(reuseAddress); } @Override public boolean getReuseAddress() throws SocketException { - if (underlyingSocket != null) - return underlyingSocket.getReuseAddress(); - return super.getReuseAddress(); + return underlyingSocket.getReuseAddress(); } @Override public void close() throws IOException { // XXX closure alerts. - if (underlyingSocket != null && autoClose) + if (autoClose) underlyingSocket.close(); - else - super.close(); } @Override public void shutdownInput() throws IOException { - if (underlyingSocket != null) - underlyingSocket.shutdownInput(); - else - super.shutdownInput(); + underlyingSocket.shutdownInput(); } @Override public void shutdownOutput() throws IOException { - if (underlyingSocket != null) - underlyingSocket.shutdownOutput(); - else - super.shutdownOutput(); + underlyingSocket.shutdownOutput(); } @Override public boolean isConnected() { - if (underlyingSocket != null) - return underlyingSocket.isConnected(); - return super.isConnected(); + return underlyingSocket.isConnected(); } @Override public boolean isBound() { - if (underlyingSocket != null) - return underlyingSocket.isBound(); - return super.isBound(); + return underlyingSocket.isBound(); } @Override public boolean isClosed() { - if (underlyingSocket != null) - return underlyingSocket.isClosed(); - return super.isClosed(); + return underlyingSocket.isClosed(); } @Override public boolean isInputShutdown() { - if (underlyingSocket != null) - return underlyingSocket.isInputShutdown(); - return super.isInputShutdown(); + return underlyingSocket.isInputShutdown(); } @Override public boolean isOutputShutdown() { - if (underlyingSocket != null) - return underlyingSocket.isOutputShutdown(); - return super.isOutputShutdown(); + return underlyingSocket.isOutputShutdown(); } } diff --git a/libjava/classpath/lib/gnu/javax/net/ssl/provider/SSLSocketImpl.class b/libjava/classpath/lib/gnu/javax/net/ssl/provider/SSLSocketImpl.class index 8c53151598da9a6fd79bd15a5fab3790310f0b02..e966b4d0c4226402efda02f489b8ef6f48a64216 100644 GIT binary patch literal 15480 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 literal 16460 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