jdk/test/sun/net/www/MarkResetTest.java
changeset 15726 27bb87e628ae
parent 15725 e0516b913894
parent 15722 b3dd9b35c97f
child 15727 e3baad90c331
--- a/jdk/test/sun/net/www/MarkResetTest.java	Mon Feb 04 18:08:53 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,455 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- *
- * run from MarkResetTest.sh
- */
-
-import java.io.*;
-import java.net.*;
-import java.util.regex.*;
-
-public class MarkResetTest {
-
-    /**
-     * A class that simulates, on a separate, an FTP server.
-     */
-    private class FtpServer extends Thread {
-        private ServerSocket    server;
-        private int port;
-        private boolean done = false;
-        private boolean pasvEnabled = true;
-        private boolean portEnabled = true;
-        private boolean extendedEnabled = true;
-
-        /**
-         * This Inner class will handle ONE client at a time.
-         * That's where 99% of the protocol handling is done.
-         */
-
-        private class FtpServerHandler extends Thread {
-            BufferedReader in;
-            PrintWriter out;
-            Socket client;
-            private final int ERROR = 0;
-            private final int USER = 1;
-            private final int PASS = 2;
-            private final int CWD =  3;
-            private final int TYPE = 4;
-            private final int RETR = 5;
-            private final int PASV = 6;
-            private final int PORT = 7;
-            private final int QUIT = 8;
-            private final int EPSV = 9;
-            String[] cmds = { "USER", "PASS", "CWD",
-                                "TYPE", "RETR", "PASV",
-                                "PORT", "QUIT", "EPSV"};
-            private String arg = null;
-            private ServerSocket pasv = null;
-            private int data_port = 0;
-            private InetAddress data_addr = null;
-
-            /**
-             * Parses a line to match it with one of the supported FTP commands.
-             * Returns the command number.
-             */
-
-            private int parseCmd(String cmd) {
-                if (cmd == null || cmd.length() < 3)
-                    return ERROR;
-                int blank = cmd.indexOf(' ');
-                if (blank < 0)
-                    blank = cmd.length();
-                if (blank < 3)
-                    return ERROR;
-                String s = cmd.substring(0, blank);
-                if (cmd.length() > blank+1)
-                    arg = cmd.substring(blank+1, cmd.length());
-                else
-                    arg = null;
-                for (int i = 0; i < cmds.length; i++) {
-                    if (s.equalsIgnoreCase(cmds[i]))
-                        return i+1;
-                }
-                return ERROR;
-            }
-
-            public FtpServerHandler(Socket cl) {
-                client = cl;
-            }
-
-            protected boolean isPasvSet() {
-                if (pasv != null && !pasvEnabled) {
-                    try {
-                        pasv.close();
-                    } catch (IOException ex) {
-                    }
-                    pasv = null;
-                }
-                if (pasvEnabled && pasv != null)
-                    return true;
-                return false;
-            }
-
-            /**
-             * Open the data socket with the client. This can be the
-             * result of a "PASV" or "PORT" command.
-             */
-
-            protected OutputStream getOutDataStream() {
-                try {
-                    if (isPasvSet()) {
-                        Socket s = pasv.accept();
-                        return s.getOutputStream();
-                    }
-                    if (data_addr != null) {
-                        Socket s = new Socket(data_addr, data_port);
-                        data_addr = null;
-                        data_port = 0;
-                        return s.getOutputStream();
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-                return null;
-            }
-
-            protected InputStream getInDataStream() {
-                try {
-                    if (isPasvSet()) {
-                        Socket s = pasv.accept();
-                        return s.getInputStream();
-                    }
-                    if (data_addr != null) {
-                        Socket s = new Socket(data_addr, data_port);
-                        data_addr = null;
-                        data_port = 0;
-                        return s.getInputStream();
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-                return null;
-            }
-
-            /**
-             * Handles the protocol exchange with the client.
-             */
-
-            public void run() {
-                boolean done = false;
-                String str;
-                int res;
-                boolean logged = false;
-                boolean waitpass = false;
-
-                try {
-                    in = new BufferedReader(new InputStreamReader(
-                                                client.getInputStream()));
-                    out = new PrintWriter(client.getOutputStream(), true);
-                    out.println("220 tatooine FTP server (SunOS 5.8) ready.");
-                } catch (Exception ex) {
-                    return;
-                }
-                while (!done) {
-                    try {
-                        str = in.readLine();
-                        res = parseCmd(str);
-                        if ((res > PASS && res != QUIT) && !logged) {
-                            out.println("530 Not logged in.");
-                            continue;
-                        }
-                        switch (res) {
-                        case ERROR:
-                            out.println("500 '" + str +
-                                        "': command not understood.");
-                            break;
-                        case USER:
-                            if (!logged && !waitpass) {
-                                out.println("331 Password required for " + arg);
-                                waitpass = true;
-                            } else {
-                                out.println("503 Bad sequence of commands.");
-                            }
-                            break;
-                        case PASS:
-                            if (!logged && waitpass) {
-                                out.println("230-Welcome to the FTP server!");
-                                out.println("ab");
-                                out.println("230 Guest login ok, " +
-                                            "access restrictions apply.");
-                                logged = true;
-                                waitpass = false;
-                            } else
-                                out.println("503 Bad sequence of commands.");
-                            break;
-                        case QUIT:
-                            out.println("221 Goodbye.");
-                            out.flush();
-                            out.close();
-                            if (pasv != null)
-                                pasv.close();
-                            done = true;
-                            break;
-                        case TYPE:
-                            out.println("200 Type set to " + arg + ".");
-                            break;
-                        case CWD:
-                            out.println("250 CWD command successful.");
-                            break;
-                        case EPSV:
-                            if (!extendedEnabled || !pasvEnabled) {
-                                out.println("500 EPSV is disabled, " +
-                                                "use PORT instead.");
-                                continue;
-                            }
-                            if ("all".equalsIgnoreCase(arg)) {
-                                out.println("200 EPSV ALL command successful.");
-                                continue;
-                            }
-                            try {
-                                if (pasv == null)
-                                    pasv = new ServerSocket(0);
-                                int port = pasv.getLocalPort();
-                                out.println("229 Entering Extended" +
-                                        " Passive Mode (|||" + port + "|)");
-                            } catch (IOException ssex) {
-                                out.println("425 Can't build data connection:" +
-                                                " Connection refused.");
-                            }
-                            break;
-
-                        case PASV:
-                            if (!pasvEnabled) {
-                                out.println("500 PASV is disabled, " +
-                                                "use PORT instead.");
-                                continue;
-                            }
-                            try {
-                                if (pasv == null)
-                                    pasv = new ServerSocket(0);
-                                int port = pasv.getLocalPort();
-
-                                // Parenthesis are optional, so let's be
-                                // nasty and don't put them
-                                out.println("227 Entering Passive Mode" +
-                                                " 127,0,0,1," +
-                                            (port >> 8) + "," + (port & 0xff));
-                            } catch (IOException ssex) {
-                                out.println("425 Can't build data connection:" +
-                                                 "Connection refused.");
-                            }
-                            break;
-                        case PORT:
-                            if (!portEnabled) {
-                                out.println("500 PORT is disabled, " +
-                                                "use PASV instead");
-                                continue;
-                            }
-                            StringBuffer host;
-                            int i = 0, j = 4;
-                            while (j > 0) {
-                                i = arg.indexOf(',', i + 1);
-                                if (i < 0)
-                                    break;
-                                j--;
-                            }
-                            if (j != 0) {
-                                out.println("500 '" + arg + "':" +
-                                            " command not understood.");
-                                continue;
-                            }
-                            try {
-                                host = new StringBuffer(arg.substring(0, i));
-                                for (j = 0; j < host.length(); j++)
-                                    if (host.charAt(j) == ',')
-                                        host.setCharAt(j, '.');
-                                String ports = arg.substring(i+1);
-                                i = ports.indexOf(',');
-                                data_port = Integer.parseInt(
-                                                ports.substring(0, i)) << 8;
-                                data_port += (Integer.parseInt(
-                                                ports.substring(i+1)));
-                                data_addr = InetAddress.getByName(
-                                                        host.toString());
-                                out.println("200 Command okay.");
-                            } catch (Exception ex3) {
-                                data_port = 0;
-                                data_addr = null;
-                                out.println("500 '" + arg + "':" +
-                                             " command not understood.");
-                            }
-                            break;
-                        case RETR:
-                            {
-                                File file = new File(arg);
-                                if (!file.exists()) {
-                                   System.out.println("File not found");
-                                   out.println("200 Command okay.");
-                                   out.println("550 '" + arg +
-                                            "' No such file or directory.");
-                                   break;
-                                }
-                                FileInputStream fin = new FileInputStream(file);
-                                OutputStream dout = getOutDataStream();
-                                if (dout != null) {
-                                   out.println("150 Binary data connection" +
-                                                " for " + arg +
-                                                " (" + client.getInetAddress().
-                                                getHostAddress() + ") (" +
-                                                file.length() + " bytes).");
-                                    int c;
-                                    int len = 0;
-                                    while ((c = fin.read()) != -1) {
-                                        dout.write(c);
-                                        len++;
-                                    }
-                                    dout.flush();
-                                    dout.close();
-                                    fin.close();
-                                   out.println("226 Binary Transfer complete.");
-                                } else {
-                                    out.println("425 Can't build data" +
-                                        " connection: Connection refused.");
-                                }
-                            }
-                            break;
-                        }
-                    } catch (IOException ioe) {
-                        ioe.printStackTrace();
-                        try {
-                            out.close();
-                        } catch (Exception ex2) {
-                        }
-                        done = true;
-                    }
-                }
-            }
-        }
-
-        public FtpServer(int port) {
-            this.port = port;
-        }
-
-        public FtpServer() {
-            this(21);
-        }
-
-        public int getPort() {
-            if (server != null)
-                return server.getLocalPort();
-            return 0;
-        }
-
-        /**
-         * A way to tell the server that it can stop.
-         */
-        synchronized public void terminate() {
-            done = true;
-        }
-
-
-        /*
-         * All we got to do here is create a ServerSocket and wait for a
-         * connection. When a connection happens, we just have to create
-         * a thread that will handle it.
-         */
-        public void run() {
-            try {
-                server = new ServerSocket(port);
-                Socket client;
-                client = server.accept();
-                (new FtpServerHandler(client)).start();
-                server.close();
-            } catch (Exception e) {
-            }
-        }
-    }
-
-    public static void main(String[] args) throws Exception {
-        MarkResetTest test = new MarkResetTest();
-    }
-
-    public MarkResetTest() {
-        FtpServer server = null;
-        try {
-            server = new FtpServer(0);
-            server.start();
-            int port = 0;
-            while (port == 0) {
-                Thread.sleep(500);
-                port = server.getPort();
-            }
-
-            String filename = "EncDec.doc";
-            URL url = new URL("ftp://localhost:" + port + "/" +
-                                filename);
-
-            URLConnection con = url.openConnection();
-            System.out.println("getContent: " + con.getContent());
-            System.out.println("getContent-length: " + con.getContentLength());
-
-            InputStream is = con.getInputStream();
-
-            /**
-             * guessContentTypeFromStream method calls mark and reset methods
-             * on the given stream. Make sure that calling
-             * guessContentTypeFromStream repeatedly does not affect
-             * reading from the stream afterwards
-             */
-            System.out.println("Call GuessContentTypeFromStream()" +
-                                " several times..");
-            for (int i = 0; i < 5; i++) {
-                System.out.println((i + 1) + " mime-type: " +
-                        con.guessContentTypeFromStream(is));
-            }
-
-            int len = 0;
-            int c;
-            while ((c = is.read()) != -1) {
-                len++;
-            }
-            is.close();
-            System.out.println("read: " + len + " bytes of the file");
-
-            // We're done!
-            server.terminate();
-            server.interrupt();
-
-            // Did we pass ?
-            if (len != (new File(filename)).length()) {
-                throw new Exception("Failed to read the file correctly");
-            }
-            System.out.println("PASSED: File read correctly");
-        } catch (Exception e) {
-            e.printStackTrace();
-            try {
-                server.terminate();
-                server.interrupt();
-            } catch (Exception ex) {
-            }
-            throw new RuntimeException("FTP support error: " + e.getMessage());
-        }
-    }
-}