1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package vless
- import (
- "net"
- "github.com/metacubex/mihomo/common/utils"
- "github.com/gofrs/uuid/v5"
- )
- const (
- XRO = "xtls-rprx-origin"
- XRD = "xtls-rprx-direct"
- XRS = "xtls-rprx-splice"
- XRV = "xtls-rprx-vision"
- Version byte = 0 // protocol version. preview version is 0
- )
- // Command types
- const (
- CommandTCP byte = 1
- CommandUDP byte = 2
- CommandMux byte = 3
- )
- // Addr types
- const (
- AtypIPv4 byte = 1
- AtypDomainName byte = 2
- AtypIPv6 byte = 3
- )
- // DstAddr store destination address
- type DstAddr struct {
- UDP bool
- AddrType byte
- Addr []byte
- Port uint16
- Mux bool // currently used for XUDP only
- }
- // Client is vless connection generator
- type Client struct {
- uuid *uuid.UUID
- Addons *Addons
- }
- // StreamConn return a Conn with net.Conn and DstAddr
- func (c *Client) StreamConn(conn net.Conn, dst *DstAddr) (net.Conn, error) {
- return newConn(conn, c, dst)
- }
- // NewClient return Client instance
- func NewClient(uuidStr string, addons *Addons) (*Client, error) {
- uid, err := utils.UUIDMap(uuidStr)
- if err != nil {
- return nil, err
- }
- return &Client{
- uuid: &uid,
- Addons: addons,
- }, nil
- }
|