public void process(Interest interest) {

    RequestInfo rp = request.getRequestProcessor();
    rp.setStage(org.apache.coyote.Constants.STAGE_PARSE);
    error = false;
    // keepAlive = true;
    // setting up the I/O
    // this.interest = interest;
    // outputBuffer.recycle();
    inputBuffer.setInterest(interest);
    inputBuffer.setCCNConnector(endpoint.getCCNConnector());
    outputBuffer.setInterest(interest);
    outputBuffer.setCCNConnector(endpoint.getCCNConnector());
    outputBuffer.setUriHashMap(endpoint.getCCNConnector().getUriHashMap());
    // outputBuffer.setCcnhandle(endpoint.getCcnhandle());
    // step1: parse CCN header
    // step2: put the header content into Request
    // while (!error && !endpoint.isPaused()&&keepAlive) {
    if (!error) {
      rp.setStage(org.apache.coyote.Constants.STAGE_PREPARE);
      inputBuffer.parseRequet();
      // outputBuffer.setUri(inputBuffer.getOriginalUri());
      outputBuffer.setUri(inputBuffer.getUri());
      outputBuffer.initCCNOutputStream();
      request.setStartTime(System.currentTimeMillis());
      // step3: call service(request,response)
      rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
      try {
        adapter.service(request, response);
        // keepAlive = false;
      } catch (Exception e) {
        // TODO Auto-generated catch block
        error = true;
        e.printStackTrace();
      }

      // step4: Finish the handling of the request
      rp.setStage(org.apache.coyote.Constants.STAGE_ENDINPUT);
      inputBuffer.endRequest();
      // step5: next request
      // inputBuffer.nextRequest();
      // outputBuffer.nextRequest();

    }
    rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
    // Recycle
    inputBuffer.recycle();
    outputBuffer.recycle();
    // this.interest = null;

  }