diff --git a/README.md b/README.md index 8dd72c8..3a4989c 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,41 @@ simple multiplexing # goals -1. window size controls all the streams in total. +1. receive window is shared among the streams. 2. precise flow control. 3. precise memory control. 4. maximized payload. 5. optimized for high-speed streams. +``` +FRAMETYPE=Data, OPTIONS=(flagSYN, flagACK, flagFIN, flagRST) ++---------------+--------------+------------+--------------+--------------------------------+ +| | | | | | +| FRAMETYPE(1B) | OPTIONS(1B) | LENGTH(2B) | STREAMID(4B) | DATA(MAX 64K) | +| | | | | | ++---------------+--------------+------------+--------------+--------------------------------+ + +FRAMETYPE=WindowUpdate ++---------------+--------------+------------+ +| | | +| FRAMETYPE(1B) | WINDOWSIZE(4B) | +| | | ++---------------+--------------+------------+ + +FRAMETYPE=Ping, OPTIONS=(flagSYN, flagACK) ++---------------+--------------+------------+------------+ +| | | | +| FRAMETYPE(1B) | OPTIONS(1B) | PINGID(4B) | +| | | | ++---------------+--------------+------------+------------+ + +FRAMETYPE=GoAway ++---------------+---------------+ +| | | +| FRAMETYPE(1B) | ERROR(2B) | +| | | ++---------------+---------------+ +``` + # status in-progress diff --git a/header.go b/header.go new file mode 100644 index 0000000..4fae8ba --- /dev/null +++ b/header.go @@ -0,0 +1,15 @@ +package smux + +const ( // frame types + frameData uint8 = iota + frameWindowUpdate + framePing + frameGoAway +) + +const ( // options + flagSYN uint16 = 1 << iota + flagACK + flagFIN + flagRST +)