(ctx context.Context, c net.Conn, metadata *C.Metadata)
| 230 | } |
| 231 | |
| 232 | func (v *Vless) streamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (conn net.Conn, err error) { |
| 233 | if ctx.Done() != nil { |
| 234 | done := N.SetupContextForConn(ctx, c) |
| 235 | defer done(&err) |
| 236 | } |
| 237 | if v.encryption != nil { |
| 238 | c, err = v.encryption.Handshake(c) |
| 239 | if err != nil { |
| 240 | return |
| 241 | } |
| 242 | } |
| 243 | if metadata.NetWork == C.UDP { |
| 244 | if v.option.PacketAddr { |
| 245 | metadata = &C.Metadata{ |
| 246 | NetWork: C.UDP, |
| 247 | Host: packetaddr.SeqPacketMagicAddress, |
| 248 | DstPort: 443, |
| 249 | } |
| 250 | } else { |
| 251 | metadata = &C.Metadata{ // a clear metadata only contains ip |
| 252 | NetWork: C.UDP, |
| 253 | DstIP: metadata.DstIP, |
| 254 | DstPort: metadata.DstPort, |
| 255 | } |
| 256 | } |
| 257 | conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, v.option.XUDP)) |
| 258 | } else { |
| 259 | conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, false)) |
| 260 | } |
| 261 | if err != nil { |
| 262 | conn = nil |
| 263 | } |
| 264 | return |
| 265 | } |
| 266 | |
| 267 | func (v *Vless) streamTLSConn(ctx context.Context, conn net.Conn, isH2 bool) (net.Conn, error) { |
| 268 | if v.option.TLS { |
no test coverage detected