Home / Class/ SpdySession Class — netty Architecture

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();

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