common_inet_proxy_handle.go 998 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package common
  2. import (
  3. "context"
  4. "github.com/cnlh/nps/bridge"
  5. "github.com/cnlh/nps/core"
  6. "net"
  7. )
  8. type Proxy struct {
  9. core.NpsPlugin
  10. clientConn net.Conn
  11. ctx context.Context
  12. }
  13. func (proxy *Proxy) GetConfigName() *core.NpsConfigs {
  14. return core.NewNpsConfigs("socks5_proxy", "proxy to inet")
  15. }
  16. func (proxy *Proxy) Run(ctx context.Context, config map[string]string) error {
  17. proxy.clientConn = proxy.GetClientConn(ctx)
  18. proxy.ctx = ctx
  19. bg := ctx.Value(core.BRIDGE)
  20. if bg == nil {
  21. return core.BRIDGE_NOT_EXIST
  22. }
  23. clientCtxConn := ctx.Value(core.CLIENT_CONNECTION)
  24. if clientCtxConn == nil {
  25. return core.CLIENT_CONNECTION_NOT_EXIST
  26. }
  27. clientId := ctx.Value(core.CLIENT_ID)
  28. if clientId == nil {
  29. return core.CLIENT_ID_NOT_EXIST
  30. }
  31. brg := bg.(*bridge.Bridge)
  32. severConn, err := brg.GetConnByClientId(clientId.(int))
  33. if err != nil {
  34. return err
  35. }
  36. go core.CopyBuffer(severConn, clientCtxConn.(net.Conn))
  37. core.CopyBuffer(clientCtxConn.(net.Conn), severConn)
  38. return nil
  39. }