jdk/src/java.rmi/share/classes/sun/rmi/transport/proxy/CGIHandler.java
author lana
Thu, 28 Apr 2016 09:38:19 -0700
changeset 37681 b1a0f119f766
parent 30655 d83f50188ca9
parent 37667 6d042f115c35
permissions -rw-r--r--
Merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37667
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
     1
/*
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
     2
 * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
     4
 *
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    10
 *
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    15
 * accompanied this code).
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    16
 *
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    20
 *
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    23
 * questions.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    24
 */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    25
package sun.rmi.transport.proxy;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    26
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    27
import java.io.*;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    28
import java.net.*;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    29
import java.util.Hashtable;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    30
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    31
/**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    32
 * CGIClientException is thrown when an error is detected
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    33
 * in a client's request.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    34
 */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    35
class CGIClientException extends Exception {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    36
    private static final long serialVersionUID = 8147981687059865216L;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    37
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    38
    public CGIClientException(String s) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    39
        super(s);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    40
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    41
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    42
    public CGIClientException(String s, Throwable cause) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    43
        super(s, cause);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    44
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    45
}
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    46
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    47
/**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    48
 * CGIServerException is thrown when an error occurs here on the server.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    49
 */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    50
class CGIServerException extends Exception {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    51
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    52
    private static final long serialVersionUID = 6928425456704527017L;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    53
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    54
    public CGIServerException(String s) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    55
        super(s);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    56
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    57
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    58
    public CGIServerException(String s, Throwable cause) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    59
        super(s, cause);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    60
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    61
}
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    62
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    63
/**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    64
 * CGICommandHandler is the interface to an object that handles a
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    65
 * particular supported command.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    66
 */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    67
interface CGICommandHandler {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    68
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    69
    /**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    70
     * Return the string form of the command
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    71
     * to be recognized in the query string.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    72
     */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    73
    public String getName();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    74
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    75
    /**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    76
     * Execute the command with the given string as parameter.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    77
     */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    78
    public void execute(String param) throws CGIClientException, CGIServerException;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    79
}
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    80
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    81
/**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    82
 * The CGIHandler class contains methods for executing as a CGI program.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    83
 * The main function interprets the query string as a command of the form
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    84
 * "{@code <command>=<parameters>}".
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    85
 *
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    86
 * This class depends on the CGI 1.0 environment variables being set as
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    87
 * properties of the same name in this Java VM.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    88
 *
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    89
 * All data and methods of this class are static because they are specific
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    90
 * to this particular CGI process.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    91
 */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    92
public final class CGIHandler {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    93
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    94
    /* get CGI parameters that we need */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    95
    static int ContentLength;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    96
    static String QueryString;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    97
    static String RequestMethod;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    98
    static String ServerName;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
    99
    static int ServerPort;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   100
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   101
    static {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   102
        java.security.AccessController.doPrivileged(
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   103
            new java.security.PrivilegedAction<Void>() {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   104
            public Void run() {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   105
                ContentLength =
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   106
                    Integer.getInteger("CONTENT_LENGTH", 0).intValue();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   107
                QueryString = System.getProperty("QUERY_STRING", "");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   108
                RequestMethod = System.getProperty("REQUEST_METHOD", "");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   109
                ServerName = System.getProperty("SERVER_NAME", "");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   110
                ServerPort = Integer.getInteger("SERVER_PORT", 0).intValue();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   111
                return null;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   112
            }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   113
        });
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   114
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   115
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   116
    /* list of handlers for supported commands */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   117
    private static CGICommandHandler commands[] = {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   118
        new CGIForwardCommand(),
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   119
        new CGIGethostnameCommand(),
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   120
        new CGIPingCommand(),
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   121
        new CGITryHostnameCommand()
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   122
    };
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   123
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   124
    /* construct table mapping command strings to handlers */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   125
    private static Hashtable<String, CGICommandHandler> commandLookup;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   126
    static {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   127
        commandLookup = new Hashtable<>();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   128
        for (int i = 0; i < commands.length; ++ i)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   129
            commandLookup.put(commands[i].getName(), commands[i]);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   130
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   131
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   132
    /* prevent instantiation of this class */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   133
    private CGIHandler() {}
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   134
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   135
    /**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   136
     * Execute command given in query string on URL.  The string before
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   137
     * the first '=' is interpreted as the command name, and the string
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   138
     * after the first '=' is the parameters to the command.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   139
     */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   140
    public static void main(String args[])
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   141
    {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   142
        try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   143
            String command, param;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   144
            int delim = QueryString.indexOf('=');
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   145
            if (delim == -1) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   146
                command = QueryString;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   147
                param = "";
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   148
            }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   149
            else {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   150
                command = QueryString.substring(0, delim);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   151
                param = QueryString.substring(delim + 1);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   152
            }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   153
            CGICommandHandler handler =
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   154
                commandLookup.get(command);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   155
            if (handler != null)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   156
                try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   157
                    handler.execute(param);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   158
                } catch (CGIClientException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   159
                    e.printStackTrace();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   160
                    returnClientError(e.getMessage());
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   161
                } catch (CGIServerException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   162
                    e.printStackTrace();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   163
                    returnServerError(e.getMessage());
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   164
                }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   165
            else
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   166
                returnClientError("invalid command.");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   167
        } catch (Exception e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   168
            e.printStackTrace();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   169
            returnServerError("internal error: " + e.getMessage());
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   170
        }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   171
        System.exit(0);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   172
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   173
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   174
    /**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   175
     * Return an HTML error message indicating there was error in
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   176
     * the client's request.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   177
     */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   178
    private static void returnClientError(String message)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   179
    {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   180
        System.out.println("Status: 400 Bad Request: " + message);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   181
        System.out.println("Content-type: text/html");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   182
        System.out.println("");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   183
        System.out.println("<HTML>" +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   184
                           "<HEAD><TITLE>Java RMI Client Error" +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   185
                           "</TITLE></HEAD>" +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   186
                           "<BODY>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   187
        System.out.println("<H1>Java RMI Client Error</H1>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   188
        System.out.println("");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   189
        System.out.println(message);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   190
        System.out.println("</BODY></HTML>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   191
        System.exit(1);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   192
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   193
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   194
    /**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   195
     * Return an HTML error message indicating an error occurred
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   196
     * here on the server.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   197
     */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   198
    private static void returnServerError(String message)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   199
    {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   200
        System.out.println("Status: 500 Server Error: " + message);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   201
        System.out.println("Content-type: text/html");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   202
        System.out.println("");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   203
        System.out.println("<HTML>" +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   204
                           "<HEAD><TITLE>Java RMI Server Error" +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   205
                           "</TITLE></HEAD>" +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   206
                           "<BODY>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   207
        System.out.println("<H1>Java RMI Server Error</H1>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   208
        System.out.println("");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   209
        System.out.println(message);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   210
        System.out.println("</BODY></HTML>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   211
        System.exit(1);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   212
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   213
}
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   214
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   215
/**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   216
 * "forward" command: Forward request body to local port on the server,
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   217
 * and send response back to client.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   218
 */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   219
final class CGIForwardCommand implements CGICommandHandler {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   220
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   221
    public String getName() {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   222
        return "forward";
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   223
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   224
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   225
    @SuppressWarnings("deprecation")
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   226
    private String getLine (DataInputStream socketIn) throws IOException {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   227
        return socketIn.readLine();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   228
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   229
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   230
    public void execute(String param) throws CGIClientException, CGIServerException
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   231
    {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   232
        if (!CGIHandler.RequestMethod.equals("POST"))
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   233
            throw new CGIClientException("can only forward POST requests");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   234
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   235
        int port;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   236
        try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   237
            port = Integer.parseInt(param);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   238
        } catch (NumberFormatException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   239
            throw new CGIClientException("invalid port number.", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   240
        }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   241
        if (port <= 0 || port > 0xFFFF)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   242
            throw new CGIClientException("invalid port: " + port);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   243
        if (port < 1024)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   244
            throw new CGIClientException("permission denied for port: " +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   245
                                         port);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   246
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   247
        byte buffer[];
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   248
        Socket socket;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   249
        try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   250
            socket = new Socket(InetAddress.getLocalHost(), port);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   251
        } catch (IOException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   252
            throw new CGIServerException("could not connect to local port", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   253
        }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   254
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   255
        /*
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   256
         * read client's request body
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   257
         */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   258
        DataInputStream clientIn = new DataInputStream(System.in);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   259
        buffer = new byte[CGIHandler.ContentLength];
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   260
        try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   261
            clientIn.readFully(buffer);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   262
        } catch (EOFException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   263
            throw new CGIClientException("unexpected EOF reading request body", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   264
        } catch (IOException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   265
            throw new CGIClientException("error reading request body", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   266
        }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   267
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   268
        /*
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   269
         * send to local server in HTTP
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   270
         */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   271
        try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   272
            DataOutputStream socketOut =
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   273
                new DataOutputStream(socket.getOutputStream());
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   274
            socketOut.writeBytes("POST / HTTP/1.0\r\n");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   275
            socketOut.writeBytes("Content-length: " +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   276
                                 CGIHandler.ContentLength + "\r\n\r\n");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   277
            socketOut.write(buffer);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   278
            socketOut.flush();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   279
        } catch (IOException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   280
            throw new CGIServerException("error writing to server", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   281
        }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   282
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   283
        /*
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   284
         * read response
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   285
         */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   286
        DataInputStream socketIn;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   287
        try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   288
            socketIn = new DataInputStream(socket.getInputStream());
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   289
        } catch (IOException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   290
            throw new CGIServerException("error reading from server", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   291
        }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   292
        String key = "Content-length:".toLowerCase();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   293
        boolean contentLengthFound = false;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   294
        String line;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   295
        int responseContentLength = -1;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   296
        do {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   297
            try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   298
                line = getLine(socketIn);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   299
            } catch (IOException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   300
                throw new CGIServerException("error reading from server", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   301
            }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   302
            if (line == null)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   303
                throw new CGIServerException(
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   304
                    "unexpected EOF reading server response");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   305
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   306
            if (line.toLowerCase().startsWith(key)) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   307
                if (contentLengthFound) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   308
                    throw new CGIServerException(
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   309
                            "Multiple Content-length entries found.");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   310
                } else {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   311
                    responseContentLength =
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   312
                        Integer.parseInt(line.substring(key.length()).trim());
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   313
                    contentLengthFound = true;
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   314
                }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   315
            }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   316
        } while ((line.length() != 0) &&
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   317
                 (line.charAt(0) != '\r') && (line.charAt(0) != '\n'));
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   318
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   319
        if (!contentLengthFound || responseContentLength < 0)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   320
            throw new CGIServerException(
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   321
                "missing or invalid content length in server response");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   322
        buffer = new byte[responseContentLength];
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   323
        try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   324
            socketIn.readFully(buffer);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   325
        } catch (EOFException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   326
            throw new CGIServerException(
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   327
                "unexpected EOF reading server response", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   328
        } catch (IOException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   329
            throw new CGIServerException("error reading from server", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   330
        }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   331
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   332
        /*
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   333
         * send response back to client
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   334
         */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   335
        System.out.println("Status: 200 OK");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   336
        System.out.println("Content-type: application/octet-stream");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   337
        System.out.println("");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   338
        try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   339
            System.out.write(buffer);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   340
        } catch (IOException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   341
            throw new CGIServerException("error writing response", e);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   342
        }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   343
        System.out.flush();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   344
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   345
}
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   346
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   347
/**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   348
 * "gethostname" command: Return the host name of the server as the
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   349
 * response body
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   350
 */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   351
final class CGIGethostnameCommand implements CGICommandHandler {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   352
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   353
    public String getName() {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   354
        return "gethostname";
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   355
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   356
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   357
    public void execute(String param)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   358
    {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   359
        System.out.println("Status: 200 OK");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   360
        System.out.println("Content-type: application/octet-stream");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   361
        System.out.println("Content-length: " +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   362
                           CGIHandler.ServerName.length());
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   363
        System.out.println("");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   364
        System.out.print(CGIHandler.ServerName);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   365
        System.out.flush();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   366
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   367
}
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   368
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   369
/**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   370
 * "ping" command: Return an OK status to indicate that connection
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   371
 * was successful.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   372
 */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   373
final class CGIPingCommand implements CGICommandHandler {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   374
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   375
    public String getName() {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   376
        return "ping";
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   377
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   378
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   379
    public void execute(String param)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   380
    {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   381
        System.out.println("Status: 200 OK");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   382
        System.out.println("Content-type: application/octet-stream");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   383
        System.out.println("Content-length: 0");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   384
        System.out.println("");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   385
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   386
}
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   387
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   388
/**
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   389
 * "tryhostname" command: Return a human readable message describing
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   390
 * what host name is available to local Java VMs.
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   391
 */
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   392
final class CGITryHostnameCommand implements CGICommandHandler {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   393
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   394
    public String getName() {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   395
        return "tryhostname";
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   396
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   397
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   398
    public void execute(String param)
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   399
    {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   400
        System.out.println("Status: 200 OK");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   401
        System.out.println("Content-type: text/html");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   402
        System.out.println("");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   403
        System.out.println("<HTML>" +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   404
                           "<HEAD><TITLE>Java RMI Server Hostname Info" +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   405
                           "</TITLE></HEAD>" +
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   406
                           "<BODY>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   407
        System.out.println("<H1>Java RMI Server Hostname Info</H1>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   408
        System.out.println("<H2>Local host name available to Java VM:</H2>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   409
        System.out.print("<P>InetAddress.getLocalHost().getHostName()");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   410
        try {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   411
            String localHostName = InetAddress.getLocalHost().getHostName();
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   412
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   413
            System.out.println(" = " + localHostName);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   414
        } catch (UnknownHostException e) {
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   415
            System.out.println(" threw java.net.UnknownHostException");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   416
        }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   417
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   418
        System.out.println("<H2>Server host information obtained through CGI interface from HTTP server:</H2>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   419
        System.out.println("<P>SERVER_NAME = " + CGIHandler.ServerName);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   420
        System.out.println("<P>SERVER_PORT = " + CGIHandler.ServerPort);
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   421
        System.out.println("</BODY></HTML>");
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   422
    }
6d042f115c35 8155182: fix to JDK-8066750 broke jdk9 builds
rriggs
parents:
diff changeset
   423
}