SpdyHttpEncoder Class — netty Architecture
Architecture documentation for the SpdyHttpEncoder class in SpdyHttpEncoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 18ed3381_f0b5_3753_fac7_fb58d0f9ddbb["SpdyHttpEncoder"] 24dcdade_99f3_f269_fe3e_1004812a7428["SpdyHttpEncoder.java"] 18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|defined in| 24dcdade_99f3_f269_fe3e_1004812a7428 c5fabd8d_037d_1be0_1e67_19eb37c6d756["SpdyHttpEncoder()"] 18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| c5fabd8d_037d_1be0_1e67_19eb37c6d756 9aa81464_45bd_d2c4_770c_f46f2337d072["encode()"] 18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| 9aa81464_45bd_d2c4_770c_f46f2337d072 9e19a607_95cc_5b52_189e_a5072a72aa56["SpdySynStreamFrame()"] 18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| 9e19a607_95cc_5b52_189e_a5072a72aa56 0aeff057_9424_398d_c320_e72e9d1c434b["SpdyHeadersFrame()"] 18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| 0aeff057_9424_398d_c320_e72e9d1c434b 4b3a9241_a033_6042_cea3_ac272e0a6928["isLast()"] 18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| 4b3a9241_a033_6042_cea3_ac272e0a6928
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java lines 123–332
public class SpdyHttpEncoder extends MessageToMessageEncoder<HttpObject> {
private int currentStreamId;
private final boolean validateHeaders;
private final boolean headersToLowerCase;
/**
* Creates a new instance.
*
* @param version the protocol version
*/
public SpdyHttpEncoder(SpdyVersion version) {
this(version, true, true);
}
/**
* Creates a new instance.
*
* @param version the protocol version
* @param headersToLowerCase convert header names to lowercase. In a controlled environment,
* one can disable the conversion.
* @param validateHeaders validate the header names and values when adding them to the {@link SpdyHeaders}
*/
public SpdyHttpEncoder(SpdyVersion version, boolean headersToLowerCase, boolean validateHeaders) {
super(HttpObject.class);
ObjectUtil.checkNotNull(version, "version");
this.headersToLowerCase = headersToLowerCase;
this.validateHeaders = validateHeaders;
}
@Override
protected void encode(ChannelHandlerContext ctx, HttpObject msg, List<Object> out) throws Exception {
boolean valid = false;
boolean last = false;
if (msg instanceof HttpRequest) {
HttpRequest httpRequest = (HttpRequest) msg;
SpdySynStreamFrame spdySynStreamFrame = createSynStreamFrame(httpRequest);
out.add(spdySynStreamFrame);
last = spdySynStreamFrame.isLast() || spdySynStreamFrame.isUnidirectional();
valid = true;
}
if (msg instanceof HttpResponse) {
HttpResponse httpResponse = (HttpResponse) msg;
SpdyHeadersFrame spdyHeadersFrame = createHeadersFrame(httpResponse);
out.add(spdyHeadersFrame);
last = spdyHeadersFrame.isLast();
valid = true;
}
if (msg instanceof HttpContent && !last) {
HttpContent chunk = (HttpContent) msg;
chunk.content().retain();
SpdyDataFrame spdyDataFrame = new DefaultSpdyDataFrame(currentStreamId, chunk.content());
if (chunk instanceof LastHttpContent) {
LastHttpContent trailer = (LastHttpContent) chunk;
HttpHeaders trailers = trailer.trailingHeaders();
if (trailers.isEmpty()) {
spdyDataFrame.setLast(true);
out.add(spdyDataFrame);
} else {
// Create SPDY HEADERS frame out of trailers
SpdyHeadersFrame spdyHeadersFrame = new DefaultSpdyHeadersFrame(currentStreamId, validateHeaders);
spdyHeadersFrame.setLast(true);
Iterator<Entry<CharSequence, CharSequence>> itr = trailers.iteratorCharSequence();
while (itr.hasNext()) {
Map.Entry<CharSequence, CharSequence> entry = itr.next();
final CharSequence headerName =
headersToLowerCase ? AsciiString.of(entry.getKey()).toLowerCase() : entry.getKey();
spdyHeadersFrame.headers().add(headerName, entry.getValue());
}
// Write DATA frame and append HEADERS frame
out.add(spdyDataFrame);
Source
Frequently Asked Questions
What is the SpdyHttpEncoder class?
SpdyHttpEncoder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java.
Where is SpdyHttpEncoder defined?
SpdyHttpEncoder is defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java at line 123.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free