@Override public void write(HeaderWriter writer) { writer.write(HTTPHeaderDefaults.CONNECTION, "closed"); } };
private static void writeHeadersWithHeaderWriter(HeaderWritable headers, HTTPContentType contentType, NetResponseWriter outputStream, int len, HeaderWriter headerWriter) { if (null!=headers) { headers.write(headerWriter); //NOTE: using content_length, connection or status are all discouraged here.. } headerWriter.writeUTF8(HTTPHeaderDefaults.SERVER, SERVER_HEADER_NAME); headerWriter.writeUTF8(HTTPHeaderDefaults.CONTENT_TYPE, contentType.getBytes()); headerWriter.write(HTTPHeaderDefaults.CONTENT_LENGTH, len); outputStream.writeByte('\r'); outputStream.writeByte('\n'); }
@Override protected HeaderWriter initialValue() { return new HeaderWriter(); } };
private static void writeHeaderAndPublish(int statusCode, HeaderWritable headers, HTTPContentType contentType, Pipe<ServerResponseSchema> pipe, NetResponseWriter outputStream, int len, MsgCommandChannel<?> msgCommandChannel) { ////////////////////Write the header HTTPUtilResponse.openToEmptyBlock(msgCommandChannel.data, outputStream); outputStream.write(HTTPRevisionDefaults.HTTP_1_1.getBytes()); outputStream.write(HTTPResponseStatusCodes.codes[statusCode]); //this is " 200 OK\r\n" for most calls writeDateTimeHeader(outputStream); writeHeadersWithHeaderWriter(headers, contentType, outputStream, len, msgCommandChannel.headerWriter.target(outputStream)); HTTPUtilResponse.finalizeLengthOfFirstBlock(msgCommandChannel.data, outputStream); //now publish both header and payload Pipe.publishWrites(pipe); }
@Override public void write(HeaderWriter writer) { //writer.writeUTF8(HTTPHeaderDefaults.COOKIE, // largeCookie); writer.writeUTF8(HTTPHeaderDefaults.CONTENT_TYPE, contentType); } };
@Override public void write(HeaderWriter writer) { writer.writeUTF8(HTTPHeaderDefaults.CONTENT_LOCATION, defaultPathBytes); }
DataOutputBlobWriter.openField(hw); if (null!=headers) { headers.write(msgCommandChannel.headerWriter.target(hw));
private static void writeHeader(NetResponseWriter outputStream, final int headerBlobPosition, final long positionOfLen, int statusCode, final int context, HTTPContentType contentType, int length, boolean chunked) { //logger.info("writing head at position {} ", headerBlobPosition); DataOutputBlobWriter.openFieldAtPosition(outputStream, headerBlobPosition); byte[] revisionBytes = HTTPRevisionDefaults.HTTP_1_1.getBytes(); byte[] etagBytes = null;//TODO: nice feature to add later int connectionIsClosed = 1&(context>>ServerCoordinator.CLOSE_CONNECTION_SHIFT); byte[] typeBytes = null!=contentType?contentType.getBytes():null; HTTPUtil.writeHeader(revisionBytes, statusCode, 0, etagBytes, typeBytes, length, chunked, true, outputStream, connectionIsClosed, w -> w.write(HTTPHeaderDefaults.DATE, outputStream.headerDate) ); int propperLength = DataOutputBlobWriter.length(outputStream); Pipe.validateVarLength(outputStream.getPipe(), propperLength); Pipe.setIntValue(propperLength, outputStream.getPipe(), positionOfLen); //go back and set the right length. outputStream.getPipe().closeBlobFieldWrite(); }
headers.write(msgCommandChannel.headerWriter.target(hw));
@Override public boolean responseHTTP(HTTPResponseReader reader) { if (reader.isConnectionClosed()) { return responder.closed(); } else { return responder.respondWith(200, !reader.isEndOfResponse(), (headWriter) -> { reader.structured().visit(HTTPHeader.class, (header,r,id)->{ //we are a proxy, our response has its own length, connection and status if (header != HTTPHeaderDefaults.CONTENT_LENGTH && header != HTTPHeaderDefaults.CONNECTION && header != HTTPHeaderDefaults.STATUS ) { headWriter.write(header, reader.getSpec(), r); } }); }, reader.contentType(), (payloadWriter) -> { payloadWriter.write(reader.structured().readPayload()); }); } }
w.write(header, spec, reader); });