private boolean scanHeaders()
throws IOException
{
boolean isLoggable = log.isLoggable(Level.FINE);
ReadStream is = getRawRead();
WriteStream os = getRawWrite();
CharBuffer cb = getCharBuffer();
int code;
int len;
while (true) {
_rawWrite.flush();
code = is.read();
Server server = getServer();
if (server == null || server.isDestroyed()) {
log.fine(dbgId() + " request after server close");
killKeepalive("after server close");
return false;
}
switch (code) {
case -1:
if (isLoggable)
log.fine(dbgId() + "r: end of file");
_filter.setClientClosed(true);
killKeepalive("hmux end of file");
return false;
case HMUX_CHANNEL:
int channel = (is.read() << 8) + is.read();
if (isLoggable)
log.fine(dbgId() + "channel-r " + channel);
break;
case HMUX_YIELD:
if (log.isLoggable(Level.FINER))
log.finer(dbgId() + (char) code + "-r: yield");
os.write(HMUX_ACK);
os.write(0);
os.write(0);
os.flush();
break;
case HMUX_QUIT:
if (isLoggable)
log.fine(dbgId() + (char) code + "-r: end of request");