upstream_legacy.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package adapter
  2. import (
  3. "context"
  4. "net"
  5. E "github.com/sagernet/sing/common/exceptions"
  6. "github.com/sagernet/sing/common/logger"
  7. M "github.com/sagernet/sing/common/metadata"
  8. N "github.com/sagernet/sing/common/network"
  9. )
  10. type (
  11. // Deprecated
  12. ConnectionHandlerFunc = func(ctx context.Context, conn net.Conn, metadata InboundContext) error
  13. // Deprecated
  14. PacketConnectionHandlerFunc = func(ctx context.Context, conn N.PacketConn, metadata InboundContext) error
  15. )
  16. // Deprecated
  17. func NewUpstreamHandler(
  18. metadata InboundContext,
  19. connectionHandler ConnectionHandlerFunc,
  20. packetHandler PacketConnectionHandlerFunc,
  21. errorHandler E.Handler,
  22. ) UpstreamHandlerAdapter {
  23. return &myUpstreamHandlerWrapper{
  24. metadata: metadata,
  25. connectionHandler: connectionHandler,
  26. packetHandler: packetHandler,
  27. errorHandler: errorHandler,
  28. }
  29. }
  30. var _ UpstreamHandlerAdapter = (*myUpstreamHandlerWrapper)(nil)
  31. // Deprecated
  32. type myUpstreamHandlerWrapper struct {
  33. metadata InboundContext
  34. connectionHandler ConnectionHandlerFunc
  35. packetHandler PacketConnectionHandlerFunc
  36. errorHandler E.Handler
  37. }
  38. func (w *myUpstreamHandlerWrapper) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error {
  39. myMetadata := w.metadata
  40. if metadata.Source.IsValid() {
  41. myMetadata.Source = metadata.Source
  42. }
  43. if metadata.Destination.IsValid() {
  44. myMetadata.Destination = metadata.Destination
  45. }
  46. return w.connectionHandler(ctx, conn, myMetadata)
  47. }
  48. func (w *myUpstreamHandlerWrapper) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error {
  49. myMetadata := w.metadata
  50. if metadata.Source.IsValid() {
  51. myMetadata.Source = metadata.Source
  52. }
  53. if metadata.Destination.IsValid() {
  54. myMetadata.Destination = metadata.Destination
  55. }
  56. return w.packetHandler(ctx, conn, myMetadata)
  57. }
  58. func (w *myUpstreamHandlerWrapper) NewError(ctx context.Context, err error) {
  59. w.errorHandler.NewError(ctx, err)
  60. }
  61. // Deprecated
  62. func UpstreamMetadata(metadata InboundContext) M.Metadata {
  63. return M.Metadata{
  64. Source: metadata.Source,
  65. Destination: metadata.Destination,
  66. }
  67. }
  68. // Deprecated
  69. type myUpstreamContextHandlerWrapper struct {
  70. connectionHandler ConnectionHandlerFunc
  71. packetHandler PacketConnectionHandlerFunc
  72. errorHandler E.Handler
  73. }
  74. // Deprecated
  75. func NewUpstreamContextHandler(
  76. connectionHandler ConnectionHandlerFunc,
  77. packetHandler PacketConnectionHandlerFunc,
  78. errorHandler E.Handler,
  79. ) UpstreamHandlerAdapter {
  80. return &myUpstreamContextHandlerWrapper{
  81. connectionHandler: connectionHandler,
  82. packetHandler: packetHandler,
  83. errorHandler: errorHandler,
  84. }
  85. }
  86. func (w *myUpstreamContextHandlerWrapper) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error {
  87. myMetadata := ContextFrom(ctx)
  88. if metadata.Source.IsValid() {
  89. myMetadata.Source = metadata.Source
  90. }
  91. if metadata.Destination.IsValid() {
  92. myMetadata.Destination = metadata.Destination
  93. }
  94. return w.connectionHandler(ctx, conn, *myMetadata)
  95. }
  96. func (w *myUpstreamContextHandlerWrapper) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error {
  97. myMetadata := ContextFrom(ctx)
  98. if metadata.Source.IsValid() {
  99. myMetadata.Source = metadata.Source
  100. }
  101. if metadata.Destination.IsValid() {
  102. myMetadata.Destination = metadata.Destination
  103. }
  104. return w.packetHandler(ctx, conn, *myMetadata)
  105. }
  106. func (w *myUpstreamContextHandlerWrapper) NewError(ctx context.Context, err error) {
  107. w.errorHandler.NewError(ctx, err)
  108. }
  109. // Deprecated: Use ConnectionRouterEx instead.
  110. func NewRouteHandler(
  111. metadata InboundContext,
  112. router ConnectionRouter,
  113. logger logger.ContextLogger,
  114. ) UpstreamHandlerAdapter {
  115. return &routeHandlerWrapper{
  116. metadata: metadata,
  117. router: router,
  118. logger: logger,
  119. }
  120. }
  121. // Deprecated: Use ConnectionRouterEx instead.
  122. func NewRouteContextHandler(
  123. router ConnectionRouter,
  124. logger logger.ContextLogger,
  125. ) UpstreamHandlerAdapter {
  126. return &routeContextHandlerWrapper{
  127. router: router,
  128. logger: logger,
  129. }
  130. }
  131. var _ UpstreamHandlerAdapter = (*routeHandlerWrapper)(nil)
  132. // Deprecated: Use ConnectionRouterEx instead.
  133. type routeHandlerWrapper struct {
  134. metadata InboundContext
  135. router ConnectionRouter
  136. logger logger.ContextLogger
  137. }
  138. func (w *routeHandlerWrapper) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error {
  139. myMetadata := w.metadata
  140. if metadata.Source.IsValid() {
  141. myMetadata.Source = metadata.Source
  142. }
  143. if metadata.Destination.IsValid() {
  144. myMetadata.Destination = metadata.Destination
  145. }
  146. return w.router.RouteConnection(ctx, conn, myMetadata)
  147. }
  148. func (w *routeHandlerWrapper) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error {
  149. myMetadata := w.metadata
  150. if metadata.Source.IsValid() {
  151. myMetadata.Source = metadata.Source
  152. }
  153. if metadata.Destination.IsValid() {
  154. myMetadata.Destination = metadata.Destination
  155. }
  156. return w.router.RoutePacketConnection(ctx, conn, myMetadata)
  157. }
  158. func (w *routeHandlerWrapper) NewError(ctx context.Context, err error) {
  159. w.logger.ErrorContext(ctx, err)
  160. }
  161. var _ UpstreamHandlerAdapter = (*routeContextHandlerWrapper)(nil)
  162. // Deprecated: Use ConnectionRouterEx instead.
  163. type routeContextHandlerWrapper struct {
  164. router ConnectionRouter
  165. logger logger.ContextLogger
  166. }
  167. func (w *routeContextHandlerWrapper) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error {
  168. myMetadata := ContextFrom(ctx)
  169. if metadata.Source.IsValid() {
  170. myMetadata.Source = metadata.Source
  171. }
  172. if metadata.Destination.IsValid() {
  173. myMetadata.Destination = metadata.Destination
  174. }
  175. return w.router.RouteConnection(ctx, conn, *myMetadata)
  176. }
  177. func (w *routeContextHandlerWrapper) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error {
  178. myMetadata := ContextFrom(ctx)
  179. if metadata.Source.IsValid() {
  180. myMetadata.Source = metadata.Source
  181. }
  182. if metadata.Destination.IsValid() {
  183. myMetadata.Destination = metadata.Destination
  184. }
  185. return w.router.RoutePacketConnection(ctx, conn, *myMetadata)
  186. }
  187. func (w *routeContextHandlerWrapper) NewError(ctx context.Context, err error) {
  188. w.logger.ErrorContext(ctx, err)
  189. }