code: private boolean parseRequest()
      throws IOException
    {
      try {
        ReadStream is = connTcp().readStream();
        
        if (! readRequest(is)) {
          clearRequest();
  
          return false;
        }
        
        _sequence = connHttp().nextSequenceRead();
  
        if (log.isLoggable(Level.FINE)) {
          log.fine(_method + " "
                   + new String(_uri, 0, _uriLength) + " " + _protocol
                   + " (" + dbgId() + ")");
          log.fine("Remote-IP: " + connTcp().addressRemote()
                   + ":" + connTcp().portRemote() + " (" + dbgId() + ")");
        }
  
        parseHeaders(is);
  
        return true;
      } catch (ClientDisconnectException e) {
        throw e;
      } catch (SocketTimeoutException e) {
        log.log(Level.FINER, e.toString(), e);
        
        return false;
      } catch (ArrayIndexOutOfBoundsException e) {
        log.log(Level.FINEST, e.toString(), e);
        
        throw new BadRequestException(L.l("Invalid request: URL or headers are too long"), e);
      } catch (Throwable e) {
        log.log(Level.FINEST, e.toString(), e);
        
        throw new BadRequestException(String.valueOf(e), e);
      }
    }
docs: Parses a http request.