/**
   * When committing the response, we have to validate the set of headers, as well as setup the
   * response filters.
   */
  protected void prepareResponse() {

    /**
     * nan
     *
     * <p>copy header info into InternCCNOutputBuffer.
     *
     * <p>create CCNOutputStream ???
     */
    String uri = inputBuffer.getUri(); // get the file name;
    int index = uri.indexOf(".");

    String fileInfo = null;
    String rootPath = endpoint.getCCNConnector().getRootPath();
    String filepath = rootPath + uri;
    File file = new File(filepath);
    file.length();
    // 注意:当response.getContentLenthlog()为负数时,会有意向不到的问题。
    /*
    if(index !=-1){
    	 fileInfo = "Type:" + MapFileFormat(uri.substring(index + 1))
    			+ "\nLength:" + response.getContentLengthLong() + "\r\n";

    }else{ // no format
    	 fileInfo = "Type:" + "text/html"
    			+ "\nLength:" + response.getContentLengthLong() + "\r\n";
    }
    */

    if (index != -1) {
      fileInfo =
          "Type:" + MapFileFormat(uri.substring(index + 1)) + "\nLength:" + file.length() + "\r\n";

    } else { // no format
      fileInfo = "Type:" + "text/html" + "\nLength:" + file.length() + "\r\n";
    }

    // System.out.println("Before set Pos, Buffer pos value is:
    // "+String.valueOf(outputBuffer.getPos()));
    outputBuffer.setPos(0);
    // System.out.println("After set Pos, Buffer pos value is:
    // "+String.valueOf(outputBuffer.getPos()));
    outputBuffer.write(fileInfo.getBytes());
    outputBuffer.addActiveFilter();
  }
  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;

  }