systemnetwork.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package systemnetworkimpl
  2. import (
  3. "context"
  4. "github.com/v2fly/v2ray-core/v5/common/environment"
  5. "github.com/v2fly/v2ray-core/v5/common/net"
  6. "github.com/v2fly/v2ray-core/v5/transport/internet"
  7. )
  8. func NewSystemNetworkImpl(listener internet.SystemListener, dialer internet.SystemDialer) environment.SystemNetworkCapabilitySet {
  9. return &systemNetworkImpl{dialer: dialer, listener: listener}
  10. }
  11. type systemDefaultDialer struct{}
  12. func (s systemDefaultDialer) Listen(ctx context.Context, addr net.Addr, sockopt *internet.SocketConfig) (net.Listener, error) {
  13. return internet.ListenSystem(ctx, addr, sockopt)
  14. }
  15. func (s systemDefaultDialer) ListenPacket(ctx context.Context, addr net.Addr, sockopt *internet.SocketConfig) (net.PacketConn, error) {
  16. return internet.ListenSystemPacket(ctx, addr, sockopt)
  17. }
  18. func (s systemDefaultDialer) Dial(ctx context.Context, source net.Address, destination net.Destination, sockopt *internet.SocketConfig) (net.Conn, error) {
  19. return internet.DialSystem(ctx, destination, sockopt)
  20. }
  21. func NewSystemNetworkDefault() environment.SystemNetworkCapabilitySet {
  22. systemDefault := systemDefaultDialer{}
  23. return &systemNetworkImpl{dialer: systemDefault, listener: systemDefault}
  24. }
  25. type systemNetworkImpl struct {
  26. listener internet.SystemListener
  27. dialer internet.SystemDialer
  28. }
  29. func (s systemNetworkImpl) Dialer() internet.SystemDialer {
  30. return s.dialer
  31. }
  32. func (s systemNetworkImpl) Listener() internet.SystemListener {
  33. return s.listener
  34. }
  35. func NewSystemListenerWithDefaultOpt(listener internet.SystemListener, opt *internet.SocketConfig) internet.SystemListener {
  36. return systemListenerWithDefaultOpt{SystemListener: listener, opt: opt}
  37. }
  38. type systemListenerWithDefaultOpt struct {
  39. internet.SystemListener
  40. opt *internet.SocketConfig
  41. }
  42. func (s systemListenerWithDefaultOpt) Listen(ctx context.Context, addr net.Addr, sockopt *internet.SocketConfig) (net.Listener, error) {
  43. if sockopt == nil {
  44. return s.Listen(ctx, addr, s.opt)
  45. }
  46. return s.Listen(ctx, addr, sockopt)
  47. }
  48. func (s systemListenerWithDefaultOpt) ListenPacket(ctx context.Context, addr net.Addr, sockopt *internet.SocketConfig) (net.PacketConn, error) {
  49. if sockopt == nil {
  50. return s.ListenPacket(ctx, addr, s.opt)
  51. }
  52. return s.ListenPacket(ctx, addr, sockopt)
  53. }
  54. func NewSystemDialerWithDefaultOpt(listener internet.SystemDialer, opt *internet.SocketConfig) internet.SystemDialer {
  55. return systemDialerWithDefaultOpt{SystemDialer: listener, opt: opt}
  56. }
  57. type systemDialerWithDefaultOpt struct {
  58. internet.SystemDialer
  59. opt *internet.SocketConfig
  60. }
  61. func (s systemDialerWithDefaultOpt) Dial(ctx context.Context, source net.Address, destination net.Destination, sockopt *internet.SocketConfig) (net.Conn, error) {
  62. if sockopt == nil {
  63. return s.Dial(ctx, source, destination, s.opt)
  64. }
  65. return s.Dial(ctx, source, destination, sockopt)
  66. }