public class org.apache.catalina.valves.LoadBalancerDrainingValve extends org.apache.catalina.valves.ValveBase
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.valves.LoadBalancerDrainingValve
  super_class: org.apache.catalina.valves.ValveBase
{
  public static final java.lang.String ATTRIBUTE_KEY_JK_LB_ACTIVATION;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "JK_LB_ACTIVATION"

  private int _redirectStatusCode;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String _ignoreCookieName;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String _ignoreCookieValue;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
         0: .line 96
            aload 0 /* this */
            iconst_1
            invokespecial org.apache.catalina.valves.ValveBase.<init>:(Z)V
         1: .line 75
            aload 0 /* this */
            sipush 307
            putfield org.apache.catalina.valves.LoadBalancerDrainingValve._redirectStatusCode:I
         2: .line 97
            return
        end local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/catalina/valves/LoadBalancerDrainingValve;

  public void setRedirectStatusCode(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
        start local 1 // int code
         0: .line 111
            aload 0 /* this */
            iload 1 /* code */
            putfield org.apache.catalina.valves.LoadBalancerDrainingValve._redirectStatusCode:I
         1: .line 112
            return
        end local 1 // int code
        end local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/catalina/valves/LoadBalancerDrainingValve;
            0    2     1  code  I
    MethodParameters:
      Name  Flags
      code  

  public java.lang.String getIgnoreCookieName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
         0: .line 124
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve._ignoreCookieName:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/valves/LoadBalancerDrainingValve;

  public void setIgnoreCookieName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
        start local 1 // java.lang.String cookieName
         0: .line 141
            aload 0 /* this */
            aload 1 /* cookieName */
            putfield org.apache.catalina.valves.LoadBalancerDrainingValve._ignoreCookieName:Ljava/lang/String;
         1: .line 142
            return
        end local 1 // java.lang.String cookieName
        end local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/apache/catalina/valves/LoadBalancerDrainingValve;
            0    2     1  cookieName  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      cookieName  

  public java.lang.String getIgnoreCookieValue();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
         0: .line 154
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve._ignoreCookieValue:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/valves/LoadBalancerDrainingValve;

  public void setIgnoreCookieValue(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
        start local 1 // java.lang.String cookieValue
         0: .line 170
            aload 0 /* this */
            aload 1 /* cookieValue */
            putfield org.apache.catalina.valves.LoadBalancerDrainingValve._ignoreCookieValue:Ljava/lang/String;
         1: .line 171
            return
        end local 1 // java.lang.String cookieValue
        end local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/apache/catalina/valves/LoadBalancerDrainingValve;
            0    2     1  cookieValue  Ljava/lang/String;
    MethodParameters:
             Name  Flags
      cookieValue  

  public void invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response);
    descriptor: (Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=12, args_size=3
        start local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
        start local 1 // org.apache.catalina.connector.Request request
        start local 2 // org.apache.catalina.connector.Response response
         0: .line 175
            ldc "DIS"
            aload 1 /* request */
            ldc "JK_LB_ACTIVATION"
            invokevirtual org.apache.catalina.connector.Request.getAttribute:(Ljava/lang/String;)Ljava/lang/Object;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 51
         1: .line 176
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.isRequestedSessionIdValid:()Z
            ifne 51
         2: .line 178
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 4
         3: .line 179
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve.containerLog:Lorg/apache/juli/logging/Log;
            ldc "Load-balancer is in DISABLED state; draining this node"
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
         4: .line 182
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 3 /* ignoreRebalance */
        start local 3 // boolean ignoreRebalance
         5: .line 183
            aconst_null
            astore 4 /* sessionCookie */
        start local 4 // jakarta.servlet.http.Cookie sessionCookie
         6: .line 185
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getCookies:()[Ljakarta/servlet/http/Cookie;
            astore 5 /* cookies */
        start local 5 // jakarta.servlet.http.Cookie[] cookies
         7: .line 187
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getContext:()Lorg/apache/catalina/Context;
            invokestatic org.apache.catalina.util.SessionConfig.getSessionCookieName:(Lorg/apache/catalina/Context;)Ljava/lang/String;
            astore 6 /* sessionCookieName */
        start local 6 // java.lang.String sessionCookieName
         8: .line 189
            aload 5 /* cookies */
            ifnull 25
         9: .line 190
            aload 5 /* cookies */
            dup
            astore 10
            arraylength
            istore 9
            iconst_0
            istore 8
            goto 24
      StackMap locals: org.apache.catalina.valves.LoadBalancerDrainingValve org.apache.catalina.connector.Request org.apache.catalina.connector.Response int jakarta.servlet.http.Cookie jakarta.servlet.http.Cookie[] java.lang.String top int int jakarta.servlet.http.Cookie[]
      StackMap stack:
        10: aload 10
            iload 8
            aaload
            astore 7 /* cookie */
        start local 7 // jakarta.servlet.http.Cookie cookie
        11: .line 191
            aload 7 /* cookie */
            invokevirtual jakarta.servlet.http.Cookie.getName:()Ljava/lang/String;
            astore 11 /* cookieName */
        start local 11 // java.lang.String cookieName
        12: .line 192
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 14
        13: .line 193
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Checking cookie "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 11 /* cookieName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 7 /* cookie */
            invokevirtual jakarta.servlet.http.Cookie.getValue:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        14: .line 196
      StackMap locals: org.apache.catalina.valves.LoadBalancerDrainingValve org.apache.catalina.connector.Request org.apache.catalina.connector.Response int jakarta.servlet.http.Cookie jakarta.servlet.http.Cookie[] java.lang.String jakarta.servlet.http.Cookie int int jakarta.servlet.http.Cookie[] java.lang.String
      StackMap stack:
            aload 6 /* sessionCookieName */
            aload 11 /* cookieName */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 18
        15: .line 197
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getRequestedSessionId:()Ljava/lang/String;
            aload 7 /* cookie */
            invokevirtual jakarta.servlet.http.Cookie.getValue:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 18
        16: .line 198
            aload 7 /* cookie */
            astore 4 /* sessionCookie */
        17: .line 199
            goto 23
      StackMap locals:
      StackMap stack:
        18: aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve._ignoreCookieName:Ljava/lang/String;
            ifnull 23
        19: .line 200
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve._ignoreCookieName:Ljava/lang/String;
            aload 11 /* cookieName */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 23
        20: .line 201
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve._ignoreCookieValue:Ljava/lang/String;
            ifnull 23
        21: .line 202
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve._ignoreCookieValue:Ljava/lang/String;
            aload 7 /* cookie */
            invokevirtual jakarta.servlet.http.Cookie.getValue:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 23
        22: .line 204
            iconst_1
            istore 3 /* ignoreRebalance */
        end local 11 // java.lang.String cookieName
        end local 7 // jakarta.servlet.http.Cookie cookie
        23: .line 190
      StackMap locals: org.apache.catalina.valves.LoadBalancerDrainingValve org.apache.catalina.connector.Request org.apache.catalina.connector.Response int jakarta.servlet.http.Cookie jakarta.servlet.http.Cookie[] java.lang.String top int int jakarta.servlet.http.Cookie[]
      StackMap stack:
            iinc 8 1
      StackMap locals:
      StackMap stack:
        24: iload 8
            iload 9
            if_icmplt 10
        25: .line 209
      StackMap locals: org.apache.catalina.valves.LoadBalancerDrainingValve org.apache.catalina.connector.Request org.apache.catalina.connector.Response int jakarta.servlet.http.Cookie jakarta.servlet.http.Cookie[] java.lang.String
      StackMap stack:
            iload 3 /* ignoreRebalance */
            ifeq 32
        26: .line 210
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 30
        27: .line 211
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve.containerLog:Lorg/apache/juli/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Client is presenting a valid "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve._ignoreCookieName:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        28: .line 212
            ldc " cookie, re-balancing is being skipped"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        29: .line 211
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;)V
        30: .line 215
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.valves.LoadBalancerDrainingValve.getNext:()Lorg/apache/catalina/Valve;
            aload 1 /* request */
            aload 2 /* response */
            invokeinterface org.apache.catalina.Valve.invoke:(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
        31: .line 217
            return
        32: .line 222
      StackMap locals:
      StackMap stack:
            aload 4 /* sessionCookie */
            ifnull 41
        33: .line 223
            aload 4 /* sessionCookie */
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getContext:()Lorg/apache/catalina/Context;
            invokestatic org.apache.catalina.util.SessionConfig.getSessionCookiePath:(Lorg/apache/catalina/Context;)Ljava/lang/String;
            invokevirtual jakarta.servlet.http.Cookie.setPath:(Ljava/lang/String;)V
        34: .line 224
            aload 4 /* sessionCookie */
            iconst_0
            invokevirtual jakarta.servlet.http.Cookie.setMaxAge:(I)V
        35: .line 225
            aload 4 /* sessionCookie */
            ldc ""
            invokevirtual jakarta.servlet.http.Cookie.setValue:(Ljava/lang/String;)V
        36: .line 227
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getContext:()Lorg/apache/catalina/Context;
            invokeinterface org.apache.catalina.Context.getServletContext:()Ljakarta/servlet/ServletContext;
            invokeinterface jakarta.servlet.ServletContext.getSessionCookieConfig:()Ljakarta/servlet/SessionCookieConfig;
            astore 7 /* sessionCookieConfig */
        start local 7 // jakarta.servlet.SessionCookieConfig sessionCookieConfig
        37: .line 228
            aload 4 /* sessionCookie */
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.isSecure:()Z
            ifne 38
            aload 7 /* sessionCookieConfig */
            invokeinterface jakarta.servlet.SessionCookieConfig.isSecure:()Z
            ifne 38
            iconst_0
            goto 39
      StackMap locals: org.apache.catalina.valves.LoadBalancerDrainingValve org.apache.catalina.connector.Request org.apache.catalina.connector.Response int jakarta.servlet.http.Cookie jakarta.servlet.http.Cookie[] java.lang.String jakarta.servlet.SessionCookieConfig
      StackMap stack: jakarta.servlet.http.Cookie
        38: iconst_1
      StackMap locals: org.apache.catalina.valves.LoadBalancerDrainingValve org.apache.catalina.connector.Request org.apache.catalina.connector.Response int jakarta.servlet.http.Cookie jakarta.servlet.http.Cookie[] java.lang.String jakarta.servlet.SessionCookieConfig
      StackMap stack: jakarta.servlet.http.Cookie int
        39: invokevirtual jakarta.servlet.http.Cookie.setSecure:(Z)V
        40: .line 229
            aload 2 /* response */
            aload 4 /* sessionCookie */
            invokevirtual org.apache.catalina.connector.Response.addCookie:(Ljakarta/servlet/http/Cookie;)V
        end local 7 // jakarta.servlet.SessionCookieConfig sessionCookieConfig
        41: .line 233
      StackMap locals:
      StackMap stack:
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getRequestURI:()Ljava/lang/String;
            astore 7 /* uri */
        start local 7 // java.lang.String uri
        42: .line 234
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getContext:()Lorg/apache/catalina/Context;
            invokestatic org.apache.catalina.util.SessionConfig.getSessionUriParamName:(Lorg/apache/catalina/Context;)Ljava/lang/String;
            astore 8 /* sessionURIParamName */
        start local 8 // java.lang.String sessionURIParamName
        43: .line 235
            aload 7 /* uri */
            new java.lang.StringBuilder
            dup
            ldc ";"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 8 /* sessionURIParamName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 45
        44: .line 236
            aload 7 /* uri */
            new java.lang.StringBuilder
            dup
            ldc ";"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 8 /* sessionURIParamName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "=[^&?]*"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            ldc ""
            invokevirtual java.lang.String.replaceFirst:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
            astore 7 /* uri */
        45: .line 239
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getQueryString:()Ljava/lang/String;
            astore 9 /* queryString */
        start local 9 // java.lang.String queryString
        46: .line 241
            aload 9 /* queryString */
            ifnull 48
        47: .line 242
            new java.lang.StringBuilder
            dup
            aload 7 /* uri */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "?"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 9 /* queryString */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 7 /* uri */
        48: .line 247
      StackMap locals: java.lang.String
      StackMap stack:
            aload 2 /* response */
            ldc "Location"
            aload 7 /* uri */
            invokevirtual org.apache.catalina.connector.Response.setHeader:(Ljava/lang/String;Ljava/lang/String;)V
        49: .line 248
            aload 2 /* response */
            aload 0 /* this */
            getfield org.apache.catalina.valves.LoadBalancerDrainingValve._redirectStatusCode:I
            invokevirtual org.apache.catalina.connector.Response.setStatus:(I)V
        end local 9 // java.lang.String queryString
        end local 8 // java.lang.String sessionURIParamName
        end local 7 // java.lang.String uri
        end local 6 // java.lang.String sessionCookieName
        end local 5 // jakarta.servlet.http.Cookie[] cookies
        end local 4 // jakarta.servlet.http.Cookie sessionCookie
        end local 3 // boolean ignoreRebalance
        50: .line 249
            goto 52
        51: .line 250
      StackMap locals: org.apache.catalina.valves.LoadBalancerDrainingValve org.apache.catalina.connector.Request org.apache.catalina.connector.Response
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.valves.LoadBalancerDrainingValve.getNext:()Lorg/apache/catalina/Valve;
            aload 1 /* request */
            aload 2 /* response */
            invokeinterface org.apache.catalina.Valve.invoke:(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
        52: .line 252
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.apache.catalina.connector.Response response
        end local 1 // org.apache.catalina.connector.Request request
        end local 0 // org.apache.catalina.valves.LoadBalancerDrainingValve this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   53     0                 this  Lorg/apache/catalina/valves/LoadBalancerDrainingValve;
            0   53     1              request  Lorg/apache/catalina/connector/Request;
            0   53     2             response  Lorg/apache/catalina/connector/Response;
            5   50     3      ignoreRebalance  Z
            6   50     4        sessionCookie  Ljakarta/servlet/http/Cookie;
            7   50     5              cookies  [Ljakarta/servlet/http/Cookie;
            8   50     6    sessionCookieName  Ljava/lang/String;
           11   23     7               cookie  Ljakarta/servlet/http/Cookie;
           12   23    11           cookieName  Ljava/lang/String;
           37   41     7  sessionCookieConfig  Ljakarta/servlet/SessionCookieConfig;
           42   50     7                  uri  Ljava/lang/String;
           43   50     8  sessionURIParamName  Ljava/lang/String;
           46   50     9          queryString  Ljava/lang/String;
    Exceptions:
      throws java.io.IOException, jakarta.servlet.ServletException
    MethodParameters:
          Name  Flags
      request   
      response  
}
SourceFile: "LoadBalancerDrainingValve.java"