mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-12-22 19:33:32 +02:00
#2605: Add safety check for type casting for QUIC dialer
Issue #2605 brought up real problem that QUIC dialer doesn't support sockopt at the moment. Inside `internet.DialSystem(...)` function, one of the branch that involves `redirect(...)` returns `cnc.connection` instance that is currently unhandled by the code logic, and thus caused program panic during runtime. It seems the sockopt support for QUIC protocol requires a couple changes including making `cnc.connection` public, such that we can handle in dialer, along with some thorough tests, this commit simply adds safety check to explicity state the fact that QUIC isn't working with sockopt. And the implementation of the feature can be scheduled later on.
This commit is contained in:
parent
ac52a226d1
commit
f1c81557dc
1 changed files with 12 additions and 3 deletions
|
@ -146,10 +146,19 @@ func (s *clientConnections) openConnection(ctx context.Context, destAddr net.Add
|
|||
return qlog.NewConnectionTracer(&QlogWriter{connID: ci}, p, ci)
|
||||
},
|
||||
}
|
||||
udpConn, _ := rawConn.(*net.UDPConn)
|
||||
if udpConn == nil {
|
||||
udpConn = rawConn.(*internet.PacketConnWrapper).Conn.(*net.UDPConn)
|
||||
|
||||
var udpConn *net.UDPConn
|
||||
switch conn := rawConn.(type) {
|
||||
case *net.UDPConn:
|
||||
udpConn = conn
|
||||
case *internet.PacketConnWrapper:
|
||||
udpConn = conn.Conn.(*net.UDPConn)
|
||||
default:
|
||||
// TODO: Support sockopt for QUIC
|
||||
rawConn.Close()
|
||||
return nil, newError("QUIC with sockopt is unsupported").AtWarning()
|
||||
}
|
||||
|
||||
sysConn, err := wrapSysConn(udpConn, config)
|
||||
if err != nil {
|
||||
rawConn.Close()
|
||||
|
|
Loading…
Reference in a new issue