1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-27 01:45:23 +00:00

step 1 to remove reference to net package

This commit is contained in:
Darien Raymond 2017-08-29 12:56:57 +02:00
parent c33d7f0e21
commit 1c856a46ab
42 changed files with 479 additions and 472 deletions

View File

@ -1,9 +1,9 @@
package api package api
import ( import (
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
) )
type Config struct { type Config struct {
DirectPort v2net.Port DirectPort net.Port
} }

View File

@ -2,7 +2,6 @@ package server
import ( import (
"context" "context"
"net"
"sync" "sync"
"time" "time"
@ -11,7 +10,7 @@ import (
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
"v2ray.com/core/common/dice" "v2ray.com/core/common/dice"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/transport/internet/udp" "v2ray.com/core/transport/internet/udp"
) )
@ -22,7 +21,7 @@ const (
) )
var ( var (
pseudoDestination = v2net.UDPDestination(v2net.LocalHostIP, v2net.Port(53)) pseudoDestination = net.UDPDestination(net.LocalHostIP, net.Port(53))
) )
type ARecord struct { type ARecord struct {
@ -41,13 +40,13 @@ type PendingRequest struct {
type UDPNameServer struct { type UDPNameServer struct {
sync.Mutex sync.Mutex
address v2net.Destination address net.Destination
requests map[uint16]*PendingRequest requests map[uint16]*PendingRequest
udpServer *udp.Dispatcher udpServer *udp.Dispatcher
nextCleanup time.Time nextCleanup time.Time
} }
func NewUDPNameServer(address v2net.Destination, dispatcher dispatcher.Interface) *UDPNameServer { func NewUDPNameServer(address net.Destination, dispatcher dispatcher.Interface) *UDPNameServer {
s := &UDPNameServer{ s := &UDPNameServer{
address: address, address: address,
requests: make(map[uint16]*PendingRequest), requests: make(map[uint16]*PendingRequest),

View File

@ -4,7 +4,6 @@ package server
import ( import (
"context" "context"
"net"
"sync" "sync"
"time" "time"
@ -14,7 +13,7 @@ import (
"v2ray.com/core/app/dns" "v2ray.com/core/app/dns"
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/common" "v2ray.com/core/common"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
) )
const ( const (
@ -53,10 +52,10 @@ func NewCacheServer(ctx context.Context, config *dns.Config) (*CacheServer, erro
server.servers[idx] = &LocalNameServer{} server.servers[idx] = &LocalNameServer{}
} else { } else {
dest := destPB.AsDestination() dest := destPB.AsDestination()
if dest.Network == v2net.Network_Unknown { if dest.Network == net.Network_Unknown {
dest.Network = v2net.Network_UDP dest.Network = net.Network_UDP
} }
if dest.Network == v2net.Network_UDP { if dest.Network == net.Network_UDP {
server.servers[idx] = NewUDPNameServer(dest, disp) server.servers[idx] = NewUDPNameServer(dest, disp)
} }
} }

View File

@ -9,7 +9,7 @@ import (
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
"v2ray.com/core/app/proxyman/mux" "v2ray.com/core/app/proxyman/mux"
"v2ray.com/core/common/dice" "v2ray.com/core/common/dice"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/proxy" "v2ray.com/core/proxy"
) )
@ -20,7 +20,7 @@ type DynamicInboundHandler struct {
proxyConfig interface{} proxyConfig interface{}
receiverConfig *proxyman.ReceiverConfig receiverConfig *proxyman.ReceiverConfig
portMutex sync.Mutex portMutex sync.Mutex
portsInUse map[v2net.Port]bool portsInUse map[net.Port]bool
workerMutex sync.RWMutex workerMutex sync.RWMutex
worker []worker worker []worker
lastRefresh time.Time lastRefresh time.Time
@ -35,14 +35,14 @@ func NewDynamicInboundHandler(ctx context.Context, tag string, receiverConfig *p
cancel: cancel, cancel: cancel,
proxyConfig: proxyConfig, proxyConfig: proxyConfig,
receiverConfig: receiverConfig, receiverConfig: receiverConfig,
portsInUse: make(map[v2net.Port]bool), portsInUse: make(map[net.Port]bool),
mux: mux.NewServer(ctx), mux: mux.NewServer(ctx),
} }
return h, nil return h, nil
} }
func (h *DynamicInboundHandler) allocatePort() v2net.Port { func (h *DynamicInboundHandler) allocatePort() net.Port {
from := int(h.receiverConfig.PortRange.From) from := int(h.receiverConfig.PortRange.From)
delta := int(h.receiverConfig.PortRange.To) - from + 1 delta := int(h.receiverConfig.PortRange.To) - from + 1
@ -51,7 +51,7 @@ func (h *DynamicInboundHandler) allocatePort() v2net.Port {
for { for {
r := dice.Roll(delta) r := dice.Roll(delta)
port := v2net.Port(from + r) port := net.Port(from + r)
_, used := h.portsInUse[port] _, used := h.portsInUse[port]
if !used { if !used {
h.portsInUse[port] = true h.portsInUse[port] = true
@ -63,7 +63,7 @@ func (h *DynamicInboundHandler) allocatePort() v2net.Port {
func (h *DynamicInboundHandler) waitAnyCloseWorkers(ctx context.Context, cancel context.CancelFunc, workers []worker, duration time.Duration) { func (h *DynamicInboundHandler) waitAnyCloseWorkers(ctx context.Context, cancel context.CancelFunc, workers []worker, duration time.Duration) {
time.Sleep(duration) time.Sleep(duration)
cancel() cancel()
ports2Del := make([]v2net.Port, len(workers)) ports2Del := make([]net.Port, len(workers))
for idx, worker := range workers { for idx, worker := range workers {
ports2Del[idx] = worker.Port() ports2Del[idx] = worker.Port()
worker.Close() worker.Close()
@ -86,7 +86,7 @@ func (h *DynamicInboundHandler) refresh() error {
address := h.receiverConfig.Listen.AsAddress() address := h.receiverConfig.Listen.AsAddress()
if address == nil { if address == nil {
address = v2net.AnyIP address = net.AnyIP
} }
for i := uint32(0); i < concurrency; i++ { for i := uint32(0); i < concurrency; i++ {
port := h.allocatePort() port := h.allocatePort()
@ -96,7 +96,7 @@ func (h *DynamicInboundHandler) refresh() error {
continue continue
} }
nl := p.Network() nl := p.Network()
if nl.HasNetwork(v2net.Network_TCP) { if nl.HasNetwork(net.Network_TCP) {
worker := &tcpWorker{ worker := &tcpWorker{
tag: h.tag, tag: h.tag,
address: address, address: address,
@ -114,7 +114,7 @@ func (h *DynamicInboundHandler) refresh() error {
workers = append(workers, worker) workers = append(workers, worker)
} }
if nl.HasNetwork(v2net.Network_UDP) { if nl.HasNetwork(net.Network_UDP) {
worker := &udpWorker{ worker := &udpWorker{
tag: h.tag, tag: h.tag,
proxy: p, proxy: p,
@ -164,7 +164,7 @@ func (h *DynamicInboundHandler) Close() {
h.cancel() h.cancel()
} }
func (h *DynamicInboundHandler) GetRandomInboundProxy() (proxy.Inbound, v2net.Port, int) { func (h *DynamicInboundHandler) GetRandomInboundProxy() (proxy.Inbound, net.Port, int) {
h.workerMutex.RLock() h.workerMutex.RLock()
defer h.workerMutex.RUnlock() defer h.workerMutex.RUnlock()

View File

@ -3,7 +3,6 @@ package inbound
import ( import (
"context" "context"
"io" "io"
"net"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
@ -12,7 +11,7 @@ import (
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/proxy" "v2ray.com/core/proxy"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
"v2ray.com/core/transport/internet/tcp" "v2ray.com/core/transport/internet/tcp"
@ -22,13 +21,13 @@ import (
type worker interface { type worker interface {
Start() error Start() error
Close() Close()
Port() v2net.Port Port() net.Port
Proxy() proxy.Inbound Proxy() proxy.Inbound
} }
type tcpWorker struct { type tcpWorker struct {
address v2net.Address address net.Address
port v2net.Port port net.Port
proxy proxy.Inbound proxy proxy.Inbound
stream *internet.StreamConfig stream *internet.StreamConfig
recvOrigDest bool recvOrigDest bool
@ -55,12 +54,12 @@ func (w *tcpWorker) callback(conn internet.Connection) {
if len(w.tag) > 0 { if len(w.tag) > 0 {
ctx = proxy.ContextWithInboundTag(ctx, w.tag) ctx = proxy.ContextWithInboundTag(ctx, w.tag)
} }
ctx = proxy.ContextWithInboundEntryPoint(ctx, v2net.TCPDestination(w.address, w.port)) ctx = proxy.ContextWithInboundEntryPoint(ctx, net.TCPDestination(w.address, w.port))
ctx = proxy.ContextWithSource(ctx, v2net.DestinationFromAddr(conn.RemoteAddr())) ctx = proxy.ContextWithSource(ctx, net.DestinationFromAddr(conn.RemoteAddr()))
if len(w.sniffers) > 0 { if len(w.sniffers) > 0 {
ctx = proxyman.ContextWithProtocolSniffers(ctx, w.sniffers) ctx = proxyman.ContextWithProtocolSniffers(ctx, w.sniffers)
} }
if err := w.proxy.Process(ctx, v2net.Network_TCP, conn, w.dispatcher); err != nil { if err := w.proxy.Process(ctx, net.Network_TCP, conn, w.dispatcher); err != nil {
log.Trace(newError("connection ends").Base(err)) log.Trace(newError("connection ends").Base(err))
} }
cancel() cancel()
@ -113,7 +112,7 @@ func (w *tcpWorker) Close() {
} }
} }
func (w *tcpWorker) Port() v2net.Port { func (w *tcpWorker) Port() net.Port {
return w.port return w.port
} }
@ -178,18 +177,18 @@ type udpWorker struct {
proxy proxy.Inbound proxy proxy.Inbound
hub *udp.Hub hub *udp.Hub
address v2net.Address address net.Address
port v2net.Port port net.Port
recvOrigDest bool recvOrigDest bool
tag string tag string
dispatcher dispatcher.Interface dispatcher dispatcher.Interface
ctx context.Context ctx context.Context
cancel context.CancelFunc cancel context.CancelFunc
activeConn map[v2net.Destination]*udpConn activeConn map[net.Destination]*udpConn
} }
func (w *udpWorker) getConnection(src v2net.Destination) (*udpConn, bool) { func (w *udpWorker) getConnection(src net.Destination) (*udpConn, bool) {
w.Lock() w.Lock()
defer w.Unlock() defer w.Unlock()
@ -217,7 +216,7 @@ func (w *udpWorker) getConnection(src v2net.Destination) (*udpConn, bool) {
return conn, false return conn, false
} }
func (w *udpWorker) callback(b *buf.Buffer, source v2net.Destination, originalDest v2net.Destination) { func (w *udpWorker) callback(b *buf.Buffer, source net.Destination, originalDest net.Destination) {
conn, existing := w.getConnection(source) conn, existing := w.getConnection(source)
select { select {
case conn.input <- b: case conn.input <- b:
@ -237,8 +236,8 @@ func (w *udpWorker) callback(b *buf.Buffer, source v2net.Destination, originalDe
ctx = proxy.ContextWithInboundTag(ctx, w.tag) ctx = proxy.ContextWithInboundTag(ctx, w.tag)
} }
ctx = proxy.ContextWithSource(ctx, source) ctx = proxy.ContextWithSource(ctx, source)
ctx = proxy.ContextWithInboundEntryPoint(ctx, v2net.UDPDestination(w.address, w.port)) ctx = proxy.ContextWithInboundEntryPoint(ctx, net.UDPDestination(w.address, w.port))
if err := w.proxy.Process(ctx, v2net.Network_UDP, conn, w.dispatcher); err != nil { if err := w.proxy.Process(ctx, net.Network_UDP, conn, w.dispatcher); err != nil {
log.Trace(newError("connection ends").Base(err)) log.Trace(newError("connection ends").Base(err))
} }
w.removeConn(source) w.removeConn(source)
@ -247,14 +246,14 @@ func (w *udpWorker) callback(b *buf.Buffer, source v2net.Destination, originalDe
} }
} }
func (w *udpWorker) removeConn(src v2net.Destination) { func (w *udpWorker) removeConn(src net.Destination) {
w.Lock() w.Lock()
delete(w.activeConn, src) delete(w.activeConn, src)
w.Unlock() w.Unlock()
} }
func (w *udpWorker) Start() error { func (w *udpWorker) Start() error {
w.activeConn = make(map[v2net.Destination]*udpConn) w.activeConn = make(map[net.Destination]*udpConn)
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
w.ctx = ctx w.ctx = ctx
w.cancel = cancel w.cancel = cancel
@ -299,7 +298,7 @@ func (w *udpWorker) monitor() {
} }
} }
func (w *udpWorker) Port() v2net.Port { func (w *udpWorker) Port() net.Port {
return w.port return w.port
} }

View File

@ -3,7 +3,6 @@ package outbound
import ( import (
"context" "context"
"io" "io"
"net"
"time" "time"
"v2ray.com/core/app" "v2ray.com/core/app"
@ -12,7 +11,7 @@ import (
"v2ray.com/core/app/proxyman/mux" "v2ray.com/core/app/proxyman/mux"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
"v2ray.com/core/common/errors" "v2ray.com/core/common/errors"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/proxy" "v2ray.com/core/proxy"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
"v2ray.com/core/transport/ray" "v2ray.com/core/transport/ray"
@ -94,7 +93,7 @@ func (h *Handler) Dispatch(ctx context.Context, outboundRay ray.OutboundRay) {
} }
// Dial implements proxy.Dialer.Dial(). // Dial implements proxy.Dialer.Dial().
func (h *Handler) Dial(ctx context.Context, dest v2net.Destination) (internet.Connection, error) { func (h *Handler) Dial(ctx context.Context, dest net.Destination) (internet.Connection, error) {
if h.senderSettings != nil { if h.senderSettings != nil {
if h.senderSettings.ProxySettings.HasTag() { if h.senderSettings.ProxySettings.HasTag() {
tag := h.senderSettings.ProxySettings.Tag tag := h.senderSettings.ProxySettings.Tag

35
common/net/system.go Normal file
View File

@ -0,0 +1,35 @@
package net
import "net"
var DialTCP = net.DialTCP
var DialUDP = net.DialUDP
var Listen = net.Listen
var ListenTCP = net.ListenTCP
var ListenUDP = net.ListenUDP
var LookupIP = net.LookupIP
var SplitHostPort = net.SplitHostPort
type Addr = net.Addr
type Conn = net.Conn
type TCPAddr = net.TCPAddr
type TCPConn = net.TCPConn
type UDPAddr = net.UDPAddr
type UDPConn = net.UDPConn
type UnixConn = net.UnixConn
type IP = net.IP
type Error = net.Error
type AddrError = net.AddrError
type Dialer = net.Dialer
type Listener = net.Listener
type TCPListener = net.TCPListener
type UDPListener = net.UDPListener

View File

@ -4,7 +4,7 @@ import (
"testing" "testing"
"time" "time"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
. "v2ray.com/core/common/protocol" . "v2ray.com/core/common/protocol"
"v2ray.com/core/testing/assert" "v2ray.com/core/testing/assert"
) )
@ -13,9 +13,9 @@ func TestServerList(t *testing.T) {
assert := assert.On(t) assert := assert.On(t)
list := NewServerList() list := NewServerList()
list.AddServer(NewServerSpec(v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(1)), AlwaysValid())) list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(1)), AlwaysValid()))
assert.Uint32(list.Size()).Equals(1) assert.Uint32(list.Size()).Equals(1)
list.AddServer(NewServerSpec(v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(2)), BeforeTime(time.Now().Add(time.Second)))) list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(2)), BeforeTime(time.Now().Add(time.Second))))
assert.Uint32(list.Size()).Equals(2) assert.Uint32(list.Size()).Equals(2)
server := list.GetServer(1) server := list.GetServer(1)
@ -32,9 +32,9 @@ func TestServerPicker(t *testing.T) {
assert := assert.On(t) assert := assert.On(t)
list := NewServerList() list := NewServerList()
list.AddServer(NewServerSpec(v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(1)), AlwaysValid())) list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(1)), AlwaysValid()))
list.AddServer(NewServerSpec(v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(2)), BeforeTime(time.Now().Add(time.Second)))) list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(2)), BeforeTime(time.Now().Add(time.Second))))
list.AddServer(NewServerSpec(v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(3)), BeforeTime(time.Now().Add(time.Second)))) list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(3)), BeforeTime(time.Now().Add(time.Second))))
picker := NewRoundRobinServerPicker(list) picker := NewRoundRobinServerPicker(list)
server := picker.PickServer() server := picker.PickServer()

View File

@ -4,7 +4,6 @@ import (
"bufio" "bufio"
"context" "context"
"io" "io"
"net"
"net/http" "net/http"
"runtime" "runtime"
"strconv" "strconv"
@ -17,7 +16,7 @@ import (
"v2ray.com/core/common" "v2ray.com/core/common"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
"v2ray.com/core/common/errors" "v2ray.com/core/common/errors"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/signal" "v2ray.com/core/common/signal"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
) )
@ -39,33 +38,30 @@ func NewServer(ctx context.Context, config *ServerConfig) (*Server, error) {
return s, nil return s, nil
} }
func (*Server) Network() v2net.NetworkList { func (*Server) Network() net.NetworkList {
return v2net.NetworkList{ return net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
} }
} }
func parseHost(rawHost string, defaultPort v2net.Port) (v2net.Destination, error) { func parseHost(rawHost string, defaultPort net.Port) (net.Destination, error) {
port := defaultPort port := defaultPort
host, rawPort, err := net.SplitHostPort(rawHost) host, rawPort, err := net.SplitHostPort(rawHost)
if err != nil { if err != nil {
if addrError, ok := err.(*net.AddrError); ok && strings.Contains(addrError.Err, "missing port") { if addrError, ok := err.(*net.AddrError); ok && strings.Contains(addrError.Err, "missing port") {
host = rawHost host = rawHost
} else { } else {
return v2net.Destination{}, err return net.Destination{}, err
} }
} else { } else {
intPort, err := strconv.Atoi(rawPort) intPort, err := strconv.Atoi(rawPort)
if err != nil { if err != nil {
return v2net.Destination{}, err return net.Destination{}, err
} }
port = v2net.Port(intPort) port = net.Port(intPort)
} }
if ip := net.ParseIP(host); ip != nil { return net.TCPDestination(net.ParseAddress(host), port), nil
return v2net.TCPDestination(v2net.IPAddress(ip), port), nil
}
return v2net.TCPDestination(v2net.DomainAddress(host), port), nil
} }
func isTimeout(err error) bool { func isTimeout(err error) bool {
@ -73,7 +69,7 @@ func isTimeout(err error) bool {
return ok && nerr.Timeout() return ok && nerr.Timeout()
} }
func (s *Server) Process(ctx context.Context, network v2net.Network, conn internet.Connection, dispatcher dispatcher.Interface) error { func (s *Server) Process(ctx context.Context, network net.Network, conn internet.Connection, dispatcher dispatcher.Interface) error {
reader := bufio.NewReaderSize(conn, 2048) reader := bufio.NewReaderSize(conn, 2048)
Start: Start:
@ -90,9 +86,9 @@ Start:
log.Trace(newError("request to Method [", request.Method, "] Host [", request.Host, "] with URL [", request.URL, "]")) log.Trace(newError("request to Method [", request.Method, "] Host [", request.Host, "] with URL [", request.URL, "]"))
conn.SetReadDeadline(time.Time{}) conn.SetReadDeadline(time.Time{})
defaultPort := v2net.Port(80) defaultPort := net.Port(80)
if strings.ToLower(request.URL.Scheme) == "https" { if strings.ToLower(request.URL.Scheme) == "https" {
defaultPort = v2net.Port(443) defaultPort = net.Port(443)
} }
host := request.Host host := request.Host
if len(host) == 0 { if len(host) == 0 {
@ -121,7 +117,7 @@ Start:
return err return err
} }
func (s *Server) handleConnect(ctx context.Context, request *http.Request, reader io.Reader, writer io.Writer, dest v2net.Destination, dispatcher dispatcher.Interface) error { func (s *Server) handleConnect(ctx context.Context, request *http.Request, reader io.Reader, writer io.Writer, dest net.Destination, dispatcher dispatcher.Interface) error {
_, err := writer.Write([]byte("HTTP/1.1 200 Connection established\r\n\r\n")) _, err := writer.Write([]byte("HTTP/1.1 200 Connection established\r\n\r\n"))
if err != nil { if err != nil {
return newError("failed to write back OK response").Base(err) return newError("failed to write back OK response").Base(err)
@ -192,7 +188,7 @@ func StripHopByHopHeaders(header http.Header) {
var errWaitAnother = newError("keep alive") var errWaitAnother = newError("keep alive")
func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, reader io.Reader, writer io.Writer, dest v2net.Destination, dispatcher dispatcher.Interface) error { func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, reader io.Reader, writer io.Writer, dest net.Destination, dispatcher dispatcher.Interface) error {
if len(request.URL.Host) <= 0 { if len(request.URL.Host) <= 0 {
response := &http.Response{ response := &http.Response{
Status: "Bad Request", Status: "Bad Request",

View File

@ -7,7 +7,7 @@ import (
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
"v2ray.com/core/common/crypto" "v2ray.com/core/common/crypto"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
) )
@ -73,12 +73,12 @@ func ReadTCPSession(user *protocol.User, reader io.Reader) (*protocol.RequestHea
if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 4)); err != nil { if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 4)); err != nil {
return nil, nil, newError("failed to read IPv4 address").Base(err) return nil, nil, newError("failed to read IPv4 address").Base(err)
} }
request.Address = v2net.IPAddress(buffer.BytesFrom(-4)) request.Address = net.IPAddress(buffer.BytesFrom(-4))
case AddrTypeIPv6: case AddrTypeIPv6:
if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 16)); err != nil { if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 16)); err != nil {
return nil, nil, newError("failed to read IPv6 address").Base(err) return nil, nil, newError("failed to read IPv6 address").Base(err)
} }
request.Address = v2net.IPAddress(buffer.BytesFrom(-16)) request.Address = net.IPAddress(buffer.BytesFrom(-16))
case AddrTypeDomain: case AddrTypeDomain:
if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 1)); err != nil { if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 1)); err != nil {
return nil, nil, newError("failed to read domain lenth.").Base(err) return nil, nil, newError("failed to read domain lenth.").Base(err)
@ -88,7 +88,7 @@ func ReadTCPSession(user *protocol.User, reader io.Reader) (*protocol.RequestHea
if err != nil { if err != nil {
return nil, nil, newError("failed to read domain").Base(err) return nil, nil, newError("failed to read domain").Base(err)
} }
request.Address = v2net.DomainAddress(string(buffer.BytesFrom(-domainLength))) request.Address = net.DomainAddress(string(buffer.BytesFrom(-domainLength)))
default: default:
// Check address validity after OTA verification. // Check address validity after OTA verification.
} }
@ -97,7 +97,7 @@ func ReadTCPSession(user *protocol.User, reader io.Reader) (*protocol.RequestHea
if err != nil { if err != nil {
return nil, nil, newError("failed to read port").Base(err) return nil, nil, newError("failed to read port").Base(err)
} }
request.Port = v2net.PortFromBytes(buffer.BytesFrom(-2)) request.Port = net.PortFromBytes(buffer.BytesFrom(-2))
if request.Option.Has(RequestOptionOneTimeAuth) { if request.Option.Has(RequestOptionOneTimeAuth) {
actualAuth := make([]byte, AuthSize) actualAuth := make([]byte, AuthSize)
@ -152,13 +152,13 @@ func WriteTCPRequest(request *protocol.RequestHeader, writer io.Writer) (buf.Wri
header := buf.NewLocal(512) header := buf.NewLocal(512)
switch request.Address.Family() { switch request.Address.Family() {
case v2net.AddressFamilyIPv4: case net.AddressFamilyIPv4:
header.AppendBytes(AddrTypeIPv4) header.AppendBytes(AddrTypeIPv4)
header.Append([]byte(request.Address.IP())) header.Append([]byte(request.Address.IP()))
case v2net.AddressFamilyIPv6: case net.AddressFamilyIPv6:
header.AppendBytes(AddrTypeIPv6) header.AppendBytes(AddrTypeIPv6)
header.Append([]byte(request.Address.IP())) header.Append([]byte(request.Address.IP()))
case v2net.AddressFamilyDomain: case net.AddressFamilyDomain:
header.AppendBytes(AddrTypeDomain, byte(len(request.Address.Domain()))) header.AppendBytes(AddrTypeDomain, byte(len(request.Address.Domain())))
header.Append([]byte(request.Address.Domain())) header.Append([]byte(request.Address.Domain()))
default: default:
@ -246,13 +246,13 @@ func EncodeUDPPacket(request *protocol.RequestHeader, payload []byte) (*buf.Buff
iv := buffer.Bytes() iv := buffer.Bytes()
switch request.Address.Family() { switch request.Address.Family() {
case v2net.AddressFamilyIPv4: case net.AddressFamilyIPv4:
buffer.AppendBytes(AddrTypeIPv4) buffer.AppendBytes(AddrTypeIPv4)
buffer.Append([]byte(request.Address.IP())) buffer.Append([]byte(request.Address.IP()))
case v2net.AddressFamilyIPv6: case net.AddressFamilyIPv6:
buffer.AppendBytes(AddrTypeIPv6) buffer.AppendBytes(AddrTypeIPv6)
buffer.Append([]byte(request.Address.IP())) buffer.Append([]byte(request.Address.IP()))
case v2net.AddressFamilyDomain: case net.AddressFamilyDomain:
buffer.AppendBytes(AddrTypeDomain, byte(len(request.Address.Domain()))) buffer.AppendBytes(AddrTypeDomain, byte(len(request.Address.Domain())))
buffer.Append([]byte(request.Address.Domain())) buffer.Append([]byte(request.Address.Domain()))
default: default:
@ -332,20 +332,20 @@ func DecodeUDPPacket(user *protocol.User, payload *buf.Buffer) (*protocol.Reques
switch addrType { switch addrType {
case AddrTypeIPv4: case AddrTypeIPv4:
request.Address = v2net.IPAddress(payload.BytesTo(4)) request.Address = net.IPAddress(payload.BytesTo(4))
payload.SliceFrom(4) payload.SliceFrom(4)
case AddrTypeIPv6: case AddrTypeIPv6:
request.Address = v2net.IPAddress(payload.BytesTo(16)) request.Address = net.IPAddress(payload.BytesTo(16))
payload.SliceFrom(16) payload.SliceFrom(16)
case AddrTypeDomain: case AddrTypeDomain:
domainLength := int(payload.Byte(0)) domainLength := int(payload.Byte(0))
request.Address = v2net.DomainAddress(string(payload.BytesRange(1, 1+domainLength))) request.Address = net.DomainAddress(string(payload.BytesRange(1, 1+domainLength)))
payload.SliceFrom(1 + domainLength) payload.SliceFrom(1 + domainLength)
default: default:
return nil, nil, newError("unknown address type: ", addrType).AtError() return nil, nil, newError("unknown address type: ", addrType).AtError()
} }
request.Port = v2net.PortFromBytes(payload.BytesTo(2)) request.Port = net.PortFromBytes(payload.BytesTo(2))
payload.SliceFrom(2) payload.SliceFrom(2)
return request, payload, nil return request, payload, nil

View File

@ -4,7 +4,7 @@ import (
"testing" "testing"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
. "v2ray.com/core/proxy/shadowsocks" . "v2ray.com/core/proxy/shadowsocks"
@ -17,7 +17,7 @@ func TestUDPEncoding(t *testing.T) {
request := &protocol.RequestHeader{ request := &protocol.RequestHeader{
Version: Version, Version: Version,
Command: protocol.RequestCommandUDP, Command: protocol.RequestCommandUDP,
Address: v2net.LocalHostIP, Address: net.LocalHostIP,
Port: 1234, Port: 1234,
User: &protocol.User{ User: &protocol.User{
Email: "love@v2ray.com", Email: "love@v2ray.com",
@ -52,7 +52,7 @@ func TestTCPRequest(t *testing.T) {
request: &protocol.RequestHeader{ request: &protocol.RequestHeader{
Version: Version, Version: Version,
Command: protocol.RequestCommandTCP, Command: protocol.RequestCommandTCP,
Address: v2net.LocalHostIP, Address: net.LocalHostIP,
Option: RequestOptionOneTimeAuth, Option: RequestOptionOneTimeAuth,
Port: 1234, Port: 1234,
User: &protocol.User{ User: &protocol.User{
@ -69,7 +69,7 @@ func TestTCPRequest(t *testing.T) {
request: &protocol.RequestHeader{ request: &protocol.RequestHeader{
Version: Version, Version: Version,
Command: protocol.RequestCommandTCP, Command: protocol.RequestCommandTCP,
Address: v2net.LocalHostIPv6, Address: net.LocalHostIPv6,
Option: RequestOptionOneTimeAuth, Option: RequestOptionOneTimeAuth,
Port: 1234, Port: 1234,
User: &protocol.User{ User: &protocol.User{
@ -86,7 +86,7 @@ func TestTCPRequest(t *testing.T) {
request: &protocol.RequestHeader{ request: &protocol.RequestHeader{
Version: Version, Version: Version,
Command: protocol.RequestCommandTCP, Command: protocol.RequestCommandTCP,
Address: v2net.DomainAddress("v2ray.com"), Address: net.DomainAddress("v2ray.com"),
Option: RequestOptionOneTimeAuth, Option: RequestOptionOneTimeAuth,
Port: 1234, Port: 1234,
User: &protocol.User{ User: &protocol.User{
@ -144,7 +144,7 @@ func TestUDPReaderWriter(t *testing.T) {
Writer: cache, Writer: cache,
Request: &protocol.RequestHeader{ Request: &protocol.RequestHeader{
Version: Version, Version: Version,
Address: v2net.DomainAddress("v2ray.com"), Address: net.DomainAddress("v2ray.com"),
Port: 123, Port: 123,
User: user, User: user,
Option: RequestOptionOneTimeAuth, Option: RequestOptionOneTimeAuth,

View File

@ -4,7 +4,7 @@ import (
"io" "io"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
) )
@ -35,7 +35,7 @@ const (
type ServerSession struct { type ServerSession struct {
config *ServerConfig config *ServerConfig
port v2net.Port port net.Port
} }
func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol.RequestHeader, error) { func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol.RequestHeader, error) {
@ -51,8 +51,8 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol
if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 6)); err != nil { if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 6)); err != nil {
return nil, newError("insufficient header").Base(err) return nil, newError("insufficient header").Base(err)
} }
port := v2net.PortFromBytes(buffer.BytesRange(2, 4)) port := net.PortFromBytes(buffer.BytesRange(2, 4))
address := v2net.IPAddress(buffer.BytesRange(4, 8)) address := net.IPAddress(buffer.BytesRange(4, 8))
_, err := readUntilNull(reader) // user id _, err := readUntilNull(reader) // user id
if err != nil { if err != nil {
return nil, err return nil, err
@ -62,7 +62,7 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol
if err != nil { if err != nil {
return nil, newError("failed to read domain for socks 4a").Base(err) return nil, newError("failed to read domain for socks 4a").Base(err)
} }
address = v2net.DomainAddress(domain) address = net.DomainAddress(domain)
} }
switch buffer.Byte(1) { switch buffer.Byte(1) {
@ -71,12 +71,12 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol
request.Address = address request.Address = address
request.Port = port request.Port = port
request.Version = socks4Version request.Version = socks4Version
if err := writeSocks4Response(writer, socks4RequestGranted, v2net.AnyIP, v2net.Port(0)); err != nil { if err := writeSocks4Response(writer, socks4RequestGranted, net.AnyIP, net.Port(0)); err != nil {
return nil, err return nil, err
} }
return request, nil return request, nil
default: default:
writeSocks4Response(writer, socks4RequestRejected, v2net.AnyIP, v2net.Port(0)) writeSocks4Response(writer, socks4RequestRejected, net.AnyIP, net.Port(0))
return nil, newError("unsupported command: ", buffer.Byte(1)) return nil, newError("unsupported command: ", buffer.Byte(1))
} }
} }
@ -122,7 +122,7 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol
cmd := buffer.Byte(1) cmd := buffer.Byte(1)
if cmd == cmdTCPBind || (cmd == cmdUDPPort && !s.config.UdpEnabled) { if cmd == cmdTCPBind || (cmd == cmdUDPPort && !s.config.UdpEnabled) {
writeSocks5Response(writer, statusCmdNotSupport, v2net.AnyIP, v2net.Port(0)) writeSocks5Response(writer, statusCmdNotSupport, net.AnyIP, net.Port(0))
return nil, newError("unsupported command: ", cmd) return nil, newError("unsupported command: ", cmd)
} }
@ -143,12 +143,12 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol
if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 4)); err != nil { if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 4)); err != nil {
return nil, err return nil, err
} }
request.Address = v2net.IPAddress(buffer.Bytes()) request.Address = net.IPAddress(buffer.Bytes())
case addrTypeIPv6: case addrTypeIPv6:
if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 16)); err != nil { if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 16)); err != nil {
return nil, err return nil, err
} }
request.Address = v2net.IPAddress(buffer.Bytes()) request.Address = net.IPAddress(buffer.Bytes())
case addrTypeDomain: case addrTypeDomain:
if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 1)); err != nil { if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 1)); err != nil {
return nil, err return nil, err
@ -157,7 +157,7 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol
if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, domainLength)); err != nil { if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, domainLength)); err != nil {
return nil, err return nil, err
} }
request.Address = v2net.ParseAddress(string(buffer.BytesFrom(-domainLength))) request.Address = net.ParseAddress(string(buffer.BytesFrom(-domainLength)))
default: default:
return nil, newError("Unknown address type: ", addrType) return nil, newError("Unknown address type: ", addrType)
} }
@ -165,14 +165,14 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol
if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 2)); err != nil { if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, 2)); err != nil {
return nil, err return nil, err
} }
request.Port = v2net.PortFromBytes(buffer.BytesFrom(-2)) request.Port = net.PortFromBytes(buffer.BytesFrom(-2))
responseAddress := v2net.AnyIP responseAddress := net.AnyIP
responsePort := v2net.Port(1717) responsePort := net.Port(1717)
if request.Command == protocol.RequestCommandUDP { if request.Command == protocol.RequestCommandUDP {
addr := s.config.Address.AsAddress() addr := s.config.Address.AsAddress()
if addr == nil { if addr == nil {
addr = v2net.LocalHostIP addr = net.LocalHostIP
} }
responseAddress = addr responseAddress = addr
responsePort = s.port responsePort = s.port
@ -244,22 +244,22 @@ func writeSocks5AuthenticationResponse(writer io.Writer, version byte, auth byte
return err return err
} }
func appendAddress(buffer *buf.Buffer, address v2net.Address, port v2net.Port) { func appendAddress(buffer *buf.Buffer, address net.Address, port net.Port) {
switch address.Family() { switch address.Family() {
case v2net.AddressFamilyIPv4: case net.AddressFamilyIPv4:
buffer.AppendBytes(0x01) buffer.AppendBytes(0x01)
buffer.Append(address.IP()) buffer.Append(address.IP())
case v2net.AddressFamilyIPv6: case net.AddressFamilyIPv6:
buffer.AppendBytes(0x04) buffer.AppendBytes(0x04)
buffer.Append(address.IP()) buffer.Append(address.IP())
case v2net.AddressFamilyDomain: case net.AddressFamilyDomain:
buffer.AppendBytes(0x03, byte(len(address.Domain()))) buffer.AppendBytes(0x03, byte(len(address.Domain())))
buffer.AppendSupplier(serial.WriteString(address.Domain())) buffer.AppendSupplier(serial.WriteString(address.Domain()))
} }
buffer.AppendSupplier(serial.WriteUint16(port.Value())) buffer.AppendSupplier(serial.WriteUint16(port.Value()))
} }
func writeSocks5Response(writer io.Writer, errCode byte, address v2net.Address, port v2net.Port) error { func writeSocks5Response(writer io.Writer, errCode byte, address net.Address, port net.Port) error {
buffer := buf.NewLocal(64) buffer := buf.NewLocal(64)
buffer.AppendBytes(socks5Version, errCode, 0x00 /* reserved */) buffer.AppendBytes(socks5Version, errCode, 0x00 /* reserved */)
appendAddress(buffer, address, port) appendAddress(buffer, address, port)
@ -268,7 +268,7 @@ func writeSocks5Response(writer io.Writer, errCode byte, address v2net.Address,
return err return err
} }
func writeSocks4Response(writer io.Writer, errCode byte, address v2net.Address, port v2net.Port) error { func writeSocks4Response(writer io.Writer, errCode byte, address net.Address, port net.Port) error {
buffer := buf.NewLocal(32) buffer := buf.NewLocal(32)
buffer.AppendBytes(0x00, errCode) buffer.AppendBytes(0x00, errCode)
buffer.AppendSupplier(serial.WriteUint16(port.Value())) buffer.AppendSupplier(serial.WriteUint16(port.Value()))
@ -300,16 +300,16 @@ func DecodeUDPPacket(packet []byte) (*protocol.RequestHeader, []byte, error) {
return nil, nil, newError("insufficient length of packet") return nil, nil, newError("insufficient length of packet")
} }
ip := packet[4:8] ip := packet[4:8]
request.Port = v2net.PortFromBytes(packet[8:10]) request.Port = net.PortFromBytes(packet[8:10])
request.Address = v2net.IPAddress(ip) request.Address = net.IPAddress(ip)
dataBegin = 10 dataBegin = 10
case addrTypeIPv6: case addrTypeIPv6:
if len(packet) < 22 { if len(packet) < 22 {
return nil, nil, newError("insufficient length of packet") return nil, nil, newError("insufficient length of packet")
} }
ip := packet[4:20] ip := packet[4:20]
request.Port = v2net.PortFromBytes(packet[20:22]) request.Port = net.PortFromBytes(packet[20:22])
request.Address = v2net.IPAddress(ip) request.Address = net.IPAddress(ip)
dataBegin = 22 dataBegin = 22
case addrTypeDomain: case addrTypeDomain:
domainLength := int(packet[4]) domainLength := int(packet[4])
@ -317,8 +317,8 @@ func DecodeUDPPacket(packet []byte) (*protocol.RequestHeader, []byte, error) {
return nil, nil, newError("insufficient length of packet") return nil, nil, newError("insufficient length of packet")
} }
domain := string(packet[5 : 5+domainLength]) domain := string(packet[5 : 5+domainLength])
request.Port = v2net.PortFromBytes(packet[5+domainLength : 5+domainLength+2]) request.Port = net.PortFromBytes(packet[5+domainLength : 5+domainLength+2])
request.Address = v2net.ParseAddress(domain) request.Address = net.ParseAddress(domain)
dataBegin = 5 + domainLength + 2 dataBegin = 5 + domainLength + 2
default: default:
return nil, nil, newError("unknown address type ", addrType) return nil, nil, newError("unknown address type ", addrType)
@ -451,18 +451,18 @@ func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer i
b.Clear() b.Clear()
var address v2net.Address var address net.Address
switch addrType { switch addrType {
case addrTypeIPv4: case addrTypeIPv4:
if err := b.AppendSupplier(buf.ReadFullFrom(reader, 4)); err != nil { if err := b.AppendSupplier(buf.ReadFullFrom(reader, 4)); err != nil {
return nil, err return nil, err
} }
address = v2net.IPAddress(b.Bytes()) address = net.IPAddress(b.Bytes())
case addrTypeIPv6: case addrTypeIPv6:
if err := b.AppendSupplier(buf.ReadFullFrom(reader, 16)); err != nil { if err := b.AppendSupplier(buf.ReadFullFrom(reader, 16)); err != nil {
return nil, err return nil, err
} }
address = v2net.IPAddress(b.Bytes()) address = net.IPAddress(b.Bytes())
case addrTypeDomain: case addrTypeDomain:
if err := b.AppendSupplier(buf.ReadFullFrom(reader, 1)); err != nil { if err := b.AppendSupplier(buf.ReadFullFrom(reader, 1)); err != nil {
return nil, err return nil, err
@ -471,7 +471,7 @@ func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer i
if err := b.AppendSupplier(buf.ReadFullFrom(reader, domainLength)); err != nil { if err := b.AppendSupplier(buf.ReadFullFrom(reader, domainLength)); err != nil {
return nil, err return nil, err
} }
address = v2net.DomainAddress(string(b.BytesFrom(-domainLength))) address = net.DomainAddress(string(b.BytesFrom(-domainLength)))
default: default:
return nil, newError("unknown address type: ", addrType) return nil, newError("unknown address type: ", addrType)
} }
@ -479,7 +479,7 @@ func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer i
if err := b.AppendSupplier(buf.ReadFullFrom(reader, 2)); err != nil { if err := b.AppendSupplier(buf.ReadFullFrom(reader, 2)); err != nil {
return nil, err return nil, err
} }
port := v2net.PortFromBytes(b.BytesFrom(-2)) port := net.PortFromBytes(b.BytesFrom(-2))
if request.Command == protocol.RequestCommandUDP { if request.Command == protocol.RequestCommandUDP {
udpRequest := &protocol.RequestHeader{ udpRequest := &protocol.RequestHeader{

View File

@ -5,7 +5,7 @@ import (
"testing" "testing"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/common/uuid" "v2ray.com/core/common/uuid"
@ -31,8 +31,8 @@ func TestRequestSerialization(t *testing.T) {
Version: 1, Version: 1,
User: user, User: user,
Command: protocol.RequestCommandTCP, Command: protocol.RequestCommandTCP,
Address: v2net.DomainAddress("www.v2ray.com"), Address: net.DomainAddress("www.v2ray.com"),
Port: v2net.Port(443), Port: net.Port(443),
Security: protocol.Security(protocol.SecurityType_AES128_GCM), Security: protocol.Security(protocol.SecurityType_AES128_GCM),
} }

View File

@ -5,7 +5,6 @@ import (
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"net"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
@ -17,29 +16,29 @@ import (
"v2ray.com/core" "v2ray.com/core"
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/common" "v2ray.com/core/common"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/retry" "v2ray.com/core/common/retry"
) )
func pickPort() v2net.Port { func pickPort() net.Port {
listener, err := net.Listen("tcp4", ":0") listener, err := net.Listen("tcp4", ":0")
common.Must(err) common.Must(err)
defer listener.Close() defer listener.Close()
addr := listener.Addr().(*net.TCPAddr) addr := listener.Addr().(*net.TCPAddr)
return v2net.Port(addr.Port) return net.Port(addr.Port)
} }
func pickUDPPort() v2net.Port { func pickUDPPort() net.Port {
conn, err := net.ListenUDP("udp4", &net.UDPAddr{ conn, err := net.ListenUDP("udp4", &net.UDPAddr{
IP: v2net.LocalHostIP.IP(), IP: net.LocalHostIP.IP(),
Port: 0, Port: 0,
}) })
common.Must(err) common.Must(err)
defer conn.Close() defer conn.Close()
addr := conn.LocalAddr().(*net.UDPAddr) addr := conn.LocalAddr().(*net.UDPAddr)
return v2net.Port(addr.Port) return net.Port(addr.Port)
} }
func xor(b []byte) []byte { func xor(b []byte) []byte {

View File

@ -9,7 +9,7 @@ import (
"v2ray.com/core/app/dns" "v2ray.com/core/app/dns"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
"v2ray.com/core/app/router" "v2ray.com/core/app/router"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/proxy/blackhole" "v2ray.com/core/proxy/blackhole"
"v2ray.com/core/proxy/freedom" "v2ray.com/core/proxy/freedom"
@ -32,8 +32,8 @@ func TestResolveIP(t *testing.T) {
serverConfig := &core.Config{ serverConfig := &core.Config{
App: []*serial.TypedMessage{ App: []*serial.TypedMessage{
serial.ToTypedMessage(&dns.Config{ serial.ToTypedMessage(&dns.Config{
Hosts: map[string]*v2net.IPOrDomain{ Hosts: map[string]*net.IPOrDomain{
"google.com": v2net.NewIPOrDomain(dest.Address), "google.com": net.NewIPOrDomain(dest.Address),
}, },
}), }),
serial.ToTypedMessage(&router.Config{ serial.ToTypedMessage(&router.Config{
@ -54,15 +54,15 @@ func TestResolveIP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{ ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{
AuthType: socks.AuthType_NO_AUTH, AuthType: socks.AuthType_NO_AUTH,
Accounts: map[string]string{ Accounts: map[string]string{
"Test Account": "Test Password", "Test Account": "Test Password",
}, },
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
UdpEnabled: false, UdpEnabled: false,
}), }),
}, },
@ -84,7 +84,7 @@ func TestResolveIP(t *testing.T) {
assert.Error(err).IsNil() assert.Error(err).IsNil()
{ {
noAuthDialer, err := xproxy.SOCKS5("tcp", v2net.TCPDestination(v2net.LocalHostIP, serverPort).NetAddr(), nil, xproxy.Direct) noAuthDialer, err := xproxy.SOCKS5("tcp", net.TCPDestination(net.LocalHostIP, serverPort).NetAddr(), nil, xproxy.Direct)
assert.Error(err).IsNil() assert.Error(err).IsNil()
conn, err := noAuthDialer.Dial("tcp", fmt.Sprintf("google.com:%d", dest.Port)) conn, err := noAuthDialer.Dial("tcp", fmt.Sprintf("google.com:%d", dest.Port))
assert.Error(err).IsNil() assert.Error(err).IsNil()

View File

@ -1,13 +1,12 @@
package scenarios package scenarios
import ( import (
"net"
"testing" "testing"
"v2ray.com/core" "v2ray.com/core"
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/common/uuid" "v2ray.com/core/common/uuid"
@ -37,8 +36,8 @@ func TestDokodemoTCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -70,14 +69,14 @@ func TestDokodemoTCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: &v2net.PortRange{From: clientPort, To: clientPort + clientPortRange}, PortRange: &net.PortRange{From: clientPort, To: clientPort + clientPortRange},
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -87,7 +86,7 @@ func TestDokodemoTCP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -150,8 +149,8 @@ func TestDokodemoUDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -177,14 +176,14 @@ func TestDokodemoUDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: &v2net.PortRange{From: clientPort, To: clientPort + clientPortRange}, PortRange: &net.PortRange{From: clientPort, To: clientPort + clientPortRange},
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_UDP}, Network: []net.Network{net.Network_UDP},
}, },
}), }),
}, },
@ -194,7 +193,7 @@ func TestDokodemoUDP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {

View File

@ -2,7 +2,6 @@ package scenarios
import ( import (
"io/ioutil" "io/ioutil"
"net"
"net/http" "net/http"
"net/url" "net/url"
"testing" "testing"
@ -13,7 +12,7 @@ import (
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
"v2ray.com/core/app/router" "v2ray.com/core/app/router"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/common/uuid" "v2ray.com/core/common/uuid"
@ -47,14 +46,14 @@ func TestPassiveConnection(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -118,8 +117,8 @@ func TestProxy(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -145,8 +144,8 @@ func TestProxy(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(proxyPort), PortRange: net.SinglePortRange(proxyPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -171,14 +170,14 @@ func TestProxy(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -188,7 +187,7 @@ func TestProxy(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -211,7 +210,7 @@ func TestProxy(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(proxyPort), Port: uint32(proxyPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -266,8 +265,8 @@ func TestProxyOverKCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
StreamSettings: &internet.StreamConfig{ StreamSettings: &internet.StreamConfig{
Protocol: internet.TransportProtocol_MKCP, Protocol: internet.TransportProtocol_MKCP,
}, },
@ -296,8 +295,8 @@ func TestProxyOverKCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(proxyPort), PortRange: net.SinglePortRange(proxyPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -327,14 +326,14 @@ func TestProxyOverKCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -344,7 +343,7 @@ func TestProxyOverKCP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -370,7 +369,7 @@ func TestProxyOverKCP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(proxyPort), Port: uint32(proxyPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -432,27 +431,27 @@ func TestBlackhole(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort2), PortRange: net.SinglePortRange(serverPort2),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest2.Address), Address: net.NewIPOrDomain(dest2.Address),
Port: uint32(dest2.Port), Port: uint32(dest2.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -472,7 +471,7 @@ func TestBlackhole(t *testing.T) {
Rule: []*router.RoutingRule{ Rule: []*router.RoutingRule{
{ {
Tag: "blocked", Tag: "blocked",
PortRange: v2net.SinglePortRange(dest2.Port), PortRange: net.SinglePortRange(dest2.Port),
}, },
}, },
}), }),
@ -522,15 +521,15 @@ func TestForward(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{ ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{
AuthType: socks.AuthType_NO_AUTH, AuthType: socks.AuthType_NO_AUTH,
Accounts: map[string]string{ Accounts: map[string]string{
"Test Account": "Test Password", "Test Account": "Test Password",
}, },
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
UdpEnabled: false, UdpEnabled: false,
}), }),
}, },
@ -540,7 +539,7 @@ func TestForward(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&freedom.Config{ ProxySettings: serial.ToTypedMessage(&freedom.Config{
DestinationOverride: &freedom.DestinationOverride{ DestinationOverride: &freedom.DestinationOverride{
Server: &protocol.ServerEndpoint{ Server: &protocol.ServerEndpoint{
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(dest.Port), Port: uint32(dest.Port),
}, },
}, },
@ -553,7 +552,7 @@ func TestForward(t *testing.T) {
assert.Error(err).IsNil() assert.Error(err).IsNil()
{ {
noAuthDialer, err := xproxy.SOCKS5("tcp", v2net.TCPDestination(v2net.LocalHostIP, serverPort).NetAddr(), nil, xproxy.Direct) noAuthDialer, err := xproxy.SOCKS5("tcp", net.TCPDestination(net.LocalHostIP, serverPort).NetAddr(), nil, xproxy.Direct)
assert.Error(err).IsNil() assert.Error(err).IsNil()
conn, err := noAuthDialer.Dial("tcp", "google.com:80") conn, err := noAuthDialer.Dial("tcp", "google.com:80")
assert.Error(err).IsNil() assert.Error(err).IsNil()
@ -588,14 +587,14 @@ func TestUDPConnection(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_UDP}, Network: []net.Network{net.Network_UDP},
}, },
}), }),
}, },
@ -666,25 +665,25 @@ func TestDomainSniffing(t *testing.T) {
{ {
Tag: "snif", Tag: "snif",
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(sniffingPort), PortRange: net.SinglePortRange(sniffingPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
DomainOverride: []proxyman.KnownProtocols{ DomainOverride: []proxyman.KnownProtocols{
proxyman.KnownProtocols_TLS, proxyman.KnownProtocols_TLS,
}, },
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: 443, Port: 443,
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
{ {
Tag: "http", Tag: "http",
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(httpPort), PortRange: net.SinglePortRange(httpPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&v2http.ServerConfig{}), ProxySettings: serial.ToTypedMessage(&v2http.ServerConfig{}),
}, },
@ -695,7 +694,7 @@ func TestDomainSniffing(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&freedom.Config{ ProxySettings: serial.ToTypedMessage(&freedom.Config{
DestinationOverride: &freedom.DestinationOverride{ DestinationOverride: &freedom.DestinationOverride{
Server: &protocol.ServerEndpoint{ Server: &protocol.ServerEndpoint{
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(sniffingPort), Port: uint32(sniffingPort),
}, },
}, },

View File

@ -8,7 +8,7 @@ import (
"v2ray.com/core" "v2ray.com/core"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/proxy/freedom" "v2ray.com/core/proxy/freedom"
v2http "v2ray.com/core/proxy/http" v2http "v2ray.com/core/proxy/http"
@ -33,8 +33,8 @@ func TestHttpConformance(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&v2http.ServerConfig{}), ProxySettings: serial.ToTypedMessage(&v2http.ServerConfig{}),
}, },

View File

@ -2,7 +2,6 @@ package scenarios
import ( import (
"crypto/rand" "crypto/rand"
"net"
"sync" "sync"
"testing" "testing"
"time" "time"
@ -10,7 +9,7 @@ import (
"v2ray.com/core" "v2ray.com/core"
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/proxy/dokodemo" "v2ray.com/core/proxy/dokodemo"
@ -42,8 +41,8 @@ func TestShadowsocksAES256TCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&shadowsocks.ServerConfig{ ProxySettings: serial.ToTypedMessage(&shadowsocks.ServerConfig{
User: &protocol.User{ User: &protocol.User{
@ -71,14 +70,14 @@ func TestShadowsocksAES256TCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -88,7 +87,7 @@ func TestShadowsocksAES256TCP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&shadowsocks.ClientConfig{ ProxySettings: serial.ToTypedMessage(&shadowsocks.ClientConfig{
Server: []*protocol.ServerEndpoint{ Server: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -160,8 +159,8 @@ func TestShadowsocksAES128UDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&shadowsocks.ServerConfig{ ProxySettings: serial.ToTypedMessage(&shadowsocks.ServerConfig{
UdpEnabled: true, UdpEnabled: true,
@ -190,14 +189,14 @@ func TestShadowsocksAES128UDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_UDP}, Network: []net.Network{net.Network_UDP},
}, },
}), }),
}, },
@ -207,7 +206,7 @@ func TestShadowsocksAES128UDP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&shadowsocks.ClientConfig{ ProxySettings: serial.ToTypedMessage(&shadowsocks.ClientConfig{
Server: []*protocol.ServerEndpoint{ Server: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -279,8 +278,8 @@ func TestShadowsocksChacha20TCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&shadowsocks.ServerConfig{ ProxySettings: serial.ToTypedMessage(&shadowsocks.ServerConfig{
User: &protocol.User{ User: &protocol.User{
@ -308,14 +307,14 @@ func TestShadowsocksChacha20TCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -325,7 +324,7 @@ func TestShadowsocksChacha20TCP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&shadowsocks.ClientConfig{ ProxySettings: serial.ToTypedMessage(&shadowsocks.ClientConfig{
Server: []*protocol.ServerEndpoint{ Server: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {

View File

@ -1,14 +1,13 @@
package scenarios package scenarios
import ( import (
"net"
"testing" "testing"
xproxy "golang.org/x/net/proxy" xproxy "golang.org/x/net/proxy"
socks4 "h12.me/socks" socks4 "h12.me/socks"
"v2ray.com/core" "v2ray.com/core"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/proxy/dokodemo" "v2ray.com/core/proxy/dokodemo"
@ -34,15 +33,15 @@ func TestSocksBridgeTCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{ ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{
AuthType: socks.AuthType_PASSWORD, AuthType: socks.AuthType_PASSWORD,
Accounts: map[string]string{ Accounts: map[string]string{
"Test Account": "Test Password", "Test Account": "Test Password",
}, },
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
UdpEnabled: false, UdpEnabled: false,
}), }),
}, },
@ -59,14 +58,14 @@ func TestSocksBridgeTCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -76,7 +75,7 @@ func TestSocksBridgeTCP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&socks.ClientConfig{ ProxySettings: serial.ToTypedMessage(&socks.ClientConfig{
Server: []*protocol.ServerEndpoint{ Server: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -131,15 +130,15 @@ func TestSocksBridageUDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{ ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{
AuthType: socks.AuthType_PASSWORD, AuthType: socks.AuthType_PASSWORD,
Accounts: map[string]string{ Accounts: map[string]string{
"Test Account": "Test Password", "Test Account": "Test Password",
}, },
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
UdpEnabled: true, UdpEnabled: true,
}), }),
}, },
@ -156,14 +155,14 @@ func TestSocksBridageUDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP, v2net.Network_UDP}, Network: []net.Network{net.Network_TCP, net.Network_UDP},
}, },
}), }),
}, },
@ -173,7 +172,7 @@ func TestSocksBridageUDP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&socks.ClientConfig{ ProxySettings: serial.ToTypedMessage(&socks.ClientConfig{
Server: []*protocol.ServerEndpoint{ Server: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -229,29 +228,29 @@ func TestSocksConformance(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(authPort), PortRange: net.SinglePortRange(authPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{ ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{
AuthType: socks.AuthType_PASSWORD, AuthType: socks.AuthType_PASSWORD,
Accounts: map[string]string{ Accounts: map[string]string{
"Test Account": "Test Password", "Test Account": "Test Password",
}, },
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
UdpEnabled: false, UdpEnabled: false,
}), }),
}, },
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(noAuthPort), PortRange: net.SinglePortRange(noAuthPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{ ProxySettings: serial.ToTypedMessage(&socks.ServerConfig{
AuthType: socks.AuthType_NO_AUTH, AuthType: socks.AuthType_NO_AUTH,
Accounts: map[string]string{ Accounts: map[string]string{
"Test Account": "Test Password", "Test Account": "Test Password",
}, },
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
UdpEnabled: false, UdpEnabled: false,
}), }),
}, },
@ -267,7 +266,7 @@ func TestSocksConformance(t *testing.T) {
assert.Error(err).IsNil() assert.Error(err).IsNil()
{ {
noAuthDialer, err := xproxy.SOCKS5("tcp", v2net.TCPDestination(v2net.LocalHostIP, noAuthPort).NetAddr(), nil, xproxy.Direct) noAuthDialer, err := xproxy.SOCKS5("tcp", net.TCPDestination(net.LocalHostIP, noAuthPort).NetAddr(), nil, xproxy.Direct)
assert.Error(err).IsNil() assert.Error(err).IsNil()
conn, err := noAuthDialer.Dial("tcp", dest.NetAddr()) conn, err := noAuthDialer.Dial("tcp", dest.NetAddr())
assert.Error(err).IsNil() assert.Error(err).IsNil()
@ -285,7 +284,7 @@ func TestSocksConformance(t *testing.T) {
} }
{ {
authDialer, err := xproxy.SOCKS5("tcp", v2net.TCPDestination(v2net.LocalHostIP, authPort).NetAddr(), &xproxy.Auth{User: "Test Account", Password: "Test Password"}, xproxy.Direct) authDialer, err := xproxy.SOCKS5("tcp", net.TCPDestination(net.LocalHostIP, authPort).NetAddr(), &xproxy.Auth{User: "Test Account", Password: "Test Password"}, xproxy.Direct)
assert.Error(err).IsNil() assert.Error(err).IsNil()
conn, err := authDialer.Dial("tcp", dest.NetAddr()) conn, err := authDialer.Dial("tcp", dest.NetAddr())
assert.Error(err).IsNil() assert.Error(err).IsNil()
@ -303,7 +302,7 @@ func TestSocksConformance(t *testing.T) {
} }
{ {
dialer := socks4.DialSocksProxy(socks4.SOCKS4, v2net.TCPDestination(v2net.LocalHostIP, noAuthPort).NetAddr()) dialer := socks4.DialSocksProxy(socks4.SOCKS4, net.TCPDestination(net.LocalHostIP, noAuthPort).NetAddr())
conn, err := dialer("tcp", dest.NetAddr()) conn, err := dialer("tcp", dest.NetAddr())
assert.Error(err).IsNil() assert.Error(err).IsNil()
@ -320,8 +319,8 @@ func TestSocksConformance(t *testing.T) {
} }
{ {
dialer := socks4.DialSocksProxy(socks4.SOCKS4A, v2net.TCPDestination(v2net.LocalHostIP, noAuthPort).NetAddr()) dialer := socks4.DialSocksProxy(socks4.SOCKS4A, net.TCPDestination(net.LocalHostIP, noAuthPort).NetAddr())
conn, err := dialer("tcp", v2net.TCPDestination(v2net.LocalHostDomain, tcpServer.Port).NetAddr()) conn, err := dialer("tcp", net.TCPDestination(net.LocalHostDomain, tcpServer.Port).NetAddr())
assert.Error(err).IsNil() assert.Error(err).IsNil()
payload := "test payload" payload := "test payload"

View File

@ -2,13 +2,12 @@ package scenarios
import ( import (
"crypto/rand" "crypto/rand"
"net"
"testing" "testing"
"time" "time"
"v2ray.com/core" "v2ray.com/core"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/common/uuid" "v2ray.com/core/common/uuid"
@ -41,8 +40,8 @@ func TestSimpleTLSConnection(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
StreamSettings: &internet.StreamConfig{ StreamSettings: &internet.StreamConfig{
SecurityType: serial.GetMessageType(&tls.Config{}), SecurityType: serial.GetMessageType(&tls.Config{}),
SecuritySettings: []*serial.TypedMessage{ SecuritySettings: []*serial.TypedMessage{
@ -75,14 +74,14 @@ func TestSimpleTLSConnection(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -92,7 +91,7 @@ func TestSimpleTLSConnection(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -155,8 +154,8 @@ func TestTLSOverKCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
StreamSettings: &internet.StreamConfig{ StreamSettings: &internet.StreamConfig{
Protocol: internet.TransportProtocol_MKCP, Protocol: internet.TransportProtocol_MKCP,
SecurityType: serial.GetMessageType(&tls.Config{}), SecurityType: serial.GetMessageType(&tls.Config{}),
@ -190,14 +189,14 @@ func TestTLSOverKCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -207,7 +206,7 @@ func TestTLSOverKCP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -271,8 +270,8 @@ func TestTLSOverWebSocket(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
StreamSettings: &internet.StreamConfig{ StreamSettings: &internet.StreamConfig{
Protocol: internet.TransportProtocol_WebSocket, Protocol: internet.TransportProtocol_WebSocket,
SecurityType: serial.GetMessageType(&tls.Config{}), SecurityType: serial.GetMessageType(&tls.Config{}),
@ -306,14 +305,14 @@ func TestTLSOverWebSocket(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -323,7 +322,7 @@ func TestTLSOverWebSocket(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {

View File

@ -1,13 +1,12 @@
package scenarios package scenarios
import ( import (
"net"
"testing" "testing"
"time" "time"
"v2ray.com/core" "v2ray.com/core"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/common/uuid" "v2ray.com/core/common/uuid"
@ -39,8 +38,8 @@ func TestHttpConnectionHeader(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
StreamSettings: &internet.StreamConfig{ StreamSettings: &internet.StreamConfig{
TransportSettings: []*internet.TransportConfig{ TransportSettings: []*internet.TransportConfig{
{ {
@ -75,14 +74,14 @@ func TestHttpConnectionHeader(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -92,7 +91,7 @@ func TestHttpConnectionHeader(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {

View File

@ -2,7 +2,6 @@ package scenarios
import ( import (
"crypto/rand" "crypto/rand"
"net"
"sync" "sync"
"testing" "testing"
"time" "time"
@ -10,7 +9,7 @@ import (
"v2ray.com/core" "v2ray.com/core"
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/app/proxyman" "v2ray.com/core/app/proxyman"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/common/uuid" "v2ray.com/core/common/uuid"
@ -41,8 +40,8 @@ func TestVMessDynamicPort(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -59,11 +58,11 @@ func TestVMessDynamicPort(t *testing.T) {
}, },
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: &v2net.PortRange{ PortRange: &net.PortRange{
From: uint32(serverPort + 1), From: uint32(serverPort + 1),
To: uint32(serverPort + 100), To: uint32(serverPort + 100),
}, },
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
AllocationStrategy: &proxyman.AllocationStrategy{ AllocationStrategy: &proxyman.AllocationStrategy{
Type: proxyman.AllocationStrategy_Random, Type: proxyman.AllocationStrategy_Random,
Concurrency: &proxyman.AllocationStrategy_AllocationStrategyConcurrency{ Concurrency: &proxyman.AllocationStrategy_AllocationStrategyConcurrency{
@ -96,14 +95,14 @@ func TestVMessDynamicPort(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -113,7 +112,7 @@ func TestVMessDynamicPort(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -176,8 +175,8 @@ func TestVMessGCM(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -209,14 +208,14 @@ func TestVMessGCM(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -226,7 +225,7 @@ func TestVMessGCM(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -299,8 +298,8 @@ func TestVMessGCMUDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -332,14 +331,14 @@ func TestVMessGCMUDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_UDP}, Network: []net.Network{net.Network_UDP},
}, },
}), }),
}, },
@ -349,7 +348,7 @@ func TestVMessGCMUDP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -432,8 +431,8 @@ func TestVMessChacha20(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -465,14 +464,14 @@ func TestVMessChacha20(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -482,7 +481,7 @@ func TestVMessChacha20(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -555,8 +554,8 @@ func TestVMessNone(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -588,14 +587,14 @@ func TestVMessNone(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -605,7 +604,7 @@ func TestVMessNone(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -678,8 +677,8 @@ func TestVMessKCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
StreamSettings: &internet.StreamConfig{ StreamSettings: &internet.StreamConfig{
Protocol: internet.TransportProtocol_MKCP, Protocol: internet.TransportProtocol_MKCP,
}, },
@ -714,14 +713,14 @@ func TestVMessKCP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -731,7 +730,7 @@ func TestVMessKCP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -799,7 +798,7 @@ func TestVMessIPv6(t *testing.T) {
tcpServer := tcp.Server{ tcpServer := tcp.Server{
MsgProcessor: xor, MsgProcessor: xor,
Listen: v2net.LocalHostIPv6, Listen: net.LocalHostIPv6,
} }
dest, err := tcpServer.Start() dest, err := tcpServer.Start()
assert.Error(err).IsNil() assert.Error(err).IsNil()
@ -811,8 +810,8 @@ func TestVMessIPv6(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIPv6), Listen: net.NewIPOrDomain(net.LocalHostIPv6),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -844,14 +843,14 @@ func TestVMessIPv6(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIPv6), Listen: net.NewIPOrDomain(net.LocalHostIPv6),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -861,7 +860,7 @@ func TestVMessIPv6(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIPv6), Address: net.NewIPOrDomain(net.LocalHostIPv6),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -891,7 +890,7 @@ func TestVMessIPv6(t *testing.T) {
assert.Error(err).IsNil() assert.Error(err).IsNil()
conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{
IP: v2net.LocalHostIPv6.IP(), IP: net.LocalHostIPv6.IP(),
Port: int(clientPort), Port: int(clientPort),
}) })
assert.Error(err).IsNil() assert.Error(err).IsNil()
@ -926,8 +925,8 @@ func TestVMessGCMMux(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -959,14 +958,14 @@ func TestVMessGCMMux(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
@ -982,7 +981,7 @@ func TestVMessGCMMux(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {
@ -1068,8 +1067,8 @@ func TestVMessGCMMuxUDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(serverPort), PortRange: net.SinglePortRange(serverPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&inbound.Config{ ProxySettings: serial.ToTypedMessage(&inbound.Config{
User: []*protocol.User{ User: []*protocol.User{
@ -1102,27 +1101,27 @@ func TestVMessGCMMuxUDP(t *testing.T) {
Inbound: []*proxyman.InboundHandlerConfig{ Inbound: []*proxyman.InboundHandlerConfig{
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientPort), PortRange: net.SinglePortRange(clientPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(dest.Address), Address: net.NewIPOrDomain(dest.Address),
Port: uint32(dest.Port), Port: uint32(dest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_TCP}, Network: []net.Network{net.Network_TCP},
}, },
}), }),
}, },
{ {
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
PortRange: v2net.SinglePortRange(clientUDPPort), PortRange: net.SinglePortRange(clientUDPPort),
Listen: v2net.NewIPOrDomain(v2net.LocalHostIP), Listen: net.NewIPOrDomain(net.LocalHostIP),
}), }),
ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
Address: v2net.NewIPOrDomain(udpDest.Address), Address: net.NewIPOrDomain(udpDest.Address),
Port: uint32(udpDest.Port), Port: uint32(udpDest.Port),
NetworkList: &v2net.NetworkList{ NetworkList: &net.NetworkList{
Network: []v2net.Network{v2net.Network_UDP}, Network: []net.Network{net.Network_UDP},
}, },
}), }),
}, },
@ -1138,7 +1137,7 @@ func TestVMessGCMMuxUDP(t *testing.T) {
ProxySettings: serial.ToTypedMessage(&outbound.Config{ ProxySettings: serial.ToTypedMessage(&outbound.Config{
Receiver: []*protocol.ServerEndpoint{ Receiver: []*protocol.ServerEndpoint{
{ {
Address: v2net.NewIPOrDomain(v2net.LocalHostIP), Address: net.NewIPOrDomain(net.LocalHostIP),
Port: uint32(serverPort), Port: uint32(serverPort),
User: []*protocol.User{ User: []*protocol.User{
{ {

View File

@ -3,11 +3,11 @@ package tcp
import ( import (
"net/http" "net/http"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
) )
type Server struct { type Server struct {
Port v2net.Port Port net.Port
PathHandler map[string]http.HandlerFunc PathHandler map[string]http.HandlerFunc
accepting bool accepting bool
} }
@ -26,9 +26,9 @@ func (server *Server) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
} }
} }
func (server *Server) Start() (v2net.Destination, error) { func (server *Server) Start() (net.Destination, error) {
go http.ListenAndServe("127.0.0.1:"+server.Port.String(), server) go http.ListenAndServe("127.0.0.1:"+server.Port.String(), server)
return v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(server.Port)), nil return net.TCPDestination(net.LocalHostIP, net.Port(server.Port)), nil
} }
func (v *Server) Close() { func (v *Server) Close() {

View File

@ -30,10 +30,10 @@ func (server *Server) Start() (v2net.Destination, error) {
if err != nil { if err != nil {
return v2net.Destination{}, err return v2net.Destination{}, err
} }
server.Port = v2net.Port(listener.Addr().(*net.TCPAddr).Port) server.Port = v2net.Port(listener.Addr().(*v2net.TCPAddr).Port)
server.listener = listener server.listener = listener
go server.acceptConnections(listener) go server.acceptConnections(listener)
localAddr := listener.Addr().(*net.TCPAddr) localAddr := listener.Addr().(*v2net.TCPAddr)
return v2net.TCPDestination(v2net.IPAddress(localAddr.IP), v2net.Port(localAddr.Port)), nil return v2net.TCPDestination(v2net.IPAddress(localAddr.IP), v2net.Port(localAddr.Port)), nil
} }

View File

@ -2,32 +2,31 @@ package udp
import ( import (
"fmt" "fmt"
"net"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
) )
type Server struct { type Server struct {
Port v2net.Port Port net.Port
MsgProcessor func(msg []byte) []byte MsgProcessor func(msg []byte) []byte
accepting bool accepting bool
conn *net.UDPConn conn *net.UDPConn
} }
func (server *Server) Start() (v2net.Destination, error) { func (server *Server) Start() (net.Destination, error) {
conn, err := net.ListenUDP("udp", &net.UDPAddr{ conn, err := net.ListenUDP("udp", &net.UDPAddr{
IP: []byte{127, 0, 0, 1}, IP: []byte{127, 0, 0, 1},
Port: int(server.Port), Port: int(server.Port),
Zone: "", Zone: "",
}) })
if err != nil { if err != nil {
return v2net.Destination{}, err return net.Destination{}, err
} }
server.Port = v2net.Port(conn.LocalAddr().(*net.UDPAddr).Port) server.Port = net.Port(conn.LocalAddr().(*net.UDPAddr).Port)
server.conn = conn server.conn = conn
go server.handleConnection(conn) go server.handleConnection(conn)
localAddr := conn.LocalAddr().(*net.UDPAddr) localAddr := conn.LocalAddr().(*net.UDPAddr)
return v2net.UDPDestination(v2net.IPAddress(localAddr.IP), v2net.Port(localAddr.Port)), nil return net.UDPDestination(net.IPAddress(localAddr.IP), net.Port(localAddr.Port)), nil
} }
func (server *Server) handleConnection(conn *net.UDPConn) { func (server *Server) handleConnection(conn *net.UDPConn) {

View File

@ -2,12 +2,11 @@ package internet
import ( import (
"context" "context"
"net"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
) )
type Dialer func(ctx context.Context, dest v2net.Destination) (Connection, error) type Dialer func(ctx context.Context, dest net.Destination) (Connection, error)
var ( var (
transportDialerCache = make(map[TransportProtocol]Dialer) transportDialerCache = make(map[TransportProtocol]Dialer)
@ -21,8 +20,8 @@ func RegisterTransportDialer(protocol TransportProtocol, dialer Dialer) error {
return nil return nil
} }
func Dial(ctx context.Context, dest v2net.Destination) (Connection, error) { func Dial(ctx context.Context, dest net.Destination) (Connection, error) {
if dest.Network == v2net.Network_TCP { if dest.Network == net.Network_TCP {
streamSettings := StreamSettingsFromContext(ctx) streamSettings := StreamSettingsFromContext(ctx)
protocol := streamSettings.GetEffectiveProtocol() protocol := streamSettings.GetEffectiveProtocol()
transportSettings, err := streamSettings.GetEffectiveTransportSettings() transportSettings, err := streamSettings.GetEffectiveTransportSettings()
@ -52,6 +51,6 @@ func Dial(ctx context.Context, dest v2net.Destination) (Connection, error) {
} }
// DialSystem calls system dialer to create a network connection. // DialSystem calls system dialer to create a network connection.
func DialSystem(ctx context.Context, src v2net.Address, dest v2net.Destination) (net.Conn, error) { func DialSystem(ctx context.Context, src net.Address, dest net.Destination) (net.Conn, error) {
return effectiveSystemDialer.Dial(ctx, src, dest) return effectiveSystemDialer.Dial(ctx, src, dest)
} }

View File

@ -2,11 +2,11 @@ package http_test
import ( import (
"context" "context"
"net"
"testing" "testing"
"time" "time"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
"v2ray.com/core/common/net"
"v2ray.com/core/common/serial" "v2ray.com/core/common/serial"
"v2ray.com/core/testing/assert" "v2ray.com/core/testing/assert"
. "v2ray.com/core/transport/internet/headers/http" . "v2ray.com/core/transport/internet/headers/http"

View File

@ -4,7 +4,6 @@ import (
"context" "context"
"crypto/cipher" "crypto/cipher"
"crypto/tls" "crypto/tls"
"net"
"sync" "sync"
"sync/atomic" "sync/atomic"
@ -12,7 +11,7 @@ import (
"v2ray.com/core/common" "v2ray.com/core/common"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
"v2ray.com/core/common/dice" "v2ray.com/core/common/dice"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
v2tls "v2ray.com/core/transport/internet/tls" v2tls "v2ray.com/core/transport/internet/tls"
) )
@ -102,8 +101,8 @@ func (c *ClientConnection) Run() {
} }
} }
func DialKCP(ctx context.Context, dest v2net.Destination) (internet.Connection, error) { func DialKCP(ctx context.Context, dest net.Destination) (internet.Connection, error) {
dest.Network = v2net.Network_UDP dest.Network = net.Network_UDP
log.Trace(newError("dialing mKCP to ", dest)) log.Trace(newError("dialing mKCP to ", dest))
src := internet.DialerSourceFromContext(ctx) src := internet.DialerSourceFromContext(ctx)

View File

@ -4,12 +4,11 @@ import (
"context" "context"
"crypto/rand" "crypto/rand"
"io" "io"
"net"
"sync" "sync"
"testing" "testing"
"time" "time"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/testing/assert" "v2ray.com/core/testing/assert"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
. "v2ray.com/core/transport/internet/kcp" . "v2ray.com/core/transport/internet/kcp"
@ -18,7 +17,7 @@ import (
func TestDialAndListen(t *testing.T) { func TestDialAndListen(t *testing.T) {
assert := assert.On(t) assert := assert.On(t)
listerner, err := NewListener(internet.ContextWithTransportSettings(context.Background(), &Config{}), v2net.LocalHostIP, v2net.Port(0), func(ctx context.Context, conn internet.Connection) bool { listerner, err := NewListener(internet.ContextWithTransportSettings(context.Background(), &Config{}), net.LocalHostIP, net.Port(0), func(ctx context.Context, conn internet.Connection) bool {
go func(c internet.Connection) { go func(c internet.Connection) {
payload := make([]byte, 4096) payload := make([]byte, 4096)
for { for {
@ -36,12 +35,12 @@ func TestDialAndListen(t *testing.T) {
return true return true
}) })
assert.Error(err).IsNil() assert.Error(err).IsNil()
port := v2net.Port(listerner.Addr().(*net.UDPAddr).Port) port := net.Port(listerner.Addr().(*net.UDPAddr).Port)
ctx := internet.ContextWithTransportSettings(context.Background(), &Config{}) ctx := internet.ContextWithTransportSettings(context.Background(), &Config{})
wg := new(sync.WaitGroup) wg := new(sync.WaitGroup)
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
clientConn, err := DialKCP(ctx, v2net.UDPDestination(v2net.LocalHostIP, port)) clientConn, err := DialKCP(ctx, net.UDPDestination(net.LocalHostIP, port))
assert.Error(err).IsNil() assert.Error(err).IsNil()
wg.Add(1) wg.Add(1)

View File

@ -5,22 +5,21 @@ import (
"crypto/cipher" "crypto/cipher"
"crypto/tls" "crypto/tls"
"io" "io"
"net"
"sync" "sync"
"time" "time"
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/common" "v2ray.com/core/common"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
v2tls "v2ray.com/core/transport/internet/tls" v2tls "v2ray.com/core/transport/internet/tls"
"v2ray.com/core/transport/internet/udp" "v2ray.com/core/transport/internet/udp"
) )
type ConnectionID struct { type ConnectionID struct {
Remote v2net.Address Remote net.Address
Port v2net.Port Port net.Port
Conv uint16 Conv uint16
} }
@ -84,7 +83,7 @@ type Listener struct {
addConn internet.AddConnection addConn internet.AddConnection
} }
func NewListener(ctx context.Context, address v2net.Address, port v2net.Port, addConn internet.AddConnection) (*Listener, error) { func NewListener(ctx context.Context, address net.Address, port net.Port, addConn internet.AddConnection) (*Listener, error) {
networkSettings := internet.TransportSettingsFromContext(ctx) networkSettings := internet.TransportSettingsFromContext(ctx)
kcpSettings := networkSettings.(*Config) kcpSettings := networkSettings.(*Config)
@ -126,7 +125,7 @@ func NewListener(ctx context.Context, address v2net.Address, port v2net.Port, ad
return l, nil return l, nil
} }
func (v *Listener) OnReceive(payload *buf.Buffer, src v2net.Destination, originalDest v2net.Destination) { func (v *Listener) OnReceive(payload *buf.Buffer, src net.Destination, originalDest net.Destination) {
defer payload.Release() defer payload.Release()
segments := v.reader.Read(payload.Bytes()) segments := v.reader.Read(payload.Bytes())
@ -237,7 +236,7 @@ func (v *Listener) Addr() net.Addr {
type Writer struct { type Writer struct {
id ConnectionID id ConnectionID
dest v2net.Destination dest net.Destination
hub *udp.Hub hub *udp.Hub
listener *Listener listener *Listener
} }
@ -251,7 +250,7 @@ func (v *Writer) Close() error {
return nil return nil
} }
func ListenKCP(ctx context.Context, address v2net.Address, port v2net.Port, addConn internet.AddConnection) (internet.Listener, error) { func ListenKCP(ctx context.Context, address net.Address, port net.Port, addConn internet.AddConnection) (internet.Listener, error) {
return NewListener(ctx, address, port, addConn) return NewListener(ctx, address, port, addConn)
} }

View File

@ -2,10 +2,9 @@ package internet
import ( import (
"context" "context"
"net"
"time" "time"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
) )
var ( var (
@ -13,20 +12,20 @@ var (
) )
type SystemDialer interface { type SystemDialer interface {
Dial(ctx context.Context, source v2net.Address, destination v2net.Destination) (net.Conn, error) Dial(ctx context.Context, source net.Address, destination net.Destination) (net.Conn, error)
} }
type DefaultSystemDialer struct { type DefaultSystemDialer struct {
} }
func (DefaultSystemDialer) Dial(ctx context.Context, src v2net.Address, dest v2net.Destination) (net.Conn, error) { func (DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest net.Destination) (net.Conn, error) {
dialer := &net.Dialer{ dialer := &net.Dialer{
Timeout: time.Second * 60, Timeout: time.Second * 60,
DualStack: true, DualStack: true,
} }
if src != nil && src != v2net.AnyIP { if src != nil && src != net.AnyIP {
var addr net.Addr var addr net.Addr
if dest.Network == v2net.Network_TCP { if dest.Network == net.Network_TCP {
addr = &net.TCPAddr{ addr = &net.TCPAddr{
IP: src.IP(), IP: src.IP(),
Port: 0, Port: 0,
@ -56,7 +55,7 @@ func WithAdapter(dialer SystemDialerAdapter) SystemDialer {
} }
} }
func (v *SimpleSystemDialer) Dial(ctx context.Context, src v2net.Address, dest v2net.Destination) (net.Conn, error) { func (v *SimpleSystemDialer) Dial(ctx context.Context, src net.Address, dest net.Destination) (net.Conn, error) {
return v.adapter.Dial(dest.Network.SystemString(), dest.NetAddr()) return v.adapter.Dial(dest.Network.SystemString(), dest.NetAddr())
} }

View File

@ -5,7 +5,7 @@ import (
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/common" "v2ray.com/core/common"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
"v2ray.com/core/transport/internet/tls" "v2ray.com/core/transport/internet/tls"
) )
@ -18,7 +18,7 @@ func getTCPSettingsFromContext(ctx context.Context) *Config {
return rawTCPSettings.(*Config) return rawTCPSettings.(*Config)
} }
func Dial(ctx context.Context, dest v2net.Destination) (internet.Connection, error) { func Dial(ctx context.Context, dest net.Destination) (internet.Connection, error) {
log.Trace(newError("dailing TCP to ", dest)) log.Trace(newError("dailing TCP to ", dest))
src := internet.DialerSourceFromContext(ctx) src := internet.DialerSourceFromContext(ctx)

View File

@ -23,7 +23,7 @@ type TCPListener struct {
} }
func ListenTCP(ctx context.Context, address v2net.Address, port v2net.Port, addConn internet.AddConnection) (internet.Listener, error) { func ListenTCP(ctx context.Context, address v2net.Address, port v2net.Port, addConn internet.AddConnection) (internet.Listener, error) {
listener, err := net.ListenTCP("tcp", &net.TCPAddr{ listener, err := net.ListenTCP("tcp", &v2net.TCPAddr{
IP: address.IP(), IP: address.IP(),
Port: int(port), Port: int(port),
}) })

View File

@ -2,10 +2,9 @@ package internet
import ( import (
"context" "context"
"net"
"time" "time"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
) )
var ( var (
@ -22,14 +21,14 @@ func RegisterTransportListener(protocol TransportProtocol, listener ListenFunc)
type AddConnection func(context.Context, Connection) bool type AddConnection func(context.Context, Connection) bool
type ListenFunc func(ctx context.Context, address v2net.Address, port v2net.Port, addConn AddConnection) (Listener, error) type ListenFunc func(ctx context.Context, address net.Address, port net.Port, addConn AddConnection) (Listener, error)
type Listener interface { type Listener interface {
Close() error Close() error
Addr() net.Addr Addr() net.Addr
} }
func ListenTCP(ctx context.Context, address v2net.Address, port v2net.Port, conns chan<- Connection) (Listener, error) { func ListenTCP(ctx context.Context, address net.Address, port net.Port, conns chan<- Connection) (Listener, error) {
settings := StreamSettingsFromContext(ctx) settings := StreamSettingsFromContext(ctx)
protocol := settings.GetEffectiveProtocol() protocol := settings.GetEffectiveProtocol()
transportSettings, err := settings.GetEffectiveTransportSettings() transportSettings, err := settings.GetEffectiveTransportSettings()

View File

@ -4,13 +4,13 @@ import (
"context" "context"
"v2ray.com/core/common" "v2ray.com/core/common"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
) )
func init() { func init() {
common.Must(internet.RegisterTransportDialer(internet.TransportProtocol_UDP, common.Must(internet.RegisterTransportDialer(internet.TransportProtocol_UDP,
func(ctx context.Context, dest v2net.Destination) (internet.Connection, error) { func(ctx context.Context, dest net.Destination) (internet.Connection, error) {
src := internet.DialerSourceFromContext(ctx) src := internet.DialerSourceFromContext(ctx)
conn, err := internet.DialSystem(ctx, src, dest) conn, err := internet.DialSystem(ctx, src, dest)
if err != nil { if err != nil {

View File

@ -7,7 +7,7 @@ import (
"v2ray.com/core/app/dispatcher" "v2ray.com/core/app/dispatcher"
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/transport/ray" "v2ray.com/core/transport/ray"
) )
@ -15,18 +15,18 @@ type ResponseCallback func(payload *buf.Buffer)
type Dispatcher struct { type Dispatcher struct {
sync.RWMutex sync.RWMutex
conns map[v2net.Destination]ray.InboundRay conns map[net.Destination]ray.InboundRay
dispatcher dispatcher.Interface dispatcher dispatcher.Interface
} }
func NewDispatcher(dispatcher dispatcher.Interface) *Dispatcher { func NewDispatcher(dispatcher dispatcher.Interface) *Dispatcher {
return &Dispatcher{ return &Dispatcher{
conns: make(map[v2net.Destination]ray.InboundRay), conns: make(map[net.Destination]ray.InboundRay),
dispatcher: dispatcher, dispatcher: dispatcher,
} }
} }
func (v *Dispatcher) RemoveRay(dest v2net.Destination) { func (v *Dispatcher) RemoveRay(dest net.Destination) {
v.Lock() v.Lock()
defer v.Unlock() defer v.Unlock()
if conn, found := v.conns[dest]; found { if conn, found := v.conns[dest]; found {
@ -36,7 +36,7 @@ func (v *Dispatcher) RemoveRay(dest v2net.Destination) {
} }
} }
func (v *Dispatcher) getInboundRay(ctx context.Context, dest v2net.Destination) (ray.InboundRay, bool) { func (v *Dispatcher) getInboundRay(ctx context.Context, dest net.Destination) (ray.InboundRay, bool) {
v.Lock() v.Lock()
defer v.Unlock() defer v.Unlock()
@ -50,7 +50,7 @@ func (v *Dispatcher) getInboundRay(ctx context.Context, dest v2net.Destination)
return inboundRay, false return inboundRay, false
} }
func (v *Dispatcher) Dispatch(ctx context.Context, destination v2net.Destination, payload *buf.Buffer, callback ResponseCallback) { func (v *Dispatcher) Dispatch(ctx context.Context, destination net.Destination, payload *buf.Buffer, callback ResponseCallback) {
// TODO: Add user to destString // TODO: Add user to destString
log.Trace(newError("dispatch request to: ", destination).AtDebug()) log.Trace(newError("dispatch request to: ", destination).AtDebug())

View File

@ -7,17 +7,17 @@ import (
"time" "time"
"v2ray.com/core/common/buf" "v2ray.com/core/common/buf"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/testing/assert" "v2ray.com/core/testing/assert"
. "v2ray.com/core/transport/internet/udp" . "v2ray.com/core/transport/internet/udp"
"v2ray.com/core/transport/ray" "v2ray.com/core/transport/ray"
) )
type TestDispatcher struct { type TestDispatcher struct {
OnDispatch func(ctx context.Context, dest v2net.Destination) (ray.InboundRay, error) OnDispatch func(ctx context.Context, dest net.Destination) (ray.InboundRay, error)
} }
func (d *TestDispatcher) Dispatch(ctx context.Context, dest v2net.Destination) (ray.InboundRay, error) { func (d *TestDispatcher) Dispatch(ctx context.Context, dest net.Destination) (ray.InboundRay, error) {
return d.OnDispatch(ctx, dest) return d.OnDispatch(ctx, dest)
} }
@ -39,12 +39,12 @@ func TestSameDestinationDispatching(t *testing.T) {
var count uint32 var count uint32
td := &TestDispatcher{ td := &TestDispatcher{
OnDispatch: func(ctx context.Context, dest v2net.Destination) (ray.InboundRay, error) { OnDispatch: func(ctx context.Context, dest net.Destination) (ray.InboundRay, error) {
atomic.AddUint32(&count, 1) atomic.AddUint32(&count, 1)
return link, nil return link, nil
}, },
} }
dest := v2net.UDPDestination(v2net.LocalHostIP, 53) dest := net.UDPDestination(net.LocalHostIP, 53)
b := buf.New() b := buf.New()
b.AppendBytes('a', 'b', 'c', 'd') b.AppendBytes('a', 'b', 'c', 'd')

View File

@ -3,7 +3,6 @@
package udp package udp
import ( import (
"net"
"syscall" "syscall"
v2net "v2ray.com/core/common/net" v2net "v2ray.com/core/common/net"
@ -38,6 +37,6 @@ func RetrieveOriginalDest(oob []byte) v2net.Destination {
return v2net.Destination{} return v2net.Destination{}
} }
func ReadUDPMsg(conn *net.UDPConn, payload []byte, oob []byte) (int, int, int, *net.UDPAddr, error) { func ReadUDPMsg(conn *v2net.UDPConn, payload []byte, oob []byte) (int, int, int, *v2net.UDPAddr, error) {
return conn.ReadMsgUDP(payload, oob) return conn.ReadMsgUDP(payload, oob)
} }

View File

@ -3,17 +3,15 @@
package udp package udp
import ( import (
"net" "v2ray.com/core/common/net"
v2net "v2ray.com/core/common/net"
) )
func SetOriginalDestOptions(fd int) error { func SetOriginalDestOptions(fd int) error {
return nil return nil
} }
func RetrieveOriginalDest(oob []byte) v2net.Destination { func RetrieveOriginalDest(oob []byte) net.Destination {
return v2net.Destination{} return net.Destination{}
} }
func ReadUDPMsg(conn *net.UDPConn, payload []byte, oob []byte) (int, int, int, *net.UDPAddr, error) { func ReadUDPMsg(conn *net.UDPConn, payload []byte, oob []byte) (int, int, int, *net.UDPAddr, error) {

View File

@ -2,18 +2,17 @@ package websocket
import ( import (
"context" "context"
"net"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/common" "v2ray.com/core/common"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
"v2ray.com/core/transport/internet/tls" "v2ray.com/core/transport/internet/tls"
) )
// Dial dials a WebSocket connection to the given destination. // Dial dials a WebSocket connection to the given destination.
func Dial(ctx context.Context, dest v2net.Destination) (internet.Connection, error) { func Dial(ctx context.Context, dest net.Destination) (internet.Connection, error) {
log.Trace(newError("creating connection to ", dest)) log.Trace(newError("creating connection to ", dest))
conn, err := dialWebsocket(ctx, dest) conn, err := dialWebsocket(ctx, dest)
@ -27,7 +26,7 @@ func init() {
common.Must(internet.RegisterTransportDialer(internet.TransportProtocol_WebSocket, Dial)) common.Must(internet.RegisterTransportDialer(internet.TransportProtocol_WebSocket, Dial))
} }
func dialWebsocket(ctx context.Context, dest v2net.Destination) (net.Conn, error) { func dialWebsocket(ctx context.Context, dest net.Destination) (net.Conn, error) {
src := internet.DialerSourceFromContext(ctx) src := internet.DialerSourceFromContext(ctx)
wsSettings := internet.TransportSettingsFromContext(ctx).(*Config) wsSettings := internet.TransportSettingsFromContext(ctx).(*Config)

View File

@ -3,7 +3,6 @@ package websocket
import ( import (
"context" "context"
"crypto/tls" "crypto/tls"
"net"
"net/http" "net/http"
"strconv" "strconv"
"sync" "sync"
@ -11,7 +10,7 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"v2ray.com/core/app/log" "v2ray.com/core/app/log"
"v2ray.com/core/common" "v2ray.com/core/common"
v2net "v2ray.com/core/common/net" "v2ray.com/core/common/net"
"v2ray.com/core/transport/internet" "v2ray.com/core/transport/internet"
v2tls "v2ray.com/core/transport/internet/tls" v2tls "v2ray.com/core/transport/internet/tls"
) )
@ -44,7 +43,7 @@ type Listener struct {
addConn internet.AddConnection addConn internet.AddConnection
} }
func ListenWS(ctx context.Context, address v2net.Address, port v2net.Port, addConn internet.AddConnection) (internet.Listener, error) { func ListenWS(ctx context.Context, address net.Address, port net.Port, addConn internet.AddConnection) (internet.Listener, error) {
networkSettings := internet.TransportSettingsFromContext(ctx) networkSettings := internet.TransportSettingsFromContext(ctx)
wsSettings := networkSettings.(*Config) wsSettings := networkSettings.(*Config)
@ -65,7 +64,7 @@ func ListenWS(ctx context.Context, address v2net.Address, port v2net.Port, addCo
return l, err return l, err
} }
func (ln *Listener) listenws(address v2net.Address, port v2net.Port) error { func (ln *Listener) listenws(address net.Address, port net.Port) error {
netAddr := address.String() + ":" + strconv.Itoa(int(port.Value())) netAddr := address.String() + ":" + strconv.Itoa(int(port.Value()))
var listener net.Listener var listener net.Listener
if ln.tlsConfig == nil { if ln.tlsConfig == nil {