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
if (log.isDebugEnabled())
log.debug("Response 0");
break;
case 1:
// 1) Set content length, and write the appropriate content
if (log.isDebugEnabled())
log.debug("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
if (log.isDebugEnabled())
log.debug("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
if (log.isDebugEnabled())
log.debug("Response 3");
res.setStatus(204);
nRead = req.doRead(bc);
res.setHeader("Info", "Read " + nRead + " bytes");
break;
case 4:
// 4) Do a request dump
if (log.isDebugEnabled())
log.debug("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
if (log.isDebugEnabled())
log.debug("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);
}
*/
}
Service method, which dumps the request to the console. |