mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-12-16 20:27:04 +03:00
Some checks failed
Scheduled assets update / geodat (push) Has been cancelled
Build and Release for Windows 7 / check-assets (push) Has been cancelled
Build and Release / check-assets (push) Has been cancelled
Test / check-assets (push) Has been cancelled
Build and Release for Windows 7 / build (win7-32, 386, windows) (push) Has been cancelled
Build and Release for Windows 7 / build (win7-64, amd64, windows) (push) Has been cancelled
Build and Release / build (386, freebsd, ) (push) Has been cancelled
Build and Release / build (386, linux, ) (push) Has been cancelled
Build and Release / build (386, openbsd, ) (push) Has been cancelled
Build and Release / build (386, windows, ) (push) Has been cancelled
Build and Release / build (amd64, android, android-amd64) (push) Has been cancelled
Build and Release / build (amd64, darwin, ) (push) Has been cancelled
Build and Release / build (amd64, freebsd, ) (push) Has been cancelled
Build and Release / build (amd64, linux, ) (push) Has been cancelled
Build and Release / build (amd64, openbsd, ) (push) Has been cancelled
Build and Release / build (amd64, windows, ) (push) Has been cancelled
Build and Release / build (arm, 5, linux) (push) Has been cancelled
Build and Release / build (arm, 6, linux) (push) Has been cancelled
Build and Release / build (arm, 7, freebsd) (push) Has been cancelled
Build and Release / build (arm, 7, linux) (push) Has been cancelled
Build and Release / build (arm, 7, openbsd) (push) Has been cancelled
Build and Release / build (arm, 7, windows) (push) Has been cancelled
Build and Release / build (arm64, android) (push) Has been cancelled
Build and Release / build (arm64, darwin) (push) Has been cancelled
Build and Release / build (arm64, freebsd) (push) Has been cancelled
Build and Release / build (arm64, linux) (push) Has been cancelled
Build and Release / build (arm64, openbsd) (push) Has been cancelled
Build and Release / build (arm64, windows) (push) Has been cancelled
Build and Release / build (loong64, linux) (push) Has been cancelled
Build and Release / build (mips, linux) (push) Has been cancelled
Build and Release / build (mips64, linux) (push) Has been cancelled
Build and Release / build (mips64le, linux) (push) Has been cancelled
Build and Release / build (mipsle, linux) (push) Has been cancelled
Build and Release / build (ppc64, linux) (push) Has been cancelled
Build and Release / build (ppc64le, linux) (push) Has been cancelled
Build and Release / build (riscv64, linux) (push) Has been cancelled
Build and Release / build (s390x, linux) (push) Has been cancelled
Test / test (macos-latest) (push) Has been cancelled
Test / test (ubuntu-latest) (push) Has been cancelled
Test / test (windows-latest) (push) Has been cancelled
https://github.com/XTLS/Xray-core/pull/5124#issuecomment-3281091009 Fixes https://github.com/XTLS/Xray-core/pull/5124#pullrequestreview-3218097421
96 lines
2.3 KiB
Go
96 lines
2.3 KiB
Go
package protocol
|
|
|
|
import (
|
|
"runtime"
|
|
|
|
"github.com/xtls/xray-core/common/bitmask"
|
|
"github.com/xtls/xray-core/common/net"
|
|
"golang.org/x/sys/cpu"
|
|
)
|
|
|
|
// RequestCommand is a custom command in a proxy request.
|
|
type RequestCommand byte
|
|
|
|
const (
|
|
RequestCommandTCP = RequestCommand(0x01)
|
|
RequestCommandUDP = RequestCommand(0x02)
|
|
RequestCommandMux = RequestCommand(0x03)
|
|
RequestCommandRvs = RequestCommand(0x04)
|
|
)
|
|
|
|
func (c RequestCommand) TransferType() TransferType {
|
|
switch c {
|
|
case RequestCommandTCP, RequestCommandMux, RequestCommandRvs:
|
|
return TransferTypeStream
|
|
case RequestCommandUDP:
|
|
return TransferTypePacket
|
|
default:
|
|
return TransferTypeStream
|
|
}
|
|
}
|
|
|
|
const (
|
|
// [DEPRECATED 2023-06] RequestOptionChunkStream indicates request payload is chunked. Each chunk consists of length, authentication and payload.
|
|
RequestOptionChunkStream bitmask.Byte = 0x01
|
|
|
|
// 0x02 legacy setting
|
|
|
|
RequestOptionChunkMasking bitmask.Byte = 0x04
|
|
|
|
RequestOptionGlobalPadding bitmask.Byte = 0x08
|
|
|
|
RequestOptionAuthenticatedLength bitmask.Byte = 0x10
|
|
)
|
|
|
|
type RequestHeader struct {
|
|
Version byte
|
|
Command RequestCommand
|
|
Option bitmask.Byte
|
|
Security SecurityType
|
|
Port net.Port
|
|
Address net.Address
|
|
User *MemoryUser
|
|
}
|
|
|
|
func (h *RequestHeader) Destination() net.Destination {
|
|
if h.Command == RequestCommandUDP {
|
|
return net.UDPDestination(h.Address, h.Port)
|
|
}
|
|
return net.TCPDestination(h.Address, h.Port)
|
|
}
|
|
|
|
const (
|
|
ResponseOptionConnectionReuse bitmask.Byte = 0x01
|
|
)
|
|
|
|
type ResponseCommand interface{}
|
|
|
|
type ResponseHeader struct {
|
|
Option bitmask.Byte
|
|
Command ResponseCommand
|
|
}
|
|
|
|
var (
|
|
// Keep in sync with crypto/tls/cipher_suites.go.
|
|
hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ && cpu.X86.HasSSE41 && cpu.X86.HasSSSE3
|
|
hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL
|
|
hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCTR && cpu.S390X.HasGHASH
|
|
hasGCMAsmPPC64 = runtime.GOARCH == "ppc64" || runtime.GOARCH == "ppc64le"
|
|
|
|
HasAESGCMHardwareSupport = hasGCMAsmAMD64 || hasGCMAsmARM64 || hasGCMAsmS390X || hasGCMAsmPPC64
|
|
)
|
|
|
|
func (sc *SecurityConfig) GetSecurityType() SecurityType {
|
|
if sc == nil || sc.Type == SecurityType_AUTO {
|
|
if HasAESGCMHardwareSupport {
|
|
return SecurityType_AES128_GCM
|
|
}
|
|
return SecurityType_CHACHA20_POLY1305
|
|
}
|
|
return sc.Type
|
|
}
|
|
|
|
func isDomainTooLong(domain string) bool {
|
|
return len(domain) > 256
|
|
}
|