index.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package socket
  2. import (
  3. "fmt"
  4. "net"
  5. "pbx-api-gin/internal/app/stc/active"
  6. "pbx-api-gin/pkg/utils"
  7. "time"
  8. )
  9. var Conn net.Conn
  10. var Conn6 net.Conn
  11. var ConnToSlave net.Conn
  12. const RemotePort = 10100
  13. const LocalPort = 10201
  14. const LocalPort6 = 10202
  15. const LocalServerPort = 10000
  16. // 单列
  17. const RemoteAddr = "10.0.0.101"
  18. const RemoteAddr6 = "10.0.0.106"
  19. // 重联ETBN=1
  20. const Re1RemoteAddr = "10.128.64.101"
  21. const Re1RemoteAddr6 = "10.128.64.106"
  22. // 重联ETBN=2
  23. const Re2RemoteAddr = "10.128.128.101"
  24. const Re2RemoteAddr6 = "10.128.128.106"
  25. func IsIPExists(targetIP string) (bool, error) {
  26. // 解析目标 IP
  27. utils.LoggerDebug.Printf("Checking device IP , Set CabNumber ......")
  28. ip := net.ParseIP(targetIP)
  29. if ip == nil {
  30. return false, fmt.Errorf("invalid IP address: %s", targetIP)
  31. }
  32. interfaces, err := net.Interfaces()
  33. if err != nil {
  34. return false, err
  35. }
  36. for _, iface := range interfaces {
  37. addrs, err := iface.Addrs()
  38. if err != nil {
  39. continue // 忽略无法读取地址的接口
  40. }
  41. for _, addr := range addrs {
  42. if ipnet, ok := addr.(*net.IPNet); ok && ipnet.IP != nil {
  43. // 精确匹配 IP(忽略掩码,只看地址本身是否一致)
  44. if ipnet.IP.Equal(ip) ||
  45. (ip.To4() != nil && ipnet.IP.To4() != nil && ipnet.IP.To4().Equal(ip.To4())) {
  46. return true, nil
  47. }
  48. }
  49. }
  50. }
  51. return false, nil
  52. }
  53. // Get eth0 IP
  54. func SetMasterCabNum() {
  55. count := 0
  56. getIP:
  57. utils.LoggerDebug.Printf("Checking system IP ....")
  58. ext1, err := IsIPExists("10.0.0.101")
  59. if err != nil {
  60. utils.LoggerDebug.Printf("Check IP 10.0.0.101 err :%+v", err)
  61. }
  62. // Init cab1 number and master role
  63. if ext1 {
  64. active.CabNum = "1"
  65. active.Master = true
  66. return
  67. }
  68. ext6, err := IsIPExists("10.0.0.106")
  69. if err != nil {
  70. utils.LoggerDebug.Printf("Check IP 10.0.0.101 err:%+v", err)
  71. }
  72. // Init cab8 number and master role
  73. if ext6 {
  74. active.CabNum = "6"
  75. active.Master = false
  76. return
  77. }
  78. if !(ext1 || ext6) {
  79. if count < 5 {
  80. count++
  81. time.Sleep(time.Second * 2)
  82. goto getIP
  83. }
  84. utils.LoggerDebug.Printf("Can not get device IP ! Set Cabnum=1 Master=true by default .")
  85. active.CabNum = "1"
  86. active.Master = true
  87. }
  88. }