package org.jboss.pitbull.internal.nio.http;
import org.jboss.pitbull.OrderedHeaders;
import org.jboss.pitbull.RequestHeader;
import org.jboss.pitbull.ResponseHeader;
import org.jboss.pitbull.StatusCode;
import java.io.IOException;
import java.util.Map;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class HttpResponse
{
protected StatusCode status;
protected ResponseHeader responseHeader;
public HttpResponse(StatusCode status)
{
this.status = status;
}
public HttpResponse(ResponseHeader response)
{
this.responseHeader = response;
}
public StatusCode getStatus()
{
if (responseHeader == null) return status;
return responseHeader.getStatusCode();
}
public OrderedHeaders getHeaders()
{
if (responseHeader == null) return null;
return responseHeader.getHeaders();
}
/**
* Depending on response code and HTTP method an empty message body may have to be sent. i.e. a Content-Length of 0
*
* @param request
*/
public void prepareEmptyBody(RequestHeader request)
{
if (getStatus().getCode() < 200 || getStatus().getCode() == 204 || getStatus().getCode() == 304)
{
return;
}
if (request.getMethod().equalsIgnoreCase("HEAD")) return;
getHeaders().removeHeader("Content-Length");
getHeaders().removeHeader("Transfer-Encoding");
getHeaders().addHeader("Content-Length", "0");
return;
}
public byte[] responseBytes() throws IOException
{
StringBuilder builder = new StringBuilder(100);
builder.append("HTTP/1.1 ");
builder.append(getStatus().getCode());
builder.append(' ');
builder.append(getStatus().getStatusMessage());
builder.append("\r\n");
if (getHeaders() != null)
{
for (Map.Entry<String, String> entry : getHeaders().getHeaderList())
{
builder.append(entry.getKey()).append(": ").append(entry.getValue()).append("\r\n");
}
}
builder.append("\r\n");
return builder.toString().getBytes("UTF-8");
}
}