index.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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 Conn8 net.Conn
  11. var ConnToSlave net.Conn
  12. const RemotePort = 10100
  13. const LocalPort = 10201
  14. const LocalPort8 = 10202
  15. const LocalServerPort = 10000
  16. const RemoteAddr = "10.0.11.11"
  17. const RemoteAddr8 = "10.0.11.81"
  18. func IsIPExists(targetIP string) (bool, error) {
  19. // 解析目标 IP
  20. utils.LoggerDebug.Printf("Checking device IP , Set CabNumber ......")
  21. ip := net.ParseIP(targetIP)
  22. if ip == nil {
  23. return false, fmt.Errorf("invalid IP address: %s", targetIP)
  24. }
  25. interfaces, err := net.Interfaces()
  26. if err != nil {
  27. return false, err
  28. }
  29. for _, iface := range interfaces {
  30. addrs, err := iface.Addrs()
  31. if err != nil {
  32. continue // 忽略无法读取地址的接口
  33. }
  34. for _, addr := range addrs {
  35. if ipnet, ok := addr.(*net.IPNet); ok && ipnet.IP != nil {
  36. // 精确匹配 IP(忽略掩码,只看地址本身是否一致)
  37. if ipnet.IP.Equal(ip) ||
  38. (ip.To4() != nil && ipnet.IP.To4() != nil && ipnet.IP.To4().Equal(ip.To4())) {
  39. return true, nil
  40. }
  41. }
  42. }
  43. }
  44. return false, nil
  45. }
  46. // Get eth0 IP
  47. func SetMasterCabNum() {
  48. count := 0
  49. getIP:
  50. utils.LoggerDebug.Printf("Checking system IP ....")
  51. ext1, err := IsIPExists("10.0.11.11")
  52. if err != nil {
  53. utils.LoggerDebug.Printf("Check IP 10.0.11.11 err :%+v", err)
  54. }
  55. // Init cab1 number and master role
  56. if ext1 {
  57. active.CabNum = "1"
  58. active.Master = true
  59. return
  60. }
  61. ext8, err := IsIPExists("10.0.11.81")
  62. if err != nil {
  63. utils.LoggerDebug.Printf("Check IP 10.0.11.81 err:%+v", err)
  64. }
  65. // Init cab8 number and master role
  66. if ext8 {
  67. active.CabNum = "8"
  68. active.Master = false
  69. return
  70. }
  71. if !(ext1 || ext8) {
  72. if count < 5 {
  73. count++
  74. time.Sleep(time.Second * 2)
  75. goto getIP
  76. }
  77. utils.LoggerDebug.Printf("Can not get device IP ! Set Cabnum=1 Master=true by default .")
  78. active.CabNum = "1"
  79. active.Master = true
  80. }
  81. }