From e9967e990a6464c1cfdaa5c9f9f2788aea1600eb Mon Sep 17 00:00:00 2001 From: Lucas Clemente Date: Mon, 18 Apr 2016 14:09:29 +0200 Subject: [PATCH] use streams in example server --- example/main.go | 27 +++++++++++---------------- session.go | 7 ++----- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/example/main.go b/example/main.go index e940e8a65..ac9d5f56d 100644 --- a/example/main.go +++ b/example/main.go @@ -9,7 +9,6 @@ import ( "golang.org/x/net/http2/hpack" "github.com/lucas-clemente/quic-go" - "github.com/lucas-clemente/quic-go/frames" "github.com/lucas-clemente/quic-go/protocol" ) @@ -32,13 +31,13 @@ func main() { } } -func handleStream(session *quic.Session, stream *quic.Stream) []frames.Frame { - var reply bytes.Buffer - h2framer := http2.NewFramer(&reply, stream) +func handleStream(session *quic.Session, stream *quic.Stream) { + h2framer := http2.NewFramer(stream, stream) h2framer.ReadMetaHeaders = hpack.NewDecoder(1024, nil) h2frame, err := h2framer.ReadFrame() if err != nil { - return nil + fmt.Printf("invalid http2 frame: %s", err.Error()) + return } h2headersFrame := h2frame.(*http2.MetaHeadersFrame) fmt.Printf("Request: %s %s://%s%s\n", h2headersFrame.PseudoValue("method"), h2headersFrame.PseudoValue("scheme"), h2headersFrame.PseudoValue("authority"), h2headersFrame.PseudoValue("path")) @@ -53,17 +52,13 @@ func handleStream(session *quic.Session, stream *quic.Stream) []frames.Frame { EndHeaders: true, BlockFragment: replyHeaders.Bytes(), }) - headerStreamFrame := &frames.StreamFrame{ - StreamID: stream.StreamID, - Data: reply.Bytes(), - FinBit: true, + + dataStream, err := session.NewStream(protocol.StreamID(h2frame.Header().StreamID)) + if err != nil { + fmt.Printf("error creating stream: %s", err.Error()) + return } - dataStreamFrame := &frames.StreamFrame{ - StreamID: protocol.StreamID(h2frame.Header().StreamID), - Data: []byte("Hello World!"), - FinBit: true, - } - - return []frames.Frame{headerStreamFrame, dataStreamFrame} + dataStream.Write([]byte("Hello World!")) + dataStream.Close() } diff --git a/session.go b/session.go index 1f60b2fb2..8d2698b01 100644 --- a/session.go +++ b/session.go @@ -13,7 +13,7 @@ import ( ) // StreamCallback gets a stream frame and returns a reply frame -type StreamCallback func(*Session, *Stream) []frames.Frame +type StreamCallback func(*Session, *Stream) // A Session is a QUIC session type Session struct { @@ -154,10 +154,7 @@ func (s *Session) handleStreamFrame(r *bytes.Reader) error { } if !newStream { - replyFrames := s.streamCallback(s, stream) - if replyFrames != nil { - s.SendFrames(replyFrames) - } + s.streamCallback(s, stream) } return nil }