@@ -72,7 +72,7 @@ func New(config LC.TrojanServer, tunnel C.Tunnel, additions ...inbound.Addition)
72
72
73
73
tlsConfig := & tlsC.Config {}
74
74
var realityBuilder * reality.Builder
75
- var httpHandler http.Handler
75
+ var httpServer http.Server
76
76
77
77
if config .Certificate != "" && config .PrivateKey != "" {
78
78
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)
107
107
}
108
108
sl .HandleConn (conn , tunnel , additions ... )
109
109
})
110
- httpHandler = httpMux
110
+ httpServer . Handler = httpMux
111
111
tlsConfig .NextProtos = append (tlsConfig .NextProtos , "http/1.1" )
112
112
}
113
113
if config .GrpcServiceName != "" {
114
- httpHandler = gun .NewServerHandler (gun.ServerOption {
114
+ httpServer . Handler = gun .NewServerHandler (gun.ServerOption {
115
115
ServiceName : config .GrpcServiceName ,
116
116
ConnHandler : func (conn net.Conn ) {
117
117
sl .HandleConn (conn , tunnel , additions ... )
118
118
},
119
- HttpHandler : httpHandler ,
119
+ HttpHandler : httpServer . Handler ,
120
120
})
121
121
tlsConfig .NextProtos = append ([]string {"h2" }, tlsConfig .NextProtos ... ) // h2 must before http/1.1
122
122
}
@@ -132,15 +132,19 @@ func New(config LC.TrojanServer, tunnel C.Tunnel, additions ...inbound.Addition)
132
132
if realityBuilder != nil {
133
133
l = realityBuilder .NewListener (l )
134
134
} 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
+ }
136
140
} else if ! config .TrojanSSOption .Enabled {
137
141
return nil , errors .New ("disallow using Trojan without both certificates/reality/ss config" )
138
142
}
139
143
sl .listeners = append (sl .listeners , l )
140
144
141
145
go func () {
142
- if httpHandler != nil {
143
- _ = http .Serve (l , httpHandler )
146
+ if httpServer . Handler != nil {
147
+ _ = httpServer .Serve (l )
144
148
return
145
149
}
146
150
for {
0 commit comments