@@ -138,7 +138,6 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte
138
138
if ! allowUDP443 && request .Port == 443 {
139
139
return newError ("XTLS rejected UDP/443 traffic" ).AtInfo ()
140
140
}
141
- requestAddons .Flow = ""
142
141
case protocol .RequestCommandMux :
143
142
fallthrough // let server break Mux connections that contain TCP requests
144
143
case protocol .RequestCommandTCP :
@@ -185,7 +184,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte
185
184
clientReader := link .Reader // .(*pipe.Reader)
186
185
clientWriter := link .Writer // .(*pipe.Writer)
187
186
trafficState := proxy .NewTrafficState (account .ID .Bytes ())
188
- if request .Command == protocol .RequestCommandUDP && h .cone && request .Port != 53 && request .Port != 443 {
187
+ if request .Command == protocol .RequestCommandUDP && ( requestAddons . Flow == vless . XRV || ( h .cone && request .Port != 53 && request .Port != 443 )) {
189
188
request .Command = protocol .RequestCommandMux
190
189
request .Address = net .DomainAddress ("v1.mux.cool" )
191
190
request .Port = net .Port (666 )
@@ -266,8 +265,15 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte
266
265
267
266
// default: serverReader := buf.NewReader(conn)
268
267
serverReader := encoding .DecodeBodyAddons (conn , request , responseAddons )
268
+ if requestAddons .Flow == vless .XRV {
269
+ serverReader = proxy .NewVisionReader (serverReader , trafficState , ctx )
270
+ }
269
271
if request .Command == protocol .RequestCommandMux && request .Port == 666 {
270
- serverReader = xudp .NewPacketReader (conn )
272
+ if requestAddons .Flow == vless .XRV {
273
+ serverReader = xudp .NewPacketReader (& buf.BufferedReader {Reader : serverReader })
274
+ } else {
275
+ serverReader = xudp .NewPacketReader (conn )
276
+ }
271
277
}
272
278
273
279
if requestAddons .Flow == vless .XRV {
0 commit comments