package org.jboss.pitbull.internal.nio.http; import org.jboss.pitbull.OrderedHeaders; import org.jboss.pitbull.PitbullChannel; import org.jboss.pitbull.RequestHeader; import org.jboss.pitbull.ResponseHeader; import java.io.IOException; /** * Works the same as BufferedOutputStream except it invokes a callback prior to: * - initial flush of buffer * - subsequent flush of buffer * * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */ public class ServerContentOutputStream extends BufferedContentOutputStream { public static class ServerContentMessage implements ContentMessage { protected RequestHeader requestHeader; protected ResponseHeader responseHeader; protected HttpResponse response; public ServerContentMessage(RequestHeader requestHeader, ResponseHeader responseHeader) { this.requestHeader = requestHeader; this.responseHeader = responseHeader; response = new HttpResponse(responseHeader); } @Override public OrderedHeaders getHeaders() { return responseHeader.getHeaders(); } @Override public byte[] getMessageBytes() throws IOException { HttpResponse response = new HttpResponse(responseHeader); return response.responseBytes(); } @Override public void prepareEmptyBody() { response.prepareEmptyBody(requestHeader); } } /** * delegate OutputStream can be null and set at another time (i.e. at initialFlush time) * * @param out */ public ServerContentOutputStream(PitbullChannel channel, RequestHeader requestHeader, ResponseHeader responseHeader) { this(channel, requestHeader, responseHeader, 8192); } /** * delegate OutputStream can be null and set at another time (i.e. at initialFlush time) * * @param out * @param size must be > 0 */ public ServerContentOutputStream(PitbullChannel channel, RequestHeader requestHeader, ResponseHeader responseHeader, int size) { super(channel, size); this.contentMessage = new ServerContentMessage(requestHeader, responseHeader); } }