You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by od...@apache.org on 2010/09/06 15:12:02 UTC

svn commit: r993016 - in /harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse: SSLSessionContextImpl.java SSLSocketImpl.java

Author: odeakin
Date: Mon Sep  6 13:12:02 2010
New Revision: 993016

URL: http://svn.apache.org/viewvc?rev=993016&view=rev
Log:
Implement the removeOldest() method on SSLSessionContextImpl.

Modified:
    harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionContextImpl.java
    harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSocketImpl.java

Modified: harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionContextImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionContextImpl.java?rev=993016&r1=993015&r2=993016&view=diff
==============================================================================
--- harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionContextImpl.java (original)
+++ harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSessionContextImpl.java Mon Sep  6 13:12:02 2010
@@ -16,9 +16,12 @@
  */
 package org.apache.harmony.xnet.provider.jsse;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Hashtable;
+import java.util.List;
 
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.SSLSessionContext;
@@ -36,6 +39,8 @@ public class SSLSessionContextImpl imple
 
     private final Hashtable<IdKey, SSLSessionImpl> sessions = new Hashtable<IdKey, SSLSessionImpl>();
 
+    private final List<IdKey> keys = Collections.synchronizedList(new ArrayList<IdKey>(0));
+
     @SuppressWarnings("unchecked")
     public Enumeration getIds() {
         return new Enumeration() {
@@ -112,13 +117,19 @@ public class SSLSessionContextImpl imple
             removeOldest(1);
         }
         ses.context = this;
-        sessions.put(new IdKey(ses.getId()), ses);
+        IdKey idKey = new IdKey(ses.getId());
+        sessions.put(idKey, ses);
+        keys.add(idKey);
     }
 
     // removes invalidated/oldest sessions from the session cache
     private void removeOldest(int num) {
-        //TODO
-        // ses.context = null;
+        for (int i=0; i<num; i++) {
+            // The list is ordered. Since we always add to the end of it, 
+            // the element at index 0 will be the oldest
+            IdKey id = keys.remove(0);
+            sessions.remove(id);
+        }
     }
     
     private class IdKey {

Modified: harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSocketImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSocketImpl.java?rev=993016&r1=993015&r2=993016&view=diff
==============================================================================
--- harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSocketImpl.java (original)
+++ harmony/enhanced/java/branches/omd/classlib/modules/x-net/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLSocketImpl.java Mon Sep  6 13:12:02 2010
@@ -485,27 +485,30 @@ public class SSLSocketImpl extends SSLSo
                 throw new Error(e);
             }
 
+            SSLSessionContextImpl sessionContext;
             if (sslParameters.getUseClientMode()) {
                 if (logger != null) {
                     logger.println("SSLSocketImpl: CLIENT connecting");
                 }
 
                 sslConnectImpl(SSL, descriptor);
+                sessionContext = sslParameters.getClientSessionContext();
             } else {
                 if (logger != null) {
                     logger.println("SSLSocketImpl: SERVER accepting connection");
                 }
                 sslAcceptImpl(SSL, descriptor);
+                sessionContext = sslParameters.getServerSessionContext();
             }
+
+            session = new SSLSessionImpl(this, sslParameters, SSL);
+            sessionContext.putSession(session);
         }
 
         if (logger != null) {
             logger.println("SSLSocketImpl: Handshake complete, notifying listeners");
         }
 
-        session = new SSLSessionImpl(this, sslParameters, SSL);
-        sslParameters.getClientSessionContext().putSession(session);
-
         // Notify handshake completion listeners
         if (listeners != null) {
             HandshakeCompletedEvent event =