destination.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package singbridge
  2. import (
  3. M "github.com/sagernet/sing/common/metadata"
  4. N "github.com/sagernet/sing/common/network"
  5. "github.com/xtls/xray-core/common/net"
  6. )
  7. func ToNetwork(network string) net.Network {
  8. switch N.NetworkName(network) {
  9. case N.NetworkTCP:
  10. return net.Network_TCP
  11. case N.NetworkUDP:
  12. return net.Network_UDP
  13. default:
  14. return net.Network_Unknown
  15. }
  16. }
  17. func ToDestination(socksaddr M.Socksaddr, network net.Network) net.Destination {
  18. if socksaddr.IsFqdn() {
  19. return net.Destination{
  20. Network: network,
  21. Address: net.DomainAddress(socksaddr.Fqdn),
  22. Port: net.Port(socksaddr.Port),
  23. }
  24. } else {
  25. return net.Destination{
  26. Network: network,
  27. Address: net.IPAddress(socksaddr.Addr.AsSlice()),
  28. Port: net.Port(socksaddr.Port),
  29. }
  30. }
  31. }
  32. func ToSocksaddr(destination net.Destination) M.Socksaddr {
  33. var addr M.Socksaddr
  34. switch destination.Address.Family() {
  35. case net.AddressFamilyDomain:
  36. addr.Fqdn = destination.Address.Domain()
  37. default:
  38. addr.Addr = M.AddrFromIP(destination.Address.IP())
  39. }
  40. addr.Port = uint16(destination.Port)
  41. return addr
  42. }