summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2011-02-07 13:46:35 -0800
committerMark Spruiell <mes@zeroc.com>2011-02-07 13:46:35 -0800
commit139d6a7e6449eb87fedddd7b0a45fcc823b3665e (patch)
treeb3c1bc23395326a6f28be83e813fa2ed3b463a04 /java
parentfixing version in eclipse/CHANGES (diff)
downloadice-139d6a7e6449eb87fedddd7b0a45fcc823b3665e.tar.bz2
ice-139d6a7e6449eb87fedddd7b0a45fcc823b3665e.tar.xz
ice-139d6a7e6449eb87fedddd7b0a45fcc823b3665e.zip
fixes for Android compatibility
Diffstat (limited to 'java')
-rw-r--r--java/src/IceInternal/Network.java35
-rw-r--r--java/src/IceSSL/AcceptorI.java3
-rw-r--r--java/src/IceSSL/ConnectorI.java2
-rw-r--r--java/src/IceSSL/Instance.java12
-rw-r--r--java/src/IceSSL/TransceiverI.java21
-rw-r--r--java/test/Ice/binding/AllTests.java8
6 files changed, 64 insertions, 17 deletions
diff --git a/java/src/IceInternal/Network.java b/java/src/IceInternal/Network.java
index 568a6c5d0f4..d2ccaec4f90 100644
--- a/java/src/IceInternal/Network.java
+++ b/java/src/IceInternal/Network.java
@@ -1103,9 +1103,7 @@ public final class Network
{
StringBuilder s = new StringBuilder(128);
s.append("local address = ");
- s.append(localAddr.getHostAddress());
- s.append(':');
- s.append(localPort);
+ s.append(addrToString(localAddr, localPort));
if(remoteAddr == null)
{
s.append("\nremote address = <not connected>");
@@ -1113,9 +1111,7 @@ public final class Network
else
{
s.append("\nremote address = ");
- s.append(remoteAddr.getHostAddress());
- s.append(':');
- s.append(remotePort);
+ s.append(addrToString(remoteAddr, remotePort));
}
return s.toString();
@@ -1150,6 +1146,33 @@ public final class Network
(bytes.length == 4 && protocol == EnableIPv4));
}
+ private static String
+ addrToString(java.net.InetAddress addr, int port)
+ {
+ StringBuffer s = new StringBuffer();
+
+ //
+ // In early Android releases, sockets don't correctly report their address and
+ // port information.
+ //
+
+ if(addr == null || addr.isAnyLocalAddress())
+ {
+ s.append("<not available>");
+ }
+ else
+ {
+ s.append(addr.getHostAddress());
+ }
+
+ if(port > 0)
+ {
+ s.append(':');
+ s.append(port);
+ }
+
+ return s.toString();
+ }
private static java.net.InetSocketAddress
getAddressImpl(String host, int port, int protocol, boolean server)
diff --git a/java/src/IceSSL/AcceptorI.java b/java/src/IceSSL/AcceptorI.java
index 563878e159e..ff3f1521bde 100644
--- a/java/src/IceSSL/AcceptorI.java
+++ b/java/src/IceSSL/AcceptorI.java
@@ -74,7 +74,8 @@ final class AcceptorI implements IceInternal.Acceptor
IceInternal.Network.setBlock(fd, false);
IceInternal.Network.setTcpBufSize(fd, _instance.communicator().getProperties(), _logger);
- engine = _instance.createSSLEngine(true);
+ java.net.InetSocketAddress peerAddr = (java.net.InetSocketAddress)fd.socket().getRemoteSocketAddress();
+ engine = _instance.createSSLEngine(true, peerAddr);
}
catch(RuntimeException ex)
{
diff --git a/java/src/IceSSL/ConnectorI.java b/java/src/IceSSL/ConnectorI.java
index 7bc0fa39d69..544a25c0d9b 100644
--- a/java/src/IceSSL/ConnectorI.java
+++ b/java/src/IceSSL/ConnectorI.java
@@ -38,7 +38,7 @@ final class ConnectorI implements IceInternal.Connector
boolean connected = IceInternal.Network.doConnect(fd, _addr);
try
{
- javax.net.ssl.SSLEngine engine = _instance.createSSLEngine(false);
+ javax.net.ssl.SSLEngine engine = _instance.createSSLEngine(false, _addr);
return new TransceiverI(_instance, engine, fd, _host, connected, false, "");
}
catch(RuntimeException ex)
diff --git a/java/src/IceSSL/Instance.java b/java/src/IceSSL/Instance.java
index 633e3530e31..25dc8da8486 100644
--- a/java/src/IceSSL/Instance.java
+++ b/java/src/IceSSL/Instance.java
@@ -704,9 +704,17 @@ class Instance
}
javax.net.ssl.SSLEngine
- createSSLEngine(boolean incoming)
+ createSSLEngine(boolean incoming, java.net.InetSocketAddress peerAddr)
{
- javax.net.ssl.SSLEngine engine = _context.createSSLEngine();
+ javax.net.ssl.SSLEngine engine;
+ if(peerAddr != null)
+ {
+ engine = _context.createSSLEngine(peerAddr.getHostName(), peerAddr.getPort());
+ }
+ else
+ {
+ engine = _context.createSSLEngine();
+ }
engine.setUseClientMode(!incoming);
String[] cipherSuites = filterCiphers(engine.getSupportedCipherSuites(), engine.getEnabledCipherSuites());
diff --git a/java/src/IceSSL/TransceiverI.java b/java/src/IceSSL/TransceiverI.java
index b84f4397921..c7efdbbf4f0 100644
--- a/java/src/IceSSL/TransceiverI.java
+++ b/java/src/IceSSL/TransceiverI.java
@@ -351,8 +351,21 @@ final class TransceiverI implements IceInternal.Transceiver
NativeConnectionInfo info = new NativeConnectionInfo();
java.net.Socket socket = _fd.socket();
- info.localAddress = socket.getLocalAddress().getHostAddress();
- info.localPort = socket.getLocalPort();
+ if(socket.getLocalAddress() != null)
+ {
+ info.localAddress = socket.getLocalAddress().getHostAddress();
+ info.localPort = socket.getLocalPort();
+ }
+ else
+ {
+ //
+ // On some platforms (e.g., early Android releases), sockets don't
+ // correctly return address information.
+ //
+ info.localAddress = "";
+ info.localPort = -1;
+ }
+
if(socket.getInetAddress() != null)
{
info.remoteAddress = socket.getInetAddress().getHostAddress();
@@ -402,6 +415,7 @@ final class TransceiverI implements IceInternal.Transceiver
switch(status)
{
case FINISHED:
+ case NOT_HANDSHAKING:
handshakeCompleted();
break;
case NEED_TASK:
@@ -470,9 +484,6 @@ final class TransceiverI implements IceInternal.Transceiver
status = result.getHandshakeStatus();
break;
}
- case NOT_HANDSHAKING:
- assert(false);
- break;
}
if(result != null)
diff --git a/java/test/Ice/binding/AllTests.java b/java/test/Ice/binding/AllTests.java
index adbf41466b7..e1f0315302c 100644
--- a/java/test/Ice/binding/AllTests.java
+++ b/java/test/Ice/binding/AllTests.java
@@ -241,8 +241,12 @@ public class AllTests
adapters[3] = com.createObjectAdapter("AdapterRandom14", "default");
adapters[4] = com.createObjectAdapter("AdapterRandom15", "default");
+ boolean shortenTest =
+ System.getProperty("os.name").startsWith("Windows") ||
+ System.getProperty("java.vendor").toLowerCase().indexOf("android") >= 0;
+
int count;
- if(System.getProperty("os.name").startsWith("Windows"))
+ if(shortenTest)
{
count = 60;
}
@@ -255,7 +259,7 @@ public class AllTests
while(--count > 0)
{
TestIntfPrx[] proxies;
- if(System.getProperty("os.name").startsWith("Windows"))
+ if(shortenTest)
{
if(count == 10)
{