You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by re...@apache.org on 2010/05/14 07:42:44 UTC
svn commit: r944119 - in
/harmony/enhanced/java/trunk/classlib/modules/nio/src:
main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java
test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java
Author: regisxu
Date: Fri May 14 05:42:44 2010
New Revision: 944119
URL: http://svn.apache.org/viewvc?rev=944119&view=rev
Log:
SocketChannelImpl.SocketAdapter's remote address should be updated after channel connected
Modified:
harmony/enhanced/java/trunk/classlib/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java
harmony/enhanced/java/trunk/classlib/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java
Modified: harmony/enhanced/java/trunk/classlib/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/classlib/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java?rev=944119&r1=944118&r2=944119&view=diff
==============================================================================
--- harmony/enhanced/java/trunk/classlib/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java (original)
+++ harmony/enhanced/java/trunk/classlib/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java Fri May 14 05:42:44 2010
@@ -1006,6 +1006,47 @@ class SocketChannelImpl extends SocketCh
return new SocketChannelInputStream(channel);
}
+ @Override
+ public InetAddress getInetAddress() {
+ if (channel.connectAddress == null && super.getInetAddress() != null) {
+ channel.connectAddress = new InetSocketAddress(super.getInetAddress(), super.getPort());
+ }
+ if (channel.connectAddress == null) {
+ return null;
+ }
+ return channel.connectAddress.getAddress();
+ }
+
+ @Override
+ public SocketAddress getRemoteSocketAddress() {
+ if (channel.connectAddress == null && super.getInetAddress() != null) {
+ channel.connectAddress = new InetSocketAddress(super.getInetAddress(), super.getPort());
+ }
+ return channel.connectAddress;
+ }
+
+ @Override
+ public int getPort() {
+ if (channel.connectAddress == null && super.getInetAddress() != null) {
+ channel.connectAddress = new InetSocketAddress(super.getInetAddress(), super.getPort());
+ }
+ if (channel.connectAddress == null) {
+ return 0;
+ }
+ return channel.connectAddress.getPort();
+ }
+
+ @Override
+ public int getLocalPort() {
+ if (!isBound()) {
+ return -1;
+ }
+ if (channel.localPort == 0 && super.getLocalPort() != -1) {
+ channel.localPort = super.getLocalPort();
+ }
+ return channel.localPort;
+ }
+
/*
* Checks whether the channel is open.
*/
Modified: harmony/enhanced/java/trunk/classlib/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/classlib/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java?rev=944119&r1=944118&r2=944119&view=diff
==============================================================================
--- harmony/enhanced/java/trunk/classlib/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java (original)
+++ harmony/enhanced/java/trunk/classlib/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java Fri May 14 05:42:44 2010
@@ -369,6 +369,63 @@ public class SocketChannelTest extends T
}
}
+ public void testSocket_getInetAddress() throws Exception {
+ Socket socket = channel1.socket();
+ assertNull(socket.getInetAddress());
+
+ channel1.connect(localAddr1);
+
+ assertNotNull(socket.getInetAddress());
+ assertEquals(localAddr1.getAddress(), socket.getInetAddress());
+ }
+
+ public void testSocket_getRemoteSocketAddress() throws Exception {
+ Socket socket = channel1.socket();
+ assertNull(socket.getRemoteSocketAddress());
+
+ channel1.connect(localAddr1);
+
+ assertNotNull(socket.getRemoteSocketAddress());
+ assertEquals(localAddr1, socket.getRemoteSocketAddress());
+ }
+
+ public void testSocket_getPort() throws Exception {
+ Socket socket = channel1.socket();
+ assertEquals(0, socket.getPort());
+
+ channel1.connect(localAddr1);
+
+ assertEquals(localAddr1.getPort(), socket.getPort());
+ }
+
+ public void testSocket_getLocalAddress() throws Exception {
+ Socket socket = channel1.socket();
+ assertNotNull(socket.getLocalAddress());
+
+ channel1.connect(localAddr1);
+
+ assertNotNull(socket.getLocalAddress());
+ }
+
+ public void testSocket_getLocalSocketAddress() throws Exception {
+ Socket socket = channel1.socket();
+ assertNull(socket.getLocalSocketAddress());
+
+ channel1.connect(localAddr1);
+
+ assertNotNull(socket.getLocalSocketAddress());
+ }
+
+ public void testSocket_getLocalPort() throws Exception {
+ Socket socket = channel1.socket();
+ assertEquals(-1, socket.getLocalPort());
+
+ channel1.connect(localAddr1);
+
+ assertTrue(-1 != socket.getLocalPort());
+ assertTrue(0 != socket.getLocalPort());
+ }
+
private void assertSocketBeforeConnect(Socket s) throws IOException {
assertFalse(s.isBound());
assertFalse(s.isClosed());