dispatcher

package
v1.0.7 Latest Latest
Warning

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

Go to latest
Published: Feb 25, 2026 License: AGPL-3.0 Imports: 33 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 AfterHandlerSelectedHook added in v1.0.7

type AfterHandlerSelectedHook interface {
	AfterHandlerSelection(ctx context.Context, info *session.Info, rw any,
		handler i.Outbound) (context.Context, any, error)
}

type BeforeHandlerSelectionHook added in v1.0.7

type BeforeHandlerSelectionHook interface {
	BeforeHandlerSelection(ctx context.Context, info *session.Info,
		rw any) (context.Context, any, error)
}

type DebugHook added in v1.0.7

type DebugHook struct {
}

func (*DebugHook) AfterHandlerSelection added in v1.0.7

func (p *DebugHook) AfterHandlerSelection(ctx context.Context, info *session.Info, rw any,
	handler i.Outbound) (context.Context, any, error)

func (*DebugHook) BeforeHandlerSelection added in v1.0.7

func (p *DebugHook) BeforeHandlerSelection(ctx context.Context, info *session.Info,
	rw any) (context.Context, any, error)

func (*DebugHook) FlowSessionEnd added in v1.0.7

func (p *DebugHook) FlowSessionEnd(ctx context.Context, info *session.Info, err error)

func (*DebugHook) PacketConnSessionEnd added in v1.0.7

func (p *DebugHook) PacketConnSessionEnd(ctx context.Context, info *session.Info, err error)

type Dispatcher

type Dispatcher struct {
	BeforeHandlerSelectionHooks []BeforeHandlerSelectionHook
	Router                      i.Router
	OnHandlerSelectedHooks      []AfterHandlerSelectedHook
	SessionEndHooks             []SessionEndHook
	Fallback                    Fallback

	SessinoErrorLogger SessionErrorLogger
	Flows              atomic.Int32
	PacketConns        atomic.Int32

	HandlerErrorObservers []i.HandlerErrorObserver
	// contains filtered or unexported fields
}

func (*Dispatcher) AddAfterHandlerSelectionHook added in v1.0.7

func (d *Dispatcher) AddAfterHandlerSelectionHook(hook AfterHandlerSelectedHook)

func (*Dispatcher) AddBeforeHandlerSelectionHook added in v1.0.7

func (d *Dispatcher) AddBeforeHandlerSelectionHook(hook BeforeHandlerSelectionHook)

func (*Dispatcher) AddHandlerErrorObserver

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

func (*Dispatcher) AddSessionEndHook added in v1.0.7

func (d *Dispatcher) AddSessionEndHook(hook SessionEndHook)

func (*Dispatcher) HandleFlow

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

func (*Dispatcher) HandlePacketConn

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

func (*Dispatcher) RemoveHandlerErrorObserver

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

type Fallback added in v1.0.7

type Fallback interface {
	Fallback(ctx context.Context, info *session.Info,
		rw buf.ReaderWriter, handler i.Outbound, err error) error
}

type Fallbacker added in v1.0.7

type Fallbacker struct {
	FallbackToProxy  bool
	FallbackToDomain bool
	Sm               *selector.Selectors
	Om               i.OutboundManager
	Logger           fallbackLogger
}

func (*Fallbacker) Fallback added in v1.0.7

func (p *Fallbacker) Fallback(ctx context.Context, info *session.Info,
	rw buf.ReaderWriter, handler i.Outbound, err error) error

type IdleHook added in v1.0.7

type IdleHook struct {
	TimeoutPolicy i.TimeoutSetting
}

func (*IdleHook) BeforeHandlerSelection added in v1.0.7

func (p *IdleHook) BeforeHandlerSelection(ctx context.Context, info *session.Info,
	rw any) (context.Context, any, error)

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 NullSessionErrorLogger added in v1.0.7

type NullSessionErrorLogger struct{}

func (*NullSessionErrorLogger) LogSessionError added in v1.0.7

func (n *NullSessionErrorLogger) LogSessionError(info *session.Info, err error)

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 RewriteDestinationHook added in v1.0.7

type RewriteDestinationHook struct {
	Sniff               bool
	Sniffer             *sniff.Sniffer
	DestinationOverride []string
	FakeDns             i.FakeDnsPool
	Dns                 i.IPResolver
}

func (*RewriteDestinationHook) BeforeHandlerSelection added in v1.0.7

func (p *RewriteDestinationHook) BeforeHandlerSelection(ctx context.Context, si *session.Info,
	rw any) (context.Context, any, error)

type RewriteIPv6ToDomainHook added in v1.0.7

type RewriteIPv6ToDomainHook struct{}

func (*RewriteIPv6ToDomainHook) AfterHandlerSelection added in v1.0.7

func (p *RewriteIPv6ToDomainHook) AfterHandlerSelection(ctx context.Context, info *session.Info, rw any,
	handler i.Outbound) (context.Context, any, error)

type SessionEndHook added in v1.0.7

type SessionEndHook interface {
	// should return quickly
	FlowSessionEnd(ctx context.Context, info *session.Info, err error)
	PacketConnSessionEnd(ctx context.Context, info *session.Info, err error)
}

type SessionErrorLogger added in v1.0.7

type SessionErrorLogger interface {
	LogSessionError(info *session.Info, err error)
}

type StatsDeadlineRW

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

func NewStatsDeadlineRW added in v1.0.7

func NewStatsDeadlineRW(rw i.DeadlineRW, upCounter session.UpCounters,
	downCounter session.DownCounters) *StatsDeadlineRW

func (*StatsDeadlineRW) OkayToUnwrapReader added in v1.0.7

func (w *StatsDeadlineRW) OkayToUnwrapReader() int

func (*StatsDeadlineRW) OkayToUnwrapWriter added in v1.0.7

func (w *StatsDeadlineRW) OkayToUnwrapWriter() int

func (*StatsDeadlineRW) ReadMultiBuffer

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

func (*StatsDeadlineRW) UnwrapReader added in v1.0.7

func (w *StatsDeadlineRW) UnwrapReader() any

func (*StatsDeadlineRW) UnwrapWriter added in v1.0.7

func (w *StatsDeadlineRW) UnwrapWriter() any

func (*StatsDeadlineRW) WriteMultiBuffer

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

type StatsHook added in v1.0.7

type StatsHook struct {
	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
}

func (*StatsHook) AfterHandlerSelection added in v1.0.7

func (p *StatsHook) AfterHandlerSelection(ctx context.Context, info *session.Info, rw any,
	handler i.Outbound) (context.Context, any, error)

type StatsPacketConn

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

func NewStatsPacketConn added in v1.0.7

func NewStatsPacketConn(prw udp.PacketReaderWriter, upCounter session.UpCounters,
	downCounter session.DownCounters) *StatsPacketConn

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 NewStatsReaderWriter added in v1.0.7

func NewStatsReaderWriter(rw buf.ReaderWriter, upCounter session.UpCounters,
	downCounter session.DownCounters) *StatsReaderWriter

func (*StatsReaderWriter) OkayToUnwrapReader added in v1.0.7

func (w *StatsReaderWriter) OkayToUnwrapReader() int

func (*StatsReaderWriter) OkayToUnwrapWriter added in v1.0.7

func (w *StatsReaderWriter) OkayToUnwrapWriter() int

func (*StatsReaderWriter) ReadMultiBuffer

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

func (*StatsReaderWriter) UnwrapReader added in v1.0.7

func (w *StatsReaderWriter) UnwrapReader() any

func (*StatsReaderWriter) UnwrapWriter added in v1.0.7

func (w *StatsReaderWriter) UnwrapWriter() any

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