summaryrefslogtreecommitdiffstats
path: root/x-net/src
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2009-12-15 15:32:28 -0800
committerElliott Hughes <enh@google.com>2009-12-15 15:44:38 -0800
commitecd469016485b59ea886faea126796af968a6b47 (patch)
treea4a7303ccc29dba9550443502f0e85e454904837 /x-net/src
parent58ee024b48f87139f268a1de5aa0f54fe5edb9c9 (diff)
downloadlibcore-ecd469016485b59ea886faea126796af968a6b47.zip
libcore-ecd469016485b59ea886faea126796af968a6b47.tar.gz
libcore-ecd469016485b59ea886faea126796af968a6b47.tar.bz2
Fix our SSLSession implementations to call valueUnbound on remove.
This addresses the other problem from the following abandoned change: https://android-git.corp.google.com/g/4743
Diffstat (limited to 'x-net/src')
-rw-r--r--x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSessionImpl.java15
-rw-r--r--x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java9
-rw-r--r--x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingListenerTest.java1
3 files changed, 18 insertions, 7 deletions
diff --git a/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSessionImpl.java b/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSessionImpl.java
index 9aa4b86..17cd088 100644
--- a/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSessionImpl.java
+++ b/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/OpenSSLSessionImpl.java
@@ -424,7 +424,7 @@ public class OpenSSLSessionImpl implements SSLSession {
((SSLSessionBindingListener) value)
.valueBound(new SSLSessionBindingEvent(this, name));
}
- if (old != null && old instanceof SSLSessionBindingListener) {
+ if (old instanceof SSLSessionBindingListener) {
((SSLSessionBindingListener) old)
.valueUnbound(new SSLSessionBindingEvent(this, name));
}
@@ -432,7 +432,12 @@ public class OpenSSLSessionImpl implements SSLSession {
/**
* Removes a link (name) with the specified value object of the SSL
- * session's application layer data. These links-to -data bounds are
+ * session's application layer data.
+ *
+ * <p>If the value object implements the <code>SSLSessionBindingListener</code>
+ * interface, the object will receive a <code>valueUnbound</code> notification.
+ *
+ * <p>These links-to -data bounds are
* monitored, as a matter of security, by the full machinery of the
* <code>AccessController</code> class.
*
@@ -444,7 +449,11 @@ public class OpenSSLSessionImpl implements SSLSession {
if (name == null) {
throw new IllegalArgumentException("Parameter is null");
}
- values.remove(name, AccessController.getContext());
+ Object old = values.remove(name, AccessController.getContext());
+ if (old instanceof SSLSessionBindingListener) {
+ SSLSessionBindingListener listener = (SSLSessionBindingListener) old;
+ listener.valueUnbound(new SSLSessionBindingEvent(this, name));
+ }
}
protected void finalize() {
diff --git a/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java b/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java
index 5d46568..cd74d57 100644
--- a/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java
+++ b/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionImpl.java
@@ -325,7 +325,7 @@ public class SSLSessionImpl implements SSLSession, Cloneable {
if (value instanceof SSLSessionBindingListener) {
((SSLSessionBindingListener) value).valueBound(new SSLSessionBindingEvent(this, name));
}
- if (old != null && old instanceof SSLSessionBindingListener) {
+ if (old instanceof SSLSessionBindingListener) {
((SSLSessionBindingListener) old).valueUnbound(new SSLSessionBindingEvent(this, name));
}
@@ -335,8 +335,11 @@ public class SSLSessionImpl implements SSLSession, Cloneable {
if (name == null) {
throw new IllegalArgumentException("Parameter is null");
}
- values.remove(new ValueKey(name));
-
+ Object old = values.remove(new ValueKey(name));
+ if (old instanceof SSLSessionBindingListener) {
+ SSLSessionBindingListener listener = (SSLSessionBindingListener) old;
+ listener.valueUnbound(new SSLSessionBindingEvent(this, name));
+ }
}
@Override
diff --git a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingListenerTest.java b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingListenerTest.java
index 566ff3c..7b26485 100644
--- a/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingListenerTest.java
+++ b/x-net/src/test/java/tests/api/javax/net/ssl/SSLSessionBindingListenerTest.java
@@ -91,7 +91,6 @@ public class SSLSessionBindingListenerTest extends TestCase {
method = "valueUnbound",
args = {SSLSessionBindingEvent.class}
)
- @KnownFailure("this will be fixed in donutburger")
public void test_valueUnbound() throws UnknownHostException, IOException {
SSLSocket sock = (SSLSocket) SSLSocketFactory.getDefault()
.createSocket();