12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package proxydialer
- import (
- "context"
- "net"
- C "github.com/metacubex/mihomo/constant"
- M "github.com/sagernet/sing/common/metadata"
- N "github.com/sagernet/sing/common/network"
- )
- type SingDialer interface {
- N.Dialer
- SetDialer(dialer C.Dialer)
- }
- type singDialer proxyDialer
- var _ N.Dialer = (*singDialer)(nil)
- func (d *singDialer) DialContext(ctx context.Context, network string, destination M.Socksaddr) (net.Conn, error) {
- return (*proxyDialer)(d).DialContext(ctx, network, destination.String())
- }
- func (d *singDialer) ListenPacket(ctx context.Context, destination M.Socksaddr) (net.PacketConn, error) {
- return (*proxyDialer)(d).ListenPacket(ctx, "udp", "", destination.AddrPort())
- }
- func (d *singDialer) SetDialer(dialer C.Dialer) {
- (*proxyDialer)(d).dialer = dialer
- }
- func NewSingDialer(proxy C.ProxyAdapter, dialer C.Dialer, statistic bool) SingDialer {
- return (*singDialer)(&proxyDialer{
- proxy: proxy,
- dialer: dialer,
- statistic: statistic,
- })
- }
- type byNameSingDialer struct {
- dialer C.Dialer
- proxyName string
- }
- var _ N.Dialer = (*byNameSingDialer)(nil)
- func (d *byNameSingDialer) DialContext(ctx context.Context, network string, destination M.Socksaddr) (net.Conn, error) {
- var cDialer C.Dialer = d.dialer
- if len(d.proxyName) > 0 {
- pd, err := NewByName(d.proxyName, d.dialer)
- if err != nil {
- return nil, err
- }
- cDialer = pd
- }
- return cDialer.DialContext(ctx, network, destination.String())
- }
- func (d *byNameSingDialer) ListenPacket(ctx context.Context, destination M.Socksaddr) (net.PacketConn, error) {
- var cDialer C.Dialer = d.dialer
- if len(d.proxyName) > 0 {
- pd, err := NewByName(d.proxyName, d.dialer)
- if err != nil {
- return nil, err
- }
- cDialer = pd
- }
- return cDialer.ListenPacket(ctx, "udp", "", destination.AddrPort())
- }
- func (d *byNameSingDialer) SetDialer(dialer C.Dialer) {
- d.dialer = dialer
- }
- func NewByNameSingDialer(proxyName string, dialer C.Dialer) SingDialer {
- return &byNameSingDialer{
- dialer: dialer,
- proxyName: proxyName,
- }
- }
|