alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
 * Copyright 1999,2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */ 
package org.apache.coyote.http11;

import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.http.MimeHeaders;

import org.apache.coyote.ActionCode;
import org.apache.coyote.Adapter;
import org.apache.coyote.Request;
import org.apache.coyote.Response;

/**
 * Adapter which will return random responses using pipelining, which means it
 * will never try to generate bogus responses.
 *
 * @author Remy Maucherat
 */
public class RandomAdapter
    implements Adapter {


    public static final String CRLF = "\r\n";
    public static final byte[] b = "0123456789\r\n".getBytes();
    public static final ByteChunk bc = new ByteChunk();


    /** 
     * Service method, which dumps the request to the console.
     */
    public void service(Request req, Response res)
	throws Exception {

        double rand = Math.random();
        int n = (int) Math.round(10 * rand);

        // Temp variables
        byte[] buf = null;
        int nRead = 0;
        StringBuffer sbuf = new StringBuffer();
        MimeHeaders headers = req.getMimeHeaders();
        int size = headers.size();

        switch (n) {

        case 0:

            // 0) Do nothing
            System.out.println("Response 0");
            break;

        case 1:

            // 1) Set content length, and write the appropriate content
            System.out.println("Response 1");
            res.setContentLength(b.length);
            bc.setBytes(b, 0, b.length);
            res.doWrite(bc);
            break;

        case 2:

            // 2) Read the request data, and print out the number of bytes
            // read
            System.out.println("Response 2");
            while (nRead >= 0) {
                nRead = req.doRead(bc);
                buf = ("Read " + nRead + " bytes\r\n").getBytes();
                bc.setBytes(buf, 0, buf.length);
                res.doWrite(bc);
            }
            break;

        case 3:

            // 3) Return 204 (no content), while reading once on input
            System.out.println("Response 3");
            res.setStatus(204);
            nRead = req.doRead(bc);
            res.setHeader("Info", "Read " + nRead + " bytes");
            break;

        case 4:

            // 4) Do a request dump
            System.out.println("Response 4");
            sbuf.append("Request dump:");
            sbuf.append(CRLF);
            sbuf.append(req.method());
            sbuf.append(" ");
            sbuf.append(req.unparsedURI());
            sbuf.append(" ");
            sbuf.append(req.protocol());
            sbuf.append(CRLF);
            for (int i = 0; i < size; i++) {
                sbuf.append(headers.getName(i) + ": ");
                sbuf.append(headers.getValue(i).toString());
                sbuf.append(CRLF);
            }
            sbuf.append("Request body:");
            sbuf.append(CRLF);
            res.action(ActionCode.ACTION_ACK, null);
            ByteChunk bc2 = new ByteChunk();
            byte[] b2 = sbuf.toString().getBytes();
            bc2.setBytes(b2, 0, b2.length);
            res.doWrite(bc2);
            while (nRead >= 0) {
                nRead = req.doRead(bc2);
                if (nRead > 0)
                    res.doWrite(bc2);
            }
            break;

        default:

            // Response not implemented yet
            System.out.println("Response " + n + " is not implemented yet");

        }

/*
        StringBuffer buf = new StringBuffer();
        buf.append("Request dump:");
        buf.append(CRLF);
        buf.append(req.method());
        buf.append(" ");
        buf.append(req.unparsedURI());
        buf.append(" ");
        buf.append(req.protocol());
        buf.append(CRLF);
        
        MimeHeaders headers = req.getMimeHeaders();
        int size = headers.size();
        for (int i = 0; i < size; i++) {
            buf.append(headers.getName(i) + ": ");
            buf.append(headers.getValue(i).toString());
            buf.append(CRLF);
        }

        buf.append("Request body:");
        buf.append(CRLF);

        res.action(ActionCode.ACTION_ACK, null);

        ByteChunk bc = new ByteChunk();
        byte[] b = buf.toString().getBytes();
        bc.setBytes(b, 0, b.length);
        res.doWrite(bc);

        int nRead = 0;

        while (nRead >= 0) {
            nRead = req.doRead(bc);
            if (nRead > 0)
                res.doWrite(bc);
        }
*/

    }


}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.