remm        2004/07/15 12:12:45

  Modified:    catalina/src/share/org/apache/catalina/session
                        ManagerBase.java
  Log:
  - Cosmetic refactoring (well, to be fair, it decreases the number of syncs when 
creating a session,
    but makes the sync a little longer, which can't be too bad) addressing the todos 
related to generateSessionId.
  
  Revision  Changes    Path
  1.30      +32 -39    
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java
  
  Index: ManagerBase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- ManagerBase.java  25 Jun 2004 23:56:25 -0000      1.29
  +++ ManagerBase.java  15 Jul 2004 19:12:45 -0000      1.30
  @@ -650,23 +650,6 @@
           session.setCreationTime(System.currentTimeMillis());
           session.setMaxInactiveInterval(this.maxInactiveInterval);
           String sessionId = generateSessionId();
  -
  -        String jvmRoute = getJvmRoute();
  -        // @todo Move appending of jvmRoute generateSessionId()???
  -        if (jvmRoute != null) {
  -            sessionId += '.' + jvmRoute;
  -        }
  -        synchronized (sessions) {
  -            while (sessions.get(sessionId) != null){ // Guarantee uniqueness
  -                duplicates++;
  -                sessionId = generateSessionId();
  -                // @todo Move appending of jvmRoute generateSessionId()???
  -                if (jvmRoute != null) {
  -                    sessionId += '.' + jvmRoute;
  -                }
  -            }
  -        }
  -
           session.setId(sessionId);
           sessionCounter++;
   
  @@ -789,30 +772,40 @@
       protected synchronized String generateSessionId() {
   
           byte random[] = new byte[16];
  +        String jvmRoute = getJvmRoute();
  +        String result = null;
   
           // Render the result as a String of hexadecimal digits
  -        StringBuffer result = new StringBuffer();
  -        int resultLenBytes = 0;
  -        while (resultLenBytes < this.sessionIdLength) {
  -            getRandomBytes(random);
  -            random = getDigest().digest(random);
  -            for (int j = 0;
  -                    j < random.length && resultLenBytes < this.sessionIdLength;
  -                    j++) {
  -                byte b1 = (byte) ((random[j] & 0xf0) >> 4);
  -                byte b2 = (byte) (random[j] & 0x0f);
  -                if (b1 < 10)
  -                    result.append((char) ('0' + b1));
  -                else
  -                    result.append((char) ('A' + (b1 - 10)));
  -                if (b2 < 10)
  -                    result.append((char) ('0' + b2));
  -                else
  -                    result.append((char) ('A' + (b2 - 10)));
  -                resultLenBytes++;
  +        StringBuffer buffer = new StringBuffer();
  +        do {
  +            int resultLenBytes = 0;
  +            if (result != null)
  +                buffer = new StringBuffer();
  +            while (resultLenBytes < this.sessionIdLength) {
  +                getRandomBytes(random);
  +                random = getDigest().digest(random);
  +                for (int j = 0;
  +                j < random.length && resultLenBytes < this.sessionIdLength;
  +                j++) {
  +                    byte b1 = (byte) ((random[j] & 0xf0) >> 4);
  +                    byte b2 = (byte) (random[j] & 0x0f);
  +                    if (b1 < 10)
  +                        buffer.append((char) ('0' + b1));
  +                    else
  +                        buffer.append((char) ('A' + (b1 - 10)));
  +                    if (b2 < 10)
  +                        buffer.append((char) ('0' + b2));
  +                    else
  +                        buffer.append((char) ('A' + (b2 - 10)));
  +                    resultLenBytes++;
  +                }
               }
  -        }
  -        return (result.toString());
  +            if (jvmRoute != null) {
  +                buffer.append('.').append(jvmRoute);
  +            }
  +            result = buffer.toString();
  +        } while (sessions.get(result) != null);
  +        return (result);
   
       }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to