SpdySession Class — netty Architecture
Architecture documentation for the SpdySession class in SpdySession.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD d4117dfa_49b0_1937_8865_6887ed2ababf["SpdySession"] 957efa9e_42dd_908d_9fe3_af64cf28b05f["SpdySession.java"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|defined in| 957efa9e_42dd_908d_9fe3_af64cf28b05f 00dd5be9_245f_4174_d814_bedf72a770be["SpdySession()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| 00dd5be9_245f_4174_d814_bedf72a770be 6adcea86_548c_cdb6_418c_5e0741efc94d["numActiveStreams()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| 6adcea86_548c_cdb6_418c_5e0741efc94d c3d8960a_ab43_11cc_232a_5c21584397b5["noActiveStreams()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| c3d8960a_ab43_11cc_232a_5c21584397b5 17c08cd9_7916_2dff_f7f1_cbad379aca6d["isActiveStream()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| 17c08cd9_7916_2dff_f7f1_cbad379aca6d bbdee975_a1f9_f99f_2ec4_5424a54aef39["activeStreams()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| bbdee975_a1f9_f99f_2ec4_5424a54aef39 1e0c440c_4db6_c649_af40_45384c42fcc7["acceptStream()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| 1e0c440c_4db6_c649_af40_45384c42fcc7 787e8fc7_0d56_7863_92c2_4b57291a602f["StreamState()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| 787e8fc7_0d56_7863_92c2_4b57291a602f 48a1dc18_fe14_9d35_318c_77ebe0be3e98["removeStream()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| 48a1dc18_fe14_9d35_318c_77ebe0be3e98 46adc4b5_45f2_5b94_2393_53448e1e12f7["isRemoteSideClosed()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| 46adc4b5_45f2_5b94_2393_53448e1e12f7 c02b0e1f_b6a2_5954_6806_a027ee40ea9e["closeRemoteSide()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| c02b0e1f_b6a2_5954_6806_a027ee40ea9e ea221c48_2ea4_13ee_0fcd_5829388d5679["isLocalSideClosed()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| ea221c48_2ea4_13ee_0fcd_5829388d5679 a3c1a8c2_f572_0cbb_4543_8bf2ea61ddc4["closeLocalSide()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| a3c1a8c2_f572_0cbb_4543_8bf2ea61ddc4 f673ba6f_6c03_c1f2_0697_c6736d66a06e["hasReceivedReply()"] d4117dfa_49b0_1937_8865_6887ed2ababf -->|method| f673ba6f_6c03_c1f2_0697_c6736d66a06e
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/spdy/SpdySession.java lines 30–357
final class SpdySession {
private final AtomicInteger activeLocalStreams = new AtomicInteger();
private final AtomicInteger activeRemoteStreams = new AtomicInteger();
private final Map<Integer, StreamState> activeStreams = new ConcurrentHashMap<>();
private final StreamComparator streamComparator = new StreamComparator();
private final AtomicInteger sendWindowSize;
private final AtomicInteger receiveWindowSize;
SpdySession(int sendWindowSize, int receiveWindowSize) {
this.sendWindowSize = new AtomicInteger(sendWindowSize);
this.receiveWindowSize = new AtomicInteger(receiveWindowSize);
}
int numActiveStreams(boolean remote) {
if (remote) {
return activeRemoteStreams.get();
} else {
return activeLocalStreams.get();
}
}
boolean noActiveStreams() {
return activeStreams.isEmpty();
}
boolean isActiveStream(int streamId) {
return activeStreams.containsKey(streamId);
}
// Stream-IDs should be iterated in priority order
Map<Integer, StreamState> activeStreams() {
Map<Integer, StreamState> streams = new TreeMap<Integer, StreamState>(streamComparator);
streams.putAll(activeStreams);
return streams;
}
void acceptStream(
int streamId, byte priority, boolean remoteSideClosed, boolean localSideClosed,
int sendWindowSize, int receiveWindowSize, boolean remote) {
if (!remoteSideClosed || !localSideClosed) {
StreamState state = activeStreams.put(streamId, new StreamState(
priority, remoteSideClosed, localSideClosed, sendWindowSize, receiveWindowSize));
if (state == null) {
if (remote) {
activeRemoteStreams.incrementAndGet();
} else {
activeLocalStreams.incrementAndGet();
}
}
}
}
private StreamState removeActiveStream(int streamId, boolean remote) {
StreamState state = activeStreams.remove(streamId);
if (state != null) {
if (remote) {
activeRemoteStreams.decrementAndGet();
} else {
activeLocalStreams.decrementAndGet();
}
}
return state;
}
void removeStream(int streamId, Throwable cause, boolean remote) {
StreamState state = removeActiveStream(streamId, remote);
if (state != null) {
state.clearPendingWrites(cause);
}
}
boolean isRemoteSideClosed(int streamId) {
StreamState state = activeStreams.get(streamId);
return state == null || state.isRemoteSideClosed();
}
void closeRemoteSide(int streamId, boolean remote) {
StreamState state = activeStreams.get(streamId);
if (state != null) {
state.closeRemoteSide();
Source
Frequently Asked Questions
What is the SpdySession class?
SpdySession is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdySession.java.
Where is SpdySession defined?
SpdySession is defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdySession.java at line 30.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free