dispatcher

package
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 23, 2025 License: AGPL-3.0 Imports: 35 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Relay

func Relay(ctx context.Context, info *session.Info, left, right any) error

Types

type Dispatcher

type Dispatcher struct {
	// when direct failed, fallback to proxy. use proxy selector first, if not found, use any selector or node in outbound.manager
	FallbackToProxy bool
	// when fallback to domain for connections go proxy and use ip targets
	FallbackToDomain bool
	// Fallback to ipv4
	Ipv6FallbackToDomain bool
	Om                   i.OutboundManager
	Sm                   *selector.Selectors

	// rewrite destination
	Sniff               bool
	Sniffer             *sniff.Sniffer
	DestinationOverride []string
	FakeDns             i.FakeDnsPool
	Dns                 i.IPResolver

	TimeoutPolicy i.TimeoutSetting

	// stats
	StatsPolicy  i.StatsSetting
	Um           *user.Manager
	LinkStats    sync.Map              //key is prefix string, value is *LinkStats
	InboundStats *monitor.InboundStats //key is inbound tag, value is *InboundStats
	OutStats     *outbound.OutStats

	UserLogger *userlogger.UserLogger
	Router     i.Router //Router

	HandlerErrorObservers []i.HandlerErrorObserver
	Flows                 atomic.Int32
	PacketConns           atomic.Int32
	// contains filtered or unexported fields
}

TODO: improve error handling TODO: a udp session should only be closed when idle

func New

func New() *Dispatcher

func (*Dispatcher) AddHandlerErrorObserver

func (p *Dispatcher) AddHandlerErrorObserver(observer i.HandlerErrorObserver)

func (*Dispatcher) HandleFlow

func (p *Dispatcher) HandleFlow(ctx context.Context, dst net.Destination, rw buf.ReaderWriter) error

func (*Dispatcher) HandlePacketConn

func (p *Dispatcher) HandlePacketConn(ctx context.Context, dst net.Destination, pc udp.PacketReaderWriter) error

func (*Dispatcher) RemoveHandlerErrorObserver

func (p *Dispatcher) RemoveHandlerErrorObserver(observer i.HandlerErrorObserver)

type LinkStats

type LinkStats struct {
	sync.Mutex
	Num       uint32
	BWTotal   uint32 //MBps
	PingTotal uint32 //ms
}

func (*LinkStats) AddPing

func (l *LinkStats) AddPing(pingMs uint64)

func (*LinkStats) AddThroughput

func (l *LinkStats) AddThroughput(bytesPerSec uint64)

type LinkStatsPacketConn

type LinkStatsPacketConn struct {
	udp.PacketReaderWriter
	// contains filtered or unexported fields
}

func (*LinkStatsPacketConn) WritePacket

func (w *LinkStatsPacketConn) WritePacket(packet *udp.Packet) error

downlink, right to left

type OnHandlerErrorFunc

type OnHandlerErrorFunc func(tag string, err error)

type RealIpPacketConn

type RealIpPacketConn struct {
	udp.PacketReaderWriter
	// contains filtered or unexported fields
}

change fake ip to real ip

func (*RealIpPacketConn) ReadPacket

func (p *RealIpPacketConn) ReadPacket() (*udp.Packet, error)

assume to be called sequentially

func (*RealIpPacketConn) WritePacket

func (p *RealIpPacketConn) WritePacket(packet *udp.Packet) error

type StatsDeadlineRW

type StatsDeadlineRW struct {
	i.DeadlineRW
	// contains filtered or unexported fields
}

func (*StatsDeadlineRW) ReadMultiBuffer

func (w *StatsDeadlineRW) ReadMultiBuffer() (buf.MultiBuffer, error)

func (*StatsDeadlineRW) WriteMultiBuffer

func (w *StatsDeadlineRW) WriteMultiBuffer(mb buf.MultiBuffer) error

type StatsPacketConn

type StatsPacketConn struct {
	udp.PacketReaderWriter
	// contains filtered or unexported fields
}

func (*StatsPacketConn) ReadPacket

func (p *StatsPacketConn) ReadPacket() (*udp.Packet, error)

func (*StatsPacketConn) WritePacket

func (p *StatsPacketConn) WritePacket(packet *udp.Packet) error

type StatsReaderWriter

type StatsReaderWriter struct {
	buf.ReaderWriter
	// contains filtered or unexported fields
}

func (*StatsReaderWriter) ReadMultiBuffer

func (w *StatsReaderWriter) ReadMultiBuffer() (buf.MultiBuffer, error)

func (*StatsReaderWriter) WriteMultiBuffer

func (w *StatsReaderWriter) WriteMultiBuffer(mb buf.MultiBuffer) error

type TimeoutDeadlineRW

type TimeoutDeadlineRW struct {
	i.DeadlineRW
	// contains filtered or unexported fields
}

func (*TimeoutDeadlineRW) CloseWrite

func (w *TimeoutDeadlineRW) CloseWrite() error

func (*TimeoutDeadlineRW) OkayToUnwrapReader

func (w *TimeoutDeadlineRW) OkayToUnwrapReader() int

func (*TimeoutDeadlineRW) OkayToUnwrapWriter

func (w *TimeoutDeadlineRW) OkayToUnwrapWriter() int

func (*TimeoutDeadlineRW) ReadMultiBuffer

func (w *TimeoutDeadlineRW) ReadMultiBuffer() (buf.MultiBuffer, error)

func (*TimeoutDeadlineRW) UnwrapReader

func (w *TimeoutDeadlineRW) UnwrapReader() any

func (*TimeoutDeadlineRW) UnwrapWriter

func (w *TimeoutDeadlineRW) UnwrapWriter() any

func (*TimeoutDeadlineRW) WriteMultiBuffer

func (w *TimeoutDeadlineRW) WriteMultiBuffer(mb buf.MultiBuffer) error

type TimeoutPacketConn

type TimeoutPacketConn struct {
	udp.PacketReaderWriter
	// contains filtered or unexported fields
}

func (*TimeoutPacketConn) ReadPacket

func (p *TimeoutPacketConn) ReadPacket() (*udp.Packet, error)

func (*TimeoutPacketConn) WritePacket

func (p *TimeoutPacketConn) WritePacket(packet *udp.Packet) error

type TimeoutReaderWriter

type TimeoutReaderWriter struct {
	buf.ReaderWriter
	// contains filtered or unexported fields
}

func (*TimeoutReaderWriter) CloseWrite

func (w *TimeoutReaderWriter) CloseWrite() error

func (*TimeoutReaderWriter) OkayToUnwrapReader

func (w *TimeoutReaderWriter) OkayToUnwrapReader() int

func (*TimeoutReaderWriter) OkayToUnwrapWriter

func (w *TimeoutReaderWriter) OkayToUnwrapWriter() int

func (*TimeoutReaderWriter) ReadMultiBuffer

func (w *TimeoutReaderWriter) ReadMultiBuffer() (buf.MultiBuffer, error)

func (*TimeoutReaderWriter) UnwrapReader

func (w *TimeoutReaderWriter) UnwrapReader() any

func (*TimeoutReaderWriter) UnwrapWriter

func (w *TimeoutReaderWriter) UnwrapWriter() any

func (*TimeoutReaderWriter) WriteMultiBuffer

func (w *TimeoutReaderWriter) WriteMultiBuffer(mb buf.MultiBuffer) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL