123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- package adapter
- import (
- "context"
- "net"
- E "github.com/sagernet/sing/common/exceptions"
- "github.com/sagernet/sing/common/logger"
- M "github.com/sagernet/sing/common/metadata"
- N "github.com/sagernet/sing/common/network"
- )
- type (
- // Deprecated
- ConnectionHandlerFunc = func(ctx context.Context, conn net.Conn, metadata InboundContext) error
- // Deprecated
- PacketConnectionHandlerFunc = func(ctx context.Context, conn N.PacketConn, metadata InboundContext) error
- )
- // Deprecated
- //
- //nolint:staticcheck
- func NewUpstreamHandler(
- metadata InboundContext,
- connectionHandler ConnectionHandlerFunc,
- packetHandler PacketConnectionHandlerFunc,
- errorHandler E.Handler,
- ) UpstreamHandlerAdapter {
- return &myUpstreamHandlerWrapper{
- metadata: metadata,
- connectionHandler: connectionHandler,
- packetHandler: packetHandler,
- errorHandler: errorHandler,
- }
- }
- var _ UpstreamHandlerAdapter = (*myUpstreamHandlerWrapper)(nil)
- // Deprecated: use myUpstreamHandlerWrapperEx instead.
- //
- //nolint:staticcheck
- type myUpstreamHandlerWrapper struct {
- metadata InboundContext
- connectionHandler ConnectionHandlerFunc
- packetHandler PacketConnectionHandlerFunc
- errorHandler E.Handler
- }
- // Deprecated: use myUpstreamHandlerWrapperEx instead.
- func (w *myUpstreamHandlerWrapper) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error {
- myMetadata := w.metadata
- if metadata.Source.IsValid() {
- myMetadata.Source = metadata.Source
- }
- if metadata.Destination.IsValid() {
- myMetadata.Destination = metadata.Destination
- }
- return w.connectionHandler(ctx, conn, myMetadata)
- }
- // Deprecated: use myUpstreamHandlerWrapperEx instead.
- func (w *myUpstreamHandlerWrapper) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error {
- myMetadata := w.metadata
- if metadata.Source.IsValid() {
- myMetadata.Source = metadata.Source
- }
- if metadata.Destination.IsValid() {
- myMetadata.Destination = metadata.Destination
- }
- return w.packetHandler(ctx, conn, myMetadata)
- }
- // Deprecated: use myUpstreamHandlerWrapperEx instead.
- func (w *myUpstreamHandlerWrapper) NewError(ctx context.Context, err error) {
- w.errorHandler.NewError(ctx, err)
- }
- // Deprecated: removed
- func UpstreamMetadata(metadata InboundContext) M.Metadata {
- return M.Metadata{
- Source: metadata.Source.Unwrap(),
- Destination: metadata.Destination.Unwrap(),
- }
- }
- // Deprecated: Use NewUpstreamContextHandlerEx instead.
- type myUpstreamContextHandlerWrapper struct {
- connectionHandler ConnectionHandlerFunc
- packetHandler PacketConnectionHandlerFunc
- errorHandler E.Handler
- }
- // Deprecated: Use NewUpstreamContextHandlerEx instead.
- func NewUpstreamContextHandler(
- connectionHandler ConnectionHandlerFunc,
- packetHandler PacketConnectionHandlerFunc,
- errorHandler E.Handler,
- ) UpstreamHandlerAdapter {
- return &myUpstreamContextHandlerWrapper{
- connectionHandler: connectionHandler,
- packetHandler: packetHandler,
- errorHandler: errorHandler,
- }
- }
- // Deprecated: Use NewUpstreamContextHandlerEx instead.
- func (w *myUpstreamContextHandlerWrapper) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error {
- myMetadata := ContextFrom(ctx)
- if metadata.Source.IsValid() {
- myMetadata.Source = metadata.Source
- }
- if metadata.Destination.IsValid() {
- myMetadata.Destination = metadata.Destination
- }
- return w.connectionHandler(ctx, conn, *myMetadata)
- }
- // Deprecated: Use NewUpstreamContextHandlerEx instead.
- func (w *myUpstreamContextHandlerWrapper) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error {
- myMetadata := ContextFrom(ctx)
- if metadata.Source.IsValid() {
- myMetadata.Source = metadata.Source
- }
- if metadata.Destination.IsValid() {
- myMetadata.Destination = metadata.Destination
- }
- return w.packetHandler(ctx, conn, *myMetadata)
- }
- // Deprecated: Use NewUpstreamContextHandlerEx instead.
- func (w *myUpstreamContextHandlerWrapper) NewError(ctx context.Context, err error) {
- w.errorHandler.NewError(ctx, err)
- }
- // Deprecated: Use ConnectionRouterEx instead.
- func NewRouteHandler(
- metadata InboundContext,
- router ConnectionRouter,
- logger logger.ContextLogger,
- ) UpstreamHandlerAdapter {
- return &routeHandlerWrapper{
- metadata: metadata,
- router: router,
- logger: logger,
- }
- }
- // Deprecated: Use ConnectionRouterEx instead.
- func NewRouteContextHandler(
- router ConnectionRouter,
- logger logger.ContextLogger,
- ) UpstreamHandlerAdapter {
- return &routeContextHandlerWrapper{
- router: router,
- logger: logger,
- }
- }
- var _ UpstreamHandlerAdapter = (*routeHandlerWrapper)(nil)
- // Deprecated: Use ConnectionRouterEx instead.
- //
- //nolint:staticcheck
- type routeHandlerWrapper struct {
- metadata InboundContext
- router ConnectionRouter
- logger logger.ContextLogger
- }
- // Deprecated: Use ConnectionRouterEx instead.
- func (w *routeHandlerWrapper) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error {
- myMetadata := w.metadata
- if metadata.Source.IsValid() {
- myMetadata.Source = metadata.Source
- }
- if metadata.Destination.IsValid() {
- myMetadata.Destination = metadata.Destination
- }
- return w.router.RouteConnection(ctx, conn, myMetadata)
- }
- // Deprecated: Use ConnectionRouterEx instead.
- func (w *routeHandlerWrapper) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error {
- myMetadata := w.metadata
- if metadata.Source.IsValid() {
- myMetadata.Source = metadata.Source
- }
- if metadata.Destination.IsValid() {
- myMetadata.Destination = metadata.Destination
- }
- return w.router.RoutePacketConnection(ctx, conn, myMetadata)
- }
- // Deprecated: Use ConnectionRouterEx instead.
- func (w *routeHandlerWrapper) NewError(ctx context.Context, err error) {
- w.logger.ErrorContext(ctx, err)
- }
- var _ UpstreamHandlerAdapter = (*routeContextHandlerWrapper)(nil)
- // Deprecated: Use ConnectionRouterEx instead.
- type routeContextHandlerWrapper struct {
- router ConnectionRouter
- logger logger.ContextLogger
- }
- // Deprecated: Use ConnectionRouterEx instead.
- func (w *routeContextHandlerWrapper) NewConnection(ctx context.Context, conn net.Conn, metadata M.Metadata) error {
- myMetadata := ContextFrom(ctx)
- if metadata.Source.IsValid() {
- myMetadata.Source = metadata.Source
- }
- if metadata.Destination.IsValid() {
- myMetadata.Destination = metadata.Destination
- }
- return w.router.RouteConnection(ctx, conn, *myMetadata)
- }
- // Deprecated: Use ConnectionRouterEx instead.
- func (w *routeContextHandlerWrapper) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata M.Metadata) error {
- myMetadata := ContextFrom(ctx)
- if metadata.Source.IsValid() {
- myMetadata.Source = metadata.Source
- }
- if metadata.Destination.IsValid() {
- myMetadata.Destination = metadata.Destination
- }
- return w.router.RoutePacketConnection(ctx, conn, *myMetadata)
- }
- // Deprecated: Use ConnectionRouterEx instead.
- func (w *routeContextHandlerWrapper) NewError(ctx context.Context, err error) {
- w.logger.ErrorContext(ctx, err)
- }
|