mirror of https://github.com/v2ray/v2ray-core
				
				
				
			add server side h2c support
							parent
							
								
									3deb5f26c9
								
							
						
					
					
						commit
						e6bf431f93
					
				| 
						 | 
				
			
			@ -16,6 +16,9 @@ import (
 | 
			
		|||
	"v2ray.com/core/common/signal/done"
 | 
			
		||||
	"v2ray.com/core/transport/internet"
 | 
			
		||||
	"v2ray.com/core/transport/internet/tls"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/net/http2"
 | 
			
		||||
	"golang.org/x/net/http2/h2c"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Listener struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -102,16 +105,23 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti
 | 
			
		|||
		config: *httpSettings,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var server *http.Server
 | 
			
		||||
	config := tls.ConfigFromStreamSettings(streamSettings)
 | 
			
		||||
	if config == nil {
 | 
			
		||||
		return nil, newError("TLS must be enabled for http transport.").AtWarning()
 | 
			
		||||
	}
 | 
			
		||||
		h2s := &http2.Server{}
 | 
			
		||||
 | 
			
		||||
	server := &http.Server{
 | 
			
		||||
		Addr:              serial.Concat(address, ":", port),
 | 
			
		||||
		TLSConfig:         config.GetTLSConfig(tls.WithNextProto("h2")),
 | 
			
		||||
		Handler:           listener,
 | 
			
		||||
		ReadHeaderTimeout: time.Second * 4,
 | 
			
		||||
		server = &http.Server{
 | 
			
		||||
			Addr:              serial.Concat(address, ":", port),
 | 
			
		||||
			Handler:           h2c.NewHandler(listener, h2s),
 | 
			
		||||
			ReadHeaderTimeout: time.Second * 4,
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		server = &http.Server{
 | 
			
		||||
			Addr:              serial.Concat(address, ":", port),
 | 
			
		||||
			TLSConfig:         config.GetTLSConfig(tls.WithNextProto("h2")),
 | 
			
		||||
			Handler:           listener,
 | 
			
		||||
			ReadHeaderTimeout: time.Second * 4,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	listener.server = server
 | 
			
		||||
| 
						 | 
				
			
			@ -124,10 +134,16 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti
 | 
			
		|||
			newError("failed to listen on", address, ":", port).Base(err).WriteToLog(session.ExportIDToError(ctx))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = server.ServeTLS(tcpListener, "", "")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			newError("stoping serving TLS").Base(err).WriteToLog(session.ExportIDToError(ctx))
 | 
			
		||||
		if config == nil {
 | 
			
		||||
			err = server.Serve(tcpListener)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				newError("stoping serving H2C").Base(err).WriteToLog(session.ExportIDToError(ctx))
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			err = server.ServeTLS(tcpListener, "", "")
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				newError("stoping serving TLS").Base(err).WriteToLog(session.ExportIDToError(ctx))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue