forked from quic-go/quic-go
interop: simplify API of http09.Server (#4651)
Removes the ListenAndServe method in favor of a ServeListener method.
This commit is contained in:
@@ -5,17 +5,15 @@ import (
|
||||
"errors"
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"runtime"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/quic-go/quic-go"
|
||||
)
|
||||
|
||||
const h09alpn = "hq-interop"
|
||||
const NextProto = "hq-interop"
|
||||
|
||||
type responseWriter struct {
|
||||
io.Writer
|
||||
@@ -36,51 +34,14 @@ func (w *responseWriter) WriteHeader(int) {}
|
||||
// Server is a HTTP/0.9 server listening for QUIC connections.
|
||||
type Server struct {
|
||||
*http.Server
|
||||
|
||||
ForceRetry bool
|
||||
QuicConfig *quic.Config
|
||||
|
||||
mutex sync.Mutex
|
||||
listener *quic.EarlyListener
|
||||
}
|
||||
|
||||
// Close closes the server.
|
||||
func (s *Server) Close() error {
|
||||
s.mutex.Lock()
|
||||
defer s.mutex.Unlock()
|
||||
|
||||
return s.listener.Close()
|
||||
}
|
||||
|
||||
// ListenAndServe listens and serves HTTP/0.9 over QUIC.
|
||||
func (s *Server) ListenAndServe() error {
|
||||
func (s *Server) ServeListener(ln *quic.EarlyListener) error {
|
||||
if s.Server == nil {
|
||||
return errors.New("use of http3.Server without http.Server")
|
||||
}
|
||||
|
||||
udpAddr, err := net.ResolveUDPAddr("udp", s.Addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
conn, err := net.ListenUDP("udp", udpAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tlsConf := s.TLSConfig.Clone()
|
||||
tlsConf.NextProtos = []string{h09alpn}
|
||||
tr := quic.Transport{Conn: conn}
|
||||
if s.ForceRetry {
|
||||
tr.VerifySourceAddress = func(net.Addr) bool { return true }
|
||||
}
|
||||
ln, err := tr.ListenEarly(tlsConf, s.QuicConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.mutex.Lock()
|
||||
s.listener = ln
|
||||
s.mutex.Unlock()
|
||||
|
||||
for {
|
||||
conn, err := ln.Accept(context.Background())
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user