final class sun.rmi.transport.proxy.CGIForwardCommand implements sun.rmi.transport.proxy.CGICommandHandler
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: sun.rmi.transport.proxy.CGIForwardCommand
  super_class: java.lang.Object
{
  void <init>();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.rmi.transport.proxy.CGIForwardCommand this
         0: .line 205
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // sun.rmi.transport.proxy.CGIForwardCommand this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/rmi/transport/proxy/CGIForwardCommand;

  public java.lang.String getName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.rmi.transport.proxy.CGIForwardCommand this
         0: .line 208
            ldc "forward"
            areturn
        end local 0 // sun.rmi.transport.proxy.CGIForwardCommand this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/rmi/transport/proxy/CGIForwardCommand;

  public void execute(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=11, args_size=2
        start local 0 // sun.rmi.transport.proxy.CGIForwardCommand this
        start local 1 // java.lang.String param
         0: .line 213
            getstatic sun.rmi.transport.proxy.CGIHandler.RequestMethod:Ljava/lang/String;
            ldc "POST"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 2
         1: .line 214
            new sun.rmi.transport.proxy.CGIClientException
            dup
            ldc "can only forward POST requests"
            invokespecial sun.rmi.transport.proxy.CGIClientException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 218
      StackMap locals:
      StackMap stack:
            aload 1 /* param */
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
            istore 2 /* port */
        start local 2 // int port
         3: .line 219
            goto 6
        end local 2 // int port
      StackMap locals:
      StackMap stack: java.lang.NumberFormatException
         4: pop
         5: .line 220
            new sun.rmi.transport.proxy.CGIClientException
            dup
            ldc "invalid port number."
            invokespecial sun.rmi.transport.proxy.CGIClientException.<init>:(Ljava/lang/String;)V
            athrow
        start local 2 // int port
         6: .line 222
      StackMap locals: int
      StackMap stack:
            iload 2 /* port */
            ifle 7
            iload 2 /* port */
            ldc 65535
            if_icmple 8
         7: .line 223
      StackMap locals:
      StackMap stack:
            new sun.rmi.transport.proxy.CGIClientException
            dup
            new java.lang.StringBuilder
            dup
            ldc "invalid port: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 2 /* port */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial sun.rmi.transport.proxy.CGIClientException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 224
      StackMap locals:
      StackMap stack:
            iload 2 /* port */
            sipush 1024
            if_icmpge 12
         9: .line 225
            new sun.rmi.transport.proxy.CGIClientException
            dup
            new java.lang.StringBuilder
            dup
            ldc "permission denied for port: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        10: .line 226
            iload 2 /* port */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        11: .line 225
            invokespecial sun.rmi.transport.proxy.CGIClientException.<init>:(Ljava/lang/String;)V
            athrow
        12: .line 231
      StackMap locals:
      StackMap stack:
            new java.net.Socket
            dup
            invokestatic java.net.InetAddress.getLocalHost:()Ljava/net/InetAddress;
            iload 2 /* port */
            invokespecial java.net.Socket.<init>:(Ljava/net/InetAddress;I)V
            astore 4 /* socket */
        start local 4 // java.net.Socket socket
        13: .line 232
            goto 16
        end local 4 // java.net.Socket socket
      StackMap locals:
      StackMap stack: java.io.IOException
        14: pop
        15: .line 233
            new sun.rmi.transport.proxy.CGIServerException
            dup
            ldc "could not connect to local port"
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        start local 4 // java.net.Socket socket
        16: .line 239
      StackMap locals: sun.rmi.transport.proxy.CGIForwardCommand java.lang.String int top java.net.Socket
      StackMap stack:
            new java.io.DataInputStream
            dup
            getstatic java.lang.System.in:Ljava/io/InputStream;
            invokespecial java.io.DataInputStream.<init>:(Ljava/io/InputStream;)V
            astore 5 /* clientIn */
        start local 5 // java.io.DataInputStream clientIn
        17: .line 240
            getstatic sun.rmi.transport.proxy.CGIHandler.ContentLength:I
            newarray 8
            astore 3 /* buffer */
        start local 3 // byte[] buffer
        18: .line 242
            aload 5 /* clientIn */
            aload 3 /* buffer */
            invokevirtual java.io.DataInputStream.readFully:([B)V
        19: .line 243
            goto 24
      StackMap locals: sun.rmi.transport.proxy.CGIForwardCommand java.lang.String int byte[] java.net.Socket java.io.DataInputStream
      StackMap stack: java.io.EOFException
        20: pop
        21: .line 244
            new sun.rmi.transport.proxy.CGIClientException
            dup
            ldc "unexpected EOF reading request body"
            invokespecial sun.rmi.transport.proxy.CGIClientException.<init>:(Ljava/lang/String;)V
            athrow
        22: .line 245
      StackMap locals:
      StackMap stack: java.io.IOException
            pop
        23: .line 246
            new sun.rmi.transport.proxy.CGIClientException
            dup
            ldc "error reading request body"
            invokespecial sun.rmi.transport.proxy.CGIClientException.<init>:(Ljava/lang/String;)V
            athrow
        24: .line 254
      StackMap locals:
      StackMap stack:
            new java.io.DataOutputStream
            dup
            aload 4 /* socket */
            invokevirtual java.net.Socket.getOutputStream:()Ljava/io/OutputStream;
            invokespecial java.io.DataOutputStream.<init>:(Ljava/io/OutputStream;)V
        25: .line 253
            astore 6 /* socketOut */
        start local 6 // java.io.DataOutputStream socketOut
        26: .line 255
            aload 6 /* socketOut */
            ldc "POST / HTTP/1.0\r\n"
            invokevirtual java.io.DataOutputStream.writeBytes:(Ljava/lang/String;)V
        27: .line 256
            aload 6 /* socketOut */
            new java.lang.StringBuilder
            dup
            ldc "Content-length: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        28: .line 257
            getstatic sun.rmi.transport.proxy.CGIHandler.ContentLength:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc "\r\n\r\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        29: .line 256
            invokevirtual java.io.DataOutputStream.writeBytes:(Ljava/lang/String;)V
        30: .line 258
            aload 6 /* socketOut */
            aload 3 /* buffer */
            invokevirtual java.io.DataOutputStream.write:([B)V
        31: .line 259
            aload 6 /* socketOut */
            invokevirtual java.io.DataOutputStream.flush:()V
        end local 6 // java.io.DataOutputStream socketOut
        32: .line 260
            goto 35
      StackMap locals:
      StackMap stack: java.io.IOException
        33: pop
        34: .line 261
            new sun.rmi.transport.proxy.CGIServerException
            dup
            ldc "error writing to server"
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        35: .line 269
      StackMap locals:
      StackMap stack:
            new java.io.DataInputStream
            dup
            aload 4 /* socket */
            invokevirtual java.net.Socket.getInputStream:()Ljava/io/InputStream;
            invokespecial java.io.DataInputStream.<init>:(Ljava/io/InputStream;)V
            astore 6 /* socketIn */
        start local 6 // java.io.DataInputStream socketIn
        36: .line 270
            goto 39
        end local 6 // java.io.DataInputStream socketIn
      StackMap locals:
      StackMap stack: java.io.IOException
        37: pop
        38: .line 271
            new sun.rmi.transport.proxy.CGIServerException
            dup
            ldc "error reading from server"
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        start local 6 // java.io.DataInputStream socketIn
        39: .line 273
      StackMap locals: java.io.DataInputStream
      StackMap stack:
            ldc "Content-length:"
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            astore 7 /* key */
        start local 7 // java.lang.String key
        40: .line 274
            iconst_0
            istore 8 /* contentLengthFound */
        start local 8 // boolean contentLengthFound
        41: .line 276
            iconst_m1
            istore 10 /* responseContentLength */
        start local 10 // int responseContentLength
        42: .line 279
      StackMap locals: sun.rmi.transport.proxy.CGIForwardCommand java.lang.String int byte[] java.net.Socket java.io.DataInputStream java.io.DataInputStream java.lang.String int top int
      StackMap stack:
            aload 6 /* socketIn */
            invokevirtual java.io.DataInputStream.readLine:()Ljava/lang/String;
            astore 9 /* line */
        start local 9 // java.lang.String line
        43: .line 280
            goto 46
        end local 9 // java.lang.String line
      StackMap locals:
      StackMap stack: java.io.IOException
        44: pop
        45: .line 281
            new sun.rmi.transport.proxy.CGIServerException
            dup
            ldc "error reading from server"
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        start local 9 // java.lang.String line
        46: .line 283
      StackMap locals: sun.rmi.transport.proxy.CGIForwardCommand java.lang.String int byte[] java.net.Socket java.io.DataInputStream java.io.DataInputStream java.lang.String int java.lang.String int
      StackMap stack:
            aload 9 /* line */
            ifnonnull 50
        47: .line 284
            new sun.rmi.transport.proxy.CGIServerException
            dup
        48: .line 285
            ldc "unexpected EOF reading server response"
        49: .line 284
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        50: .line 287
      StackMap locals:
      StackMap stack:
            aload 9 /* line */
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            aload 7 /* key */
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 58
        51: .line 288
            iload 8 /* contentLengthFound */
            ifeq 55
        52: .line 289
            new sun.rmi.transport.proxy.CGIServerException
            dup
        53: .line 290
            ldc "Multiple Content-length entries found."
        54: .line 289
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        55: .line 293
      StackMap locals:
      StackMap stack:
            aload 9 /* line */
            aload 7 /* key */
            invokevirtual java.lang.String.length:()I
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
        56: .line 292
            istore 10 /* responseContentLength */
        57: .line 294
            iconst_1
            istore 8 /* contentLengthFound */
        58: .line 297
      StackMap locals:
      StackMap stack:
            aload 9 /* line */
            invokevirtual java.lang.String.length:()I
            ifeq 60
        59: .line 298
            aload 9 /* line */
            iconst_0
            invokevirtual java.lang.String.charAt:(I)C
            bipush 13
            if_icmpeq 60
            aload 9 /* line */
            iconst_0
            invokevirtual java.lang.String.charAt:(I)C
            bipush 10
            if_icmpne 42
        60: .line 300
      StackMap locals:
      StackMap stack:
            iload 8 /* contentLengthFound */
            ifeq 61
            iload 10 /* responseContentLength */
            ifge 64
        61: .line 301
      StackMap locals:
      StackMap stack:
            new sun.rmi.transport.proxy.CGIServerException
            dup
        62: .line 302
            ldc "missing or invalid content length in server response"
        63: .line 301
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        64: .line 303
      StackMap locals:
      StackMap stack:
            iload 10 /* responseContentLength */
            newarray 8
            astore 3 /* buffer */
        65: .line 305
            aload 6 /* socketIn */
            aload 3 /* buffer */
            invokevirtual java.io.DataInputStream.readFully:([B)V
        66: .line 306
            goto 73
      StackMap locals:
      StackMap stack: java.io.EOFException
        67: pop
        68: .line 307
            new sun.rmi.transport.proxy.CGIServerException
            dup
        69: .line 308
            ldc "unexpected EOF reading server response"
        70: .line 307
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        71: .line 309
      StackMap locals:
      StackMap stack: java.io.IOException
            pop
        72: .line 310
            new sun.rmi.transport.proxy.CGIServerException
            dup
            ldc "error reading from server"
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        73: .line 316
      StackMap locals:
      StackMap stack:
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "Status: 200 OK"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        74: .line 317
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc "Content-type: application/octet-stream"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        75: .line 318
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc ""
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        76: .line 320
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            aload 3 /* buffer */
            invokevirtual java.io.PrintStream.write:([B)V
        77: .line 321
            goto 80
      StackMap locals:
      StackMap stack: java.io.IOException
        78: pop
        79: .line 322
            new sun.rmi.transport.proxy.CGIServerException
            dup
            ldc "error writing response"
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        80: .line 324
      StackMap locals:
      StackMap stack:
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            invokevirtual java.io.PrintStream.flush:()V
        81: .line 325
            return
        end local 10 // int responseContentLength
        end local 9 // java.lang.String line
        end local 8 // boolean contentLengthFound
        end local 7 // java.lang.String key
        end local 6 // java.io.DataInputStream socketIn
        end local 5 // java.io.DataInputStream clientIn
        end local 4 // java.net.Socket socket
        end local 3 // byte[] buffer
        end local 2 // int port
        end local 1 // java.lang.String param
        end local 0 // sun.rmi.transport.proxy.CGIForwardCommand this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   82     0                   this  Lsun/rmi/transport/proxy/CGIForwardCommand;
            0   82     1                  param  Ljava/lang/String;
            3    4     2                   port  I
            6   82     2                   port  I
           18   82     3                 buffer  [B
           13   14     4                 socket  Ljava/net/Socket;
           16   82     4                 socket  Ljava/net/Socket;
           17   82     5               clientIn  Ljava/io/DataInputStream;
           26   32     6              socketOut  Ljava/io/DataOutputStream;
           36   37     6               socketIn  Ljava/io/DataInputStream;
           39   82     6               socketIn  Ljava/io/DataInputStream;
           40   82     7                    key  Ljava/lang/String;
           41   82     8     contentLengthFound  Z
           43   44     9                   line  Ljava/lang/String;
           46   82     9                   line  Ljava/lang/String;
           42   82    10  responseContentLength  I
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.NumberFormatException
          12    13      14  Class java.io.IOException
          18    19      20  Class java.io.EOFException
          18    19      22  Class java.io.IOException
          24    32      33  Class java.io.IOException
          35    36      37  Class java.io.IOException
          42    43      44  Class java.io.IOException
          65    66      67  Class java.io.EOFException
          65    66      71  Class java.io.IOException
          76    77      78  Class java.io.IOException
    Exceptions:
      throws sun.rmi.transport.proxy.CGIClientException, sun.rmi.transport.proxy.CGIServerException
    MethodParameters:
       Name  Flags
      param  
}
SourceFile: "CGIHandler.java"