jdk/test/sun/net/www/protocol/https/HttpsClient/OriginServer.java
changeset 41642 86bcd45aad5b
parent 41641 a628785b9dd9
parent 41626 bab2284261e6
child 41643 df0e03e3ca0e
equal deleted inserted replaced
41641:a628785b9dd9 41642:86bcd45aad5b
     1 /*
       
     2  * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  */
       
    23 
       
    24 /*
       
    25  *
       
    26  * This is a HTTP test server used by the regression test
       
    27  * for the bug fixes: 4323990, 4413069
       
    28  */
       
    29 
       
    30 import java.io.*;
       
    31 import java.net.*;
       
    32 import javax.net.*;
       
    33 
       
    34 /*
       
    35  * OriginServer.java -- a simple server that can serve
       
    36  * Http get request in both clear and secure channel
       
    37  */
       
    38 
       
    39 public abstract class OriginServer implements Runnable {
       
    40 
       
    41     private ServerSocket server = null;
       
    42     Exception serverException = null;
       
    43     /**
       
    44      * Constructs a OriginServer based on ss and
       
    45      * obtains a response data's bytecodes using the method
       
    46      * getBytes.
       
    47      */
       
    48     protected OriginServer(ServerSocket ss) throws Exception
       
    49     {
       
    50         server = ss;
       
    51         newListener();
       
    52         if (serverException != null)
       
    53             throw serverException;
       
    54     }
       
    55 
       
    56     /**
       
    57      * Returns an array of bytes containing the bytes for
       
    58      * the data sent in the response.
       
    59      *
       
    60      * @return the bytes for the information that is being sent
       
    61      */
       
    62     public abstract byte[] getBytes();
       
    63 
       
    64     /**
       
    65      * The "listen" thread that accepts a connection to the
       
    66      * server, parses the header and sends back the response
       
    67      */
       
    68     public void run()
       
    69     {
       
    70         Socket socket;
       
    71 
       
    72         // accept a connection
       
    73         try {
       
    74             socket = server.accept();
       
    75         } catch (IOException e) {
       
    76             System.out.println("Class Server died: " + e.getMessage());
       
    77             serverException = e;
       
    78             return;
       
    79         }
       
    80         try {
       
    81             DataOutputStream out =
       
    82                 new DataOutputStream(socket.getOutputStream());
       
    83             try {
       
    84                 BufferedReader in =
       
    85                     new BufferedReader(new InputStreamReader(
       
    86                                 socket.getInputStream()));
       
    87                 // read the request
       
    88                 readRequest(in);
       
    89                 // retrieve bytecodes
       
    90                 byte[] bytecodes = getBytes();
       
    91                 // send bytecodes in response (assumes HTTP/1.0 or later)
       
    92                 try {
       
    93                     out.writeBytes("HTTP/1.0 200 OK\r\n");
       
    94                     out.writeBytes("Content-Length: " + bytecodes.length +
       
    95                                    "\r\n");
       
    96                     out.writeBytes("Content-Type: text/html\r\n\r\n");
       
    97                     out.write(bytecodes);
       
    98                     out.flush();
       
    99                 } catch (IOException ie) {
       
   100                     serverException = ie;
       
   101                     return;
       
   102                 }
       
   103 
       
   104             } catch (Exception e) {
       
   105                 // write out error response
       
   106                 out.writeBytes("HTTP/1.0 400 " + e.getMessage() + "\r\n");
       
   107                 out.writeBytes("Content-Type: text/html\r\n\r\n");
       
   108                 out.flush();
       
   109             }
       
   110 
       
   111         } catch (IOException ex) {
       
   112             System.out.println("error writing response: " + ex.getMessage());
       
   113             serverException = ex;
       
   114 
       
   115         } finally {
       
   116             try {
       
   117                 socket.close();
       
   118             } catch (IOException e) {
       
   119                 serverException = e;
       
   120             }
       
   121         }
       
   122     }
       
   123 
       
   124     /**
       
   125      * Create a new thread to listen.
       
   126      */
       
   127     private void newListener()
       
   128     {
       
   129         (new Thread(this)).start();
       
   130     }
       
   131 
       
   132     /**
       
   133      * read the response, don't care for the syntax of the request-line
       
   134      * for this testing
       
   135      */
       
   136     private static void readRequest(BufferedReader in)
       
   137         throws IOException
       
   138     {
       
   139         String line = null;
       
   140         System.out.println("Server received: ");
       
   141         do {
       
   142             if (line != null)
       
   143                 System.out.println(line);
       
   144             line = in.readLine();
       
   145         } while ((line.length() != 0) &&
       
   146                 (line.charAt(0) != '\r') && (line.charAt(0) != '\n'));
       
   147     }
       
   148 }