inbound.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package adapter
  2. import (
  3. "context"
  4. "net/netip"
  5. "time"
  6. C "github.com/sagernet/sing-box/constant"
  7. "github.com/sagernet/sing-box/log"
  8. "github.com/sagernet/sing-box/option"
  9. M "github.com/sagernet/sing/common/metadata"
  10. )
  11. type Inbound interface {
  12. Lifecycle
  13. Type() string
  14. Tag() string
  15. }
  16. type TCPInjectableInbound interface {
  17. Inbound
  18. ConnectionHandlerEx
  19. }
  20. type UDPInjectableInbound interface {
  21. Inbound
  22. PacketConnectionHandlerEx
  23. }
  24. type InboundRegistry interface {
  25. option.InboundOptionsRegistry
  26. Create(ctx context.Context, router Router, logger log.ContextLogger, tag string, inboundType string, options any) (Inbound, error)
  27. }
  28. type InboundManager interface {
  29. Lifecycle
  30. Inbounds() []Inbound
  31. Get(tag string) (Inbound, bool)
  32. Remove(tag string) error
  33. Create(ctx context.Context, router Router, logger log.ContextLogger, tag string, inboundType string, options any) error
  34. }
  35. type InboundContext struct {
  36. Inbound string
  37. InboundType string
  38. IPVersion uint8
  39. Network string
  40. Source M.Socksaddr
  41. Destination M.Socksaddr
  42. User string
  43. Outbound string
  44. // sniffer
  45. Protocol string
  46. Domain string
  47. Client string
  48. SniffContext any
  49. SnifferNames []string
  50. SniffError error
  51. // cache
  52. // Deprecated: implement in rule action
  53. InboundDetour string
  54. LastInbound string
  55. OriginDestination M.Socksaddr
  56. RouteOriginalDestination M.Socksaddr
  57. // Deprecated: to be removed
  58. //nolint:staticcheck
  59. InboundOptions option.InboundOptions
  60. UDPDisableDomainUnmapping bool
  61. UDPConnect bool
  62. UDPTimeout time.Duration
  63. TLSFragment bool
  64. TLSFragmentFallbackDelay time.Duration
  65. TLSRecordFragment bool
  66. NetworkStrategy *C.NetworkStrategy
  67. NetworkType []C.InterfaceType
  68. FallbackNetworkType []C.InterfaceType
  69. FallbackDelay time.Duration
  70. DestinationAddresses []netip.Addr
  71. SourceGeoIPCode string
  72. GeoIPCode string
  73. ProcessInfo *ConnectionOwner
  74. QueryType uint16
  75. FakeIP bool
  76. // rule cache
  77. IPCIDRMatchSource bool
  78. IPCIDRAcceptEmpty bool
  79. SourceAddressMatch bool
  80. SourcePortMatch bool
  81. DestinationAddressMatch bool
  82. DestinationPortMatch bool
  83. DidMatch bool
  84. IgnoreDestinationIPCIDRMatch bool
  85. }
  86. func (c *InboundContext) ResetRuleCache() {
  87. c.IPCIDRMatchSource = false
  88. c.IPCIDRAcceptEmpty = false
  89. c.SourceAddressMatch = false
  90. c.SourcePortMatch = false
  91. c.DestinationAddressMatch = false
  92. c.DestinationPortMatch = false
  93. c.DidMatch = false
  94. }
  95. type inboundContextKey struct{}
  96. func WithContext(ctx context.Context, inboundContext *InboundContext) context.Context {
  97. return context.WithValue(ctx, (*inboundContextKey)(nil), inboundContext)
  98. }
  99. func ContextFrom(ctx context.Context) *InboundContext {
  100. metadata := ctx.Value((*inboundContextKey)(nil))
  101. if metadata == nil {
  102. return nil
  103. }
  104. return metadata.(*InboundContext)
  105. }
  106. func ExtendContext(ctx context.Context) (context.Context, *InboundContext) {
  107. var newMetadata InboundContext
  108. if metadata := ContextFrom(ctx); metadata != nil {
  109. newMetadata = *metadata
  110. }
  111. return WithContext(ctx, &newMetadata), &newMetadata
  112. }
  113. func OverrideContext(ctx context.Context) context.Context {
  114. if metadata := ContextFrom(ctx); metadata != nil {
  115. newMetadata := *metadata
  116. return WithContext(ctx, &newMetadata)
  117. }
  118. return ctx
  119. }