private void flush( ClientDelegate client, HttpServletRequest httpRequest, HttpServletResponse httpResponse) throws IOException { List<RHTTPRequest> requests = client.process(httpRequest); if (requests != null) { // Schedule before sending the requests, to avoid that the remote client // reconnects before we have scheduled the expiration timeout. if (!client.isClosed()) schedule(client); ServletOutputStream output = httpResponse.getOutputStream(); for (RHTTPRequest request : requests) output.write(request.getFrameBytes()); // I could count the framed bytes of all requests and set a Content-Length header, // but the implementation of ServletOutputStream takes care of everything: // if the request was HTTP/1.1, then flushing result in a chunked response, but the // client know how to handle it; if the request was HTTP/1.0, then no chunking. // To avoid chunking in HTTP/1.1 I must set the Content-Length header. output.flush(); logger.debug("Delivered to device {} requests {} ", client.getTargetId(), requests); } }