mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-11-22 20:59:19 +02:00
VLESS & VMess are not ready to accept FullCone yet
This commit is contained in:
parent
2da07e0f8a
commit
310a938511
|
@ -279,7 +279,9 @@ func (w *udpWorker) callback(b *buf.Buffer, source net.Destination, originalDest
|
||||||
src: source,
|
src: source,
|
||||||
}
|
}
|
||||||
if originalDest.IsValid() {
|
if originalDest.IsValid() {
|
||||||
//id.dest = originalDest
|
if !buf.Cone {
|
||||||
|
id.dest = originalDest
|
||||||
|
}
|
||||||
b.UDP = &originalDest
|
b.UDP = &originalDest
|
||||||
}
|
}
|
||||||
conn, existing := w.getConnection(id)
|
conn, existing := w.getConnection(id)
|
||||||
|
|
|
@ -14,6 +14,8 @@ const (
|
||||||
|
|
||||||
var pool = bytespool.GetPool(Size)
|
var pool = bytespool.GetPool(Size)
|
||||||
|
|
||||||
|
var Cone = true
|
||||||
|
|
||||||
// Buffer is a recyclable allocation of a byte array. Buffer.Release() recycles
|
// Buffer is a recyclable allocation of a byte array. Buffer.Release() recycles
|
||||||
// the buffer into an internal buffer pool, in order to recreate a buffer more
|
// the buffer into an internal buffer pool, in order to recreate a buffer more
|
||||||
// quickly.
|
// quickly.
|
||||||
|
|
24
main/run.go
24
main/run.go
|
@ -13,6 +13,10 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
|
||||||
|
"github.com/xtls/xray-core/app/proxyman"
|
||||||
|
"github.com/xtls/xray-core/common/buf"
|
||||||
"github.com/xtls/xray-core/common/cmdarg"
|
"github.com/xtls/xray-core/common/cmdarg"
|
||||||
"github.com/xtls/xray-core/common/platform"
|
"github.com/xtls/xray-core/common/platform"
|
||||||
"github.com/xtls/xray-core/core"
|
"github.com/xtls/xray-core/core"
|
||||||
|
@ -176,6 +180,26 @@ func startXray() (core.Server, error) {
|
||||||
return nil, newError("failed to load config files: [", configFiles.String(), "]").Base(err)
|
return nil, newError("failed to load config files: [", configFiles.String(), "]").Base(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v, t := false, false
|
||||||
|
for _, outbound := range config.Outbound {
|
||||||
|
s := strings.ToLower(outbound.ProxySettings.Type)
|
||||||
|
l := len(s)
|
||||||
|
if l >= 16 && s[11:16] == "vless" || l >= 16 && s[11:16] == "vmess" {
|
||||||
|
v = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if l >= 17 && s[11:17] == "trojan" || l >= 22 && s[11:22] == "shadowsocks" {
|
||||||
|
var m proxyman.SenderConfig
|
||||||
|
proto.Unmarshal(outbound.SenderSettings.Value, &m)
|
||||||
|
if m.MultiplexSettings == nil || !m.MultiplexSettings.Enabled {
|
||||||
|
t = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v && !t {
|
||||||
|
buf.Cone = false
|
||||||
|
}
|
||||||
|
|
||||||
server, err := core.New(config)
|
server, err := core.New(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, newError("failed to create server").Base(err)
|
return nil, newError("failed to create server").Base(err)
|
||||||
|
|
|
@ -103,7 +103,7 @@ func (s *Server) handlerUDPPayload(ctx context.Context, conn internet.Connection
|
||||||
}
|
}
|
||||||
inbound.User = s.user
|
inbound.User = s.user
|
||||||
|
|
||||||
var dest net.Destination
|
var dest *net.Destination
|
||||||
|
|
||||||
reader := buf.NewPacketReader(conn)
|
reader := buf.NewPacketReader(conn)
|
||||||
for {
|
for {
|
||||||
|
@ -144,12 +144,12 @@ func (s *Server) handlerUDPPayload(ctx context.Context, conn internet.Connection
|
||||||
|
|
||||||
data.UDP = &destination
|
data.UDP = &destination
|
||||||
|
|
||||||
if dest.Network == 0 {
|
if !buf.Cone || dest == nil {
|
||||||
dest = request.Destination() // JUST FOLLOW THE FIRST PACKET
|
dest = &destination
|
||||||
}
|
}
|
||||||
|
|
||||||
currentPacketCtx = protocol.ContextWithRequestHeader(currentPacketCtx, request)
|
currentPacketCtx = protocol.ContextWithRequestHeader(currentPacketCtx, request)
|
||||||
udpServer.Dispatch(currentPacketCtx, dest, data)
|
udpServer.Dispatch(currentPacketCtx, *dest, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -222,7 +222,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn internet.Connection,
|
||||||
newError("client UDP connection from ", inbound.Source).WriteToLog(session.ExportIDToError(ctx))
|
newError("client UDP connection from ", inbound.Source).WriteToLog(session.ExportIDToError(ctx))
|
||||||
}
|
}
|
||||||
|
|
||||||
var dest net.Destination
|
var dest *net.Destination
|
||||||
|
|
||||||
reader := buf.NewPacketReader(conn)
|
reader := buf.NewPacketReader(conn)
|
||||||
for {
|
for {
|
||||||
|
@ -260,12 +260,12 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn internet.Connection,
|
||||||
|
|
||||||
payload.UDP = &destination
|
payload.UDP = &destination
|
||||||
|
|
||||||
if dest.Network == 0 {
|
if !buf.Cone || dest == nil {
|
||||||
dest = destination // JUST FOLLOW THE FIRST PACKET
|
dest = &destination
|
||||||
}
|
}
|
||||||
|
|
||||||
currentPacketCtx = protocol.ContextWithRequestHeader(currentPacketCtx, request)
|
currentPacketCtx = protocol.ContextWithRequestHeader(currentPacketCtx, request)
|
||||||
udpServer.Dispatch(currentPacketCtx, dest, payload)
|
udpServer.Dispatch(currentPacketCtx, *dest, payload)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -256,7 +256,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, clientReader *PacketReade
|
||||||
inbound := session.InboundFromContext(ctx)
|
inbound := session.InboundFromContext(ctx)
|
||||||
user := inbound.User
|
user := inbound.User
|
||||||
|
|
||||||
var dest net.Destination
|
var dest *net.Destination
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
@ -280,12 +280,12 @@ func (s *Server) handleUDPPayload(ctx context.Context, clientReader *PacketReade
|
||||||
})
|
})
|
||||||
newError("tunnelling request to ", p.Target).WriteToLog(session.ExportIDToError(ctx))
|
newError("tunnelling request to ", p.Target).WriteToLog(session.ExportIDToError(ctx))
|
||||||
|
|
||||||
if dest.Network == 0 {
|
if !buf.Cone || dest == nil {
|
||||||
dest = p.Target // JUST FOLLOW THE FIRST PACKET
|
dest = &p.Target
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, b := range p.Buffer {
|
for _, b := range p.Buffer {
|
||||||
udpServer.Dispatch(ctx, dest, b)
|
udpServer.Dispatch(ctx, *dest, b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue