diff --git a/internal/multiplex/frame.go b/internal/multiplex/frame.go index ee47b4a..776efc5 100644 --- a/internal/multiplex/frame.go +++ b/internal/multiplex/frame.go @@ -1,5 +1,11 @@ package multiplex +const ( + C_NOOP = iota + C_STREAM + C_SESSION +) + type Frame struct { StreamID uint32 Seq uint64 diff --git a/internal/multiplex/session.go b/internal/multiplex/session.go index 55a24b1..1f4c569 100644 --- a/internal/multiplex/session.go +++ b/internal/multiplex/session.go @@ -144,7 +144,7 @@ func (sesh *Session) closeStream(s *Stream, active bool) error { f := &Frame{ StreamID: s.id, Seq: atomic.AddUint64(&s.nextSendSeq, 1) - 1, - Closing: 1, + Closing: C_STREAM, Payload: pad, } i, err := s.session.Obfs(f, s.obfsBuf) @@ -185,10 +185,10 @@ func (sesh *Session) recvDataFromRemote(data []byte) error { stream := streamI.(*Stream) return stream.writeFrame(*frame) } else { - if frame.Closing == 1 { + if frame.Closing == C_STREAM { // If the stream has been closed and the current frame is a closing frame, we do noop return nil - } else if frame.Closing == 2 { + } else if frame.Closing == C_SESSION { // Closing session sesh.SetTerminalMsg("Received a closing notification frame") return sesh.passiveClose() @@ -268,7 +268,7 @@ func (sesh *Session) Close() error { f := &Frame{ StreamID: 0xffffffff, Seq: 0, - Closing: 2, + Closing: C_SESSION, Payload: pad, } obfsBuf := make([]byte, len(pad)+64)