HttpServletResponseImpl responseFacade,
AbstractHttpResponse response,
byte []buffer, int offset, int length)
throws IOException
{
AbstractHttpRequest absRequest = request.getAbstractHttpRequest();
int len = _segments.length;
for (int i = 0; i < len; i++) {
Segment segment = _segments[i];
String value = null;
CharSegment csValue = null;
switch (segment._code) {
case Segment.TEXT:
int sublen = segment._data.length;
byte []data = segment._data;
for (int j = 0; j < sublen; j++)
buffer[offset++] = data[j];
break;
case Segment.CHAR:
buffer[offset++] = segment._ch;
break;
case 'b':
if (responseFacade.getStatus() == 304)
buffer[offset++] = (byte) '-';
else
offset = print(buffer, offset, response.getContentLength());
break;
// cookie
case 'c':
Cookie cookie = request.getCookie(segment._string);
if (cookie == null)
cookie = responseFacade.getCookie(segment._string);
if (cookie == null)
buffer[offset++] = (byte) '-';
else
offset = print(buffer, offset, cookie.getValue());
break;
// set cookie
case Segment.SET_COOKIE:
ArrayList<Cookie> cookies = responseFacade.getCookies();
if (cookies == null || cookies.size() == 0)
buffer[offset++] = (byte) '-';
else {
_cb.clear();
response.fillCookie(_cb, (Cookie) cookies.get(0), 0, 0, false);
offset = print(buffer, offset, _cb.getBuffer(), 0, _cb.getLength());
}
break;
case 'h':
if (isHostnameDnsLookup()) {
String addrName = request.getRemoteAddr();
InetAddress addr = InetAddress.getByName(addrName);
offset = print(buffer, offset, addr.getHostName());
}
else
offset = absRequest.printRemoteAddr(buffer, offset);
break;
// input header
case 'i':
csValue = absRequest.getHeaderBuffer(segment._string);
if (csValue == null)
buffer[offset++] = (byte) '-';
else
offset = print(buffer, offset, csValue);
break;
case 'l':
buffer[offset++] = (byte) '-';
break;
// request attribute
case 'n':
Object oValue = request.getAttribute(segment._string);
if (oValue == null)
buffer[offset++] = (byte) '-';
else
offset = print(buffer, offset, String.valueOf(oValue));
break;
// output header
case 'o':
value = response.getHeader(segment._string);
if (value == null)
buffer[offset++] = (byte) '-';
else
offset = print(buffer, offset, value);
break;
case 'r':
offset = print(buffer, offset, request.getMethod());
buffer[offset++] = (byte) ' ';
data = absRequest.getUriBuffer();
sublen = absRequest.getUriLength();
// server/02e9
if (buffer.length - offset - 128 < sublen) {
sublen = buffer.length - offset - 128;
System.arraycopy(data, 0, buffer, offset, sublen);