@Override
  protected void customizeExchange(HttpExchange exchange, HttpServletRequest request) {
    exchange.addRequestHeader("TB-Tunnel", this.app.getServerIP());
    exchange.addRequestHeader(
        "TB-Credentials", this.app.getClientKey() + "_" + this.app.getClientSecret());
    exchange.addRequestHeader("TB-Tunnel-Version", this.app.getVersion());

    if (this.app.isBypassingSquid()) {
      exchange.addRequestHeader("TB-Tunnel-Port", "2010");
    }

    for (String key : app.getCustomHeaders().keySet()) {
      exchange.addRequestHeader(key, app.getCustomHeaders().get(key));
    }

    Logger.getLogger(ForwarderServlet.class.getName())
        .log(
            Level.INFO,
            " >> [{0}] {1}",
            new Object[] {request.getMethod(), request.getRequestURL()});

    if (app.isDebugMode()) {
      Enumeration<String> headerNames = request.getHeaderNames();
      if (headerNames != null) {
        StringBuilder sb = new StringBuilder();
        String header;

        while (headerNames.hasMoreElements()) {
          header = headerNames.nextElement();
          sb.append(header)
              .append(": ")
              .append(request.getHeader(header))
              .append(System.getProperty("line.separator"));
        }
        Logger.getLogger(ForwarderServlet.class.getName()).log(Level.INFO, sb.toString());
      }
    }
  }