code: private void sendReply(Response<ByteString> response) {
      if (!replied.compareAndSet(false, true)) {
        LOGGER.warn("Already replied to ongoing request {} - spurious response {}", request, response);
      } else {
        final HttpServletResponse httpResponse = (HttpServletResponse) asyncContext.getResponse();
  
        final StatusType status = response.status();
        httpResponse.setStatus(status.code(), status.reasonPhrase());
  
        response.headerEntries().forEach(entry ->
            httpResponse.addHeader(entry.getKey(), entry.getValue()));
  
        response.payload().ifPresent(payload -> {
          try {
            payload.write(httpResponse.getOutputStream());
          } catch (IOException e) {
            LOGGER.warn("Failed to write response", e);
          }
        });
  
        asyncContext.complete();
  
        logger.accept(this, Optional.of(response));
      }
    }
docs: handles common functionality for reply() and drop() and is not overridable