forked from quic-go/quic-go
send a body in the example server
This commit is contained in:
@@ -90,7 +90,7 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
func handleStream(frame *quic.StreamFrame) *quic.StreamFrame {
|
||||
func handleStream(frame *quic.StreamFrame) []quic.Frame {
|
||||
h2r := bytes.NewReader(frame.Data)
|
||||
var reply bytes.Buffer
|
||||
h2framer := http2.NewFramer(&reply, h2r)
|
||||
@@ -104,15 +104,26 @@ func handleStream(frame *quic.StreamFrame) *quic.StreamFrame {
|
||||
|
||||
var replyHeaders bytes.Buffer
|
||||
enc := hpack.NewEncoder(&replyHeaders)
|
||||
enc.WriteField(hpack.HeaderField{Name: ":status", Value: "204"})
|
||||
enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"})
|
||||
enc.WriteField(hpack.HeaderField{Name: "content-type", Value: "text/plain"})
|
||||
enc.WriteField(hpack.HeaderField{Name: "content-length", Value: "12"})
|
||||
h2framer.WriteHeaders(http2.HeadersFrameParam{
|
||||
StreamID: h2frame.Header().StreamID,
|
||||
EndHeaders: true,
|
||||
BlockFragment: replyHeaders.Bytes(),
|
||||
})
|
||||
|
||||
return &quic.StreamFrame{
|
||||
headerStreamFrame := &quic.StreamFrame{
|
||||
StreamID: frame.StreamID,
|
||||
Data: reply.Bytes(),
|
||||
FinBit: true,
|
||||
}
|
||||
|
||||
dataStreamFrame := &quic.StreamFrame{
|
||||
StreamID: h2frame.Header().StreamID,
|
||||
Data: []byte("Hello World!"),
|
||||
FinBit: true,
|
||||
}
|
||||
fmt.Printf("%#v\n", dataStreamFrame)
|
||||
|
||||
return []quic.Frame{headerStreamFrame, dataStreamFrame}
|
||||
}
|
||||
|
||||
10
session.go
10
session.go
@@ -12,7 +12,7 @@ import (
|
||||
)
|
||||
|
||||
// StreamCallback gets a stream frame and returns a reply frame
|
||||
type StreamCallback func(*StreamFrame) *StreamFrame
|
||||
type StreamCallback func(*StreamFrame) []Frame
|
||||
|
||||
// A Session is a QUIC session
|
||||
type Session struct {
|
||||
@@ -88,12 +88,8 @@ func (s *Session) HandlePacket(addr *net.UDPAddr, publicHeaderBinary []byte, pub
|
||||
if frame.StreamID == 1 {
|
||||
s.HandleCryptoHandshake(frame)
|
||||
} else {
|
||||
replyFrame := s.streamCallback(frame)
|
||||
replyFrames := []Frame{&AckFrame{Entropy: s.Entropy.Get(), LargestObserved: 3}}
|
||||
if replyFrame != nil {
|
||||
replyFrames = append(replyFrames, replyFrame)
|
||||
}
|
||||
s.SendFrames(replyFrames)
|
||||
replyFrames := s.streamCallback(frame)
|
||||
s.SendFrames(append([]Frame{&AckFrame{Entropy: s.Entropy.Get(), LargestObserved: 3}}, replyFrames...))
|
||||
}
|
||||
continue
|
||||
} else if typeByte&0xC0 == 0x40 { // ACK
|
||||
|
||||
Reference in New Issue
Block a user