reverse.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package reverse
  2. //go:generate errorgen
  3. import (
  4. "context"
  5. "v2ray.com/core"
  6. "v2ray.com/core/common"
  7. "v2ray.com/core/common/net"
  8. "v2ray.com/core/features/outbound"
  9. "v2ray.com/core/features/routing"
  10. )
  11. const (
  12. internalDomain = "reverse.internal.v2ray.com"
  13. )
  14. func isInternalDomain(dest net.Destination) bool {
  15. return dest.Address.Family().IsDomain() && dest.Address.Domain() == internalDomain
  16. }
  17. func init() {
  18. common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, config interface{}) (interface{}, error) {
  19. r := new(Reverse)
  20. if err := core.RequireFeatures(ctx, func(d routing.Dispatcher, om outbound.Manager) error {
  21. return r.Init(config.(*Config), d, om)
  22. }); err != nil {
  23. return nil, err
  24. }
  25. return r, nil
  26. }))
  27. }
  28. type Reverse struct {
  29. bridges []*Bridge
  30. portals []*Portal
  31. }
  32. func (r *Reverse) Init(config *Config, d routing.Dispatcher, ohm outbound.Manager) error {
  33. for _, bConfig := range config.BridgeConfig {
  34. b, err := NewBridge(bConfig, d)
  35. if err != nil {
  36. return err
  37. }
  38. r.bridges = append(r.bridges, b)
  39. }
  40. for _, pConfig := range config.PortalConfig {
  41. p, err := NewPortal(pConfig, ohm)
  42. if err != nil {
  43. return err
  44. }
  45. r.portals = append(r.portals, p)
  46. }
  47. return nil
  48. }