@@ -72,7 +72,7 @@ func New(config LC.TrojanServer, tunnel C.Tunnel, additions ...inbound.Addition)
7272
7373 tlsConfig := & tlsC.Config {}
7474 var realityBuilder * reality.Builder
75- var httpHandler http.Handler
75+ var httpServer http.Server
7676
7777 if config .Certificate != "" && config .PrivateKey != "" {
7878 cert , err := ca .LoadTLSKeyPair (config .Certificate , config .PrivateKey , C .Path )
@@ -107,16 +107,16 @@ func New(config LC.TrojanServer, tunnel C.Tunnel, additions ...inbound.Addition)
107107 }
108108 sl .HandleConn (conn , tunnel , additions ... )
109109 })
110- httpHandler = httpMux
110+ httpServer . Handler = httpMux
111111 tlsConfig .NextProtos = append (tlsConfig .NextProtos , "http/1.1" )
112112 }
113113 if config .GrpcServiceName != "" {
114- httpHandler = gun .NewServerHandler (gun.ServerOption {
114+ httpServer . Handler = gun .NewServerHandler (gun.ServerOption {
115115 ServiceName : config .GrpcServiceName ,
116116 ConnHandler : func (conn net.Conn ) {
117117 sl .HandleConn (conn , tunnel , additions ... )
118118 },
119- HttpHandler : httpHandler ,
119+ HttpHandler : httpServer . Handler ,
120120 })
121121 tlsConfig .NextProtos = append ([]string {"h2" }, tlsConfig .NextProtos ... ) // h2 must before http/1.1
122122 }
@@ -132,15 +132,19 @@ func New(config LC.TrojanServer, tunnel C.Tunnel, additions ...inbound.Addition)
132132 if realityBuilder != nil {
133133 l = realityBuilder .NewListener (l )
134134 } else if len (tlsConfig .Certificates ) > 0 {
135- l = tlsC .NewListener (l , tlsConfig )
135+ if httpServer .Handler != nil {
136+ l = tlsC .NewListenerForHttps (l , & httpServer , tlsConfig )
137+ } else {
138+ l = tlsC .NewListener (l , tlsConfig )
139+ }
136140 } else if ! config .TrojanSSOption .Enabled {
137141 return nil , errors .New ("disallow using Trojan without both certificates/reality/ss config" )
138142 }
139143 sl .listeners = append (sl .listeners , l )
140144
141145 go func () {
142- if httpHandler != nil {
143- _ = http .Serve (l , httpHandler )
146+ if httpServer . Handler != nil {
147+ _ = httpServer .Serve (l )
144148 return
145149 }
146150 for {
0 commit comments