mirror of
https://github.com/refraction-networking/uquic.git
synced 2025-04-07 06:07:36 +03:00
send a body in the example server
This commit is contained in:
parent
3c16e8c9ee
commit
052822aea5
2 changed files with 18 additions and 11 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue