mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-05-14 10:00:34 +00:00
06dc4cf8bd
https://github.com/XTLS/Xray-core/pull/5657#issuecomment-4016760602 https://github.com/XTLS/Xray-core/pull/5657#issuecomment-4052921628
47 lines
919 B
Go
47 lines
919 B
Go
package salamander
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/xtls/xray-core/common/errors"
|
|
)
|
|
|
|
type salamanderConn struct {
|
|
net.PacketConn
|
|
obfs *SalamanderObfuscator
|
|
}
|
|
|
|
func NewConnClient(c *Config, raw net.PacketConn) (net.PacketConn, error) {
|
|
ob, err := NewSalamanderObfuscator([]byte(c.Password))
|
|
if err != nil {
|
|
return nil, errors.New("salamander err").Base(err)
|
|
}
|
|
|
|
conn := &salamanderConn{
|
|
PacketConn: raw,
|
|
obfs: ob,
|
|
}
|
|
|
|
return conn, nil
|
|
}
|
|
|
|
func NewConnServer(c *Config, raw net.PacketConn) (net.PacketConn, error) {
|
|
return NewConnClient(c, raw)
|
|
}
|
|
|
|
func (c *salamanderConn) Size() int {
|
|
return smSaltLen
|
|
}
|
|
|
|
func (c *salamanderConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) {
|
|
c.obfs.Deobfuscate(p, p[smSaltLen:])
|
|
|
|
return len(p) - smSaltLen, addr, nil
|
|
}
|
|
|
|
func (c *salamanderConn) WriteTo(p []byte, addr net.Addr) (n int, err error) {
|
|
c.obfs.Obfuscate(p[smSaltLen:], p)
|
|
|
|
return len(p), nil
|
|
}
|