12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package quic
- import (
- "io"
- "net/http"
- "github.com/sagernet/quic-go"
- "github.com/sagernet/quic-go/http3"
- "github.com/sagernet/sing-box/common/listener"
- "github.com/sagernet/sing-box/common/tls"
- "github.com/sagernet/sing-box/protocol/naive"
- "github.com/sagernet/sing-quic"
- E "github.com/sagernet/sing/common/exceptions"
- "github.com/sagernet/sing/common/logger"
- )
- func init() {
- naive.ConfigureHTTP3ListenerFunc = func(listener *listener.Listener, handler http.Handler, tlsConfig tls.ServerConfig, logger logger.Logger) (io.Closer, error) {
- err := qtls.ConfigureHTTP3(tlsConfig)
- if err != nil {
- return nil, err
- }
- udpConn, err := listener.ListenUDP()
- if err != nil {
- return nil, err
- }
- quicListener, err := qtls.ListenEarly(udpConn, tlsConfig, &quic.Config{
- MaxIncomingStreams: 1 << 60,
- Allow0RTT: true,
- })
- if err != nil {
- udpConn.Close()
- return nil, err
- }
- h3Server := &http3.Server{
- Handler: handler,
- }
- go func() {
- sErr := h3Server.ServeListener(quicListener)
- udpConn.Close()
- if sErr != nil && !E.IsClosedOrCanceled(sErr) {
- logger.Error("http3 server closed: ", sErr)
- }
- }()
- return quicListener, nil
- }
- }
|