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 208
            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 211
            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;

  private java.lang.String getLine(java.io.DataInputStream);
    descriptor: (Ljava/io/DataInputStream;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // sun.rmi.transport.proxy.CGIForwardCommand this
        start local 1 // java.io.DataInputStream socketIn
         0: .line 216
            aload 1 /* socketIn */
            invokevirtual java.io.DataInputStream.readLine:()Ljava/lang/String;
            areturn
        end local 1 // java.io.DataInputStream socketIn
        end local 0 // sun.rmi.transport.proxy.CGIForwardCommand this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lsun/rmi/transport/proxy/CGIForwardCommand;
            0    1     1  socketIn  Ljava/io/DataInputStream;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      socketIn  

  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 221
            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 222
            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 226
      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 227
            goto 6
        end local 2 // int port
      StackMap locals:
      StackMap stack: java.lang.NumberFormatException
         4: pop
         5: .line 228
            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 230
      StackMap locals: int
      StackMap stack:
            iload 2 /* port */
            ifle 7
            iload 2 /* port */
            ldc 65535
            if_icmple 8
         7: .line 231
      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 232
      StackMap locals:
      StackMap stack:
            iload 2 /* port */
            sipush 1024
            if_icmpge 12
         9: .line 233
            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 234
            iload 2 /* port */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        11: .line 233
            invokespecial sun.rmi.transport.proxy.CGIClientException.<init>:(Ljava/lang/String;)V
            athrow
        12: .line 239
      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 240
            goto 16
        end local 4 // java.net.Socket socket
      StackMap locals:
      StackMap stack: java.io.IOException
        14: pop
        15: .line 241
            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 247
      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 248
            getstatic sun.rmi.transport.proxy.CGIHandler.ContentLength:I
            newarray 8
            astore 3 /* buffer */
        start local 3 // byte[] buffer
        18: .line 250
            aload 5 /* clientIn */
            aload 3 /* buffer */
            invokevirtual java.io.DataInputStream.readFully:([B)V
        19: .line 251
            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 252
            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 253
      StackMap locals:
      StackMap stack: java.io.IOException
            pop
        23: .line 254
            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 262
      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 261
            astore 6 /* socketOut */
        start local 6 // java.io.DataOutputStream socketOut
        26: .line 263
            aload 6 /* socketOut */
            ldc "POST / HTTP/1.0\r\n"
            invokevirtual java.io.DataOutputStream.writeBytes:(Ljava/lang/String;)V
        27: .line 264
            aload 6 /* socketOut */
            new java.lang.StringBuilder
            dup
            ldc "Content-length: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        28: .line 265
            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 264
            invokevirtual java.io.DataOutputStream.writeBytes:(Ljava/lang/String;)V
        30: .line 266
            aload 6 /* socketOut */
            aload 3 /* buffer */
            invokevirtual java.io.DataOutputStream.write:([B)V
        31: .line 267
            aload 6 /* socketOut */
            invokevirtual java.io.DataOutputStream.flush:()V
        end local 6 // java.io.DataOutputStream socketOut
        32: .line 268
            goto 35
      StackMap locals:
      StackMap stack: java.io.IOException
        33: pop
        34: .line 269
            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 277
      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 278
            goto 39
        end local 6 // java.io.DataInputStream socketIn
      StackMap locals:
      StackMap stack: java.io.IOException
        37: pop
        38: .line 279
            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 281
      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 282
            iconst_0
            istore 8 /* contentLengthFound */
        start local 8 // boolean contentLengthFound
        41: .line 284
            iconst_m1
            istore 10 /* responseContentLength */
        start local 10 // int responseContentLength
        42: .line 287
      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 0 /* this */
            aload 6 /* socketIn */
            invokevirtual sun.rmi.transport.proxy.CGIForwardCommand.getLine:(Ljava/io/DataInputStream;)Ljava/lang/String;
            astore 9 /* line */
        start local 9 // java.lang.String line
        43: .line 288
            goto 46
        end local 9 // java.lang.String line
      StackMap locals:
      StackMap stack: java.io.IOException
        44: pop
        45: .line 289
            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 291
      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 292
            new sun.rmi.transport.proxy.CGIServerException
            dup
        48: .line 293
            ldc "unexpected EOF reading server response"
        49: .line 292
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        50: .line 295
      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 296
            iload 8 /* contentLengthFound */
            ifeq 55
        52: .line 297
            new sun.rmi.transport.proxy.CGIServerException
            dup
        53: .line 298
            ldc "Multiple Content-length entries found."
        54: .line 297
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        55: .line 301
      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 300
            istore 10 /* responseContentLength */
        57: .line 302
            iconst_1
            istore 8 /* contentLengthFound */
        58: .line 305
      StackMap locals:
      StackMap stack:
            aload 9 /* line */
            invokevirtual java.lang.String.length:()I
            ifeq 60
        59: .line 306
            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 308
      StackMap locals:
      StackMap stack:
            iload 8 /* contentLengthFound */
            ifeq 61
            iload 10 /* responseContentLength */
            ifge 64
        61: .line 309
      StackMap locals:
      StackMap stack:
            new sun.rmi.transport.proxy.CGIServerException
            dup
        62: .line 310
            ldc "missing or invalid content length in server response"
        63: .line 309
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        64: .line 311
      StackMap locals:
      StackMap stack:
            iload 10 /* responseContentLength */
            newarray 8
            astore 3 /* buffer */
        65: .line 313
            aload 6 /* socketIn */
            aload 3 /* buffer */
            invokevirtual java.io.DataInputStream.readFully:([B)V
        66: .line 314
            goto 73
      StackMap locals:
      StackMap stack: java.io.EOFException
        67: pop
        68: .line 315
            new sun.rmi.transport.proxy.CGIServerException
            dup
        69: .line 316
            ldc "unexpected EOF reading server response"
        70: .line 315
            invokespecial sun.rmi.transport.proxy.CGIServerException.<init>:(Ljava/lang/String;)V
            athrow
        71: .line 317
      StackMap locals:
      StackMap stack: java.io.IOException
            pop
        72: .line 318
            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 324
      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 325
            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 326
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            ldc ""
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
        76: .line 328
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            aload 3 /* buffer */
            invokevirtual java.io.PrintStream.write:([B)V
        77: .line 329
            goto 80
      StackMap locals:
      StackMap stack: java.io.IOException
        78: pop
        79: .line 330
            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 332
      StackMap locals:
      StackMap stack:
            getstatic java.lang.System.out:Ljava/io/PrintStream;
            invokevirtual java.io.PrintStream.flush:()V
        81: .line 333
            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"