Milán Major

netscape-revival

1 branch
Code

sun-java/classsrc/sun/net/www/protocol/http/HttpPostBufferStream.java

/*
 * @(#)HttpPostBufferStream.java	1.1 95/11/07 Herb Jellinek
 *
 * Copyright (c) 1994-1995 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and
 * without fee is hereby granted.
 * Please refer to the file http://java.sun.com/copy_trademarks.html
 * for further important copyright and trademark information and to
 * http://java.sun.com/licensing.html for further important licensing
 * information for the Java (tm) Technology.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 *
 * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
 * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
 * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
 * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
 * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
 * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
 * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES").  SUN
 * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
 * HIGH RISK ACTIVITIES.
 */

package sun.net.www.protocol.http;

import java.io.*;

/**
 * HttpPostBufferStream: A subclass of ByteArrayOutputStream that disgorges its
 * contents plus a Content-length: spec to a target stream when closed.
 *
 * @version 1.1, 07 Nov 1995
 * @author Herb Jellinek
 */

public class HttpPostBufferStream extends ByteArrayOutputStream {

    OutputStream target;

    static final String contentLengthMsg = "Content-length: ";
    static final String EOL = "\r\n";

    /*
     * Create one.
     * @param target the OutputStream to point at.
     */
    public HttpPostBufferStream(OutputStream target) {
	super();
	this.target = target;
    }

    /*
     * Close the stream and spit out the contents of the buffer.
     * Do <em>not</em> close the target stream.
     */
    public void close() throws IOException {
	// first write the header...
	int msgBufLen = contentLengthMsg.length();
	byte msgBuf[] = new byte[msgBufLen];
	contentLengthMsg.getBytes(0, msgBufLen, msgBuf, 0);
	target.write(msgBuf);

	// ...including the length.
	String sizeStr = size()+EOL+EOL;
	msgBufLen = sizeStr.length();
	msgBuf = new byte[msgBufLen];
	sizeStr.getBytes(0, msgBufLen, msgBuf, 0);
	target.write(msgBuf);

	// then write the buffer itself
	target.write(buf);

	// and a final EOL
	msgBuf = new byte[EOL.length()];
	EOL.getBytes(0, EOL.length(), msgBuf, 0);
	target.write(msgBuf);
    }
}