From f331b0b0d3dc72e3489f6c241b02475d3323e124 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期四, 18 七月 2024 14:08:05 +0800 Subject: [PATCH] Merge pull request #1524 from ZhaoYandong00/master --- src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | 61 ++++++++++++++++++++++++++---- 1 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java index 56663f1..afdbb49 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java @@ -16,6 +16,9 @@ import org.springframework.util.ObjectUtils; import javax.sip.*; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -36,19 +39,52 @@ private final Map<String, SipProviderImpl> tcpSipProviderMap = new ConcurrentHashMap<>(); private final Map<String, SipProviderImpl> udpSipProviderMap = new ConcurrentHashMap<>(); + private final List<String> monitorIps = new ArrayList<>(); @Override public void run(String... args) { - List<String> monitorIps = new ArrayList<>(); - // 浣跨敤閫楀彿鍒嗗壊澶氫釜ip - String separator = ","; - if (sipConfig.getIp().indexOf(separator) > 0) { - String[] split = sipConfig.getIp().split(separator); - monitorIps.addAll(Arrays.asList(split)); + if (ObjectUtils.isEmpty(sipConfig.getIp())) { + try { + // 鑾峰緱鏈満鐨勬墍鏈夌綉缁滄帴鍙� + Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces(); + while (nifs.hasMoreElements()) { + NetworkInterface nif = nifs.nextElement(); + // 鑾峰緱涓庤缃戠粶鎺ュ彛缁戝畾鐨� IP 鍦板潃锛屼竴鑸彧鏈変竴涓� + Enumeration<InetAddress> addresses = nif.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress addr = addresses.nextElement(); + if (addr instanceof Inet4Address) { + if (addr.getHostAddress().equals("127.0.0.1")){ + continue; + } + if (nif.getName().startsWith("docker")) { + continue; + } + logger.info("[鑷姩閰嶇疆SIP鐩戝惉缃戝崱] 缃戝崱鎺ュ彛鍦板潃锛� {}", addr.getHostAddress());// 鍙叧蹇� IPv4 鍦板潃 + monitorIps.add(addr.getHostAddress()); + } + } + } + }catch (Exception e) { + logger.error("[璇诲彇缃戝崱淇℃伅澶辫触]", e); + } + if (monitorIps.isEmpty()) { + logger.error("[鑷姩閰嶇疆SIP鐩戝惉缃戝崱淇℃伅澶辫触]锛� 璇锋墜鍔ㄩ厤缃甋IP.IP鍚庨噸鏂板惎鍔�"); + System.exit(1); + } }else { - monitorIps.add(sipConfig.getIp()); + // 浣跨敤閫楀彿鍒嗗壊澶氫釜ip + String separator = ","; + if (sipConfig.getIp().indexOf(separator) > 0) { + String[] split = sipConfig.getIp().split(separator); + monitorIps.addAll(Arrays.asList(split)); + }else { + monitorIps.add(sipConfig.getIp()); + } } - + if (ObjectUtils.isEmpty(sipConfig.getShowIp())){ + sipConfig.setShowIp(String.join(",", monitorIps)); + } SipFactory.getInstance().setPathName("gov.nist"); if (monitorIps.size() > 0) { for (String monitorIp : monitorIps) { @@ -105,6 +141,9 @@ } public SipProviderImpl getUdpSipProvider(String ip) { + if (udpSipProviderMap.size() == 1) { + return udpSipProviderMap.values().stream().findFirst().get(); + } if (ObjectUtils.isEmpty(ip)) { return null; } @@ -126,6 +165,9 @@ } public SipProviderImpl getTcpSipProvider(String ip) { + if (tcpSipProviderMap.size() == 1) { + return tcpSipProviderMap.values().stream().findFirst().get(); + } if (ObjectUtils.isEmpty(ip)) { return null; } @@ -133,6 +175,9 @@ } public String getLocalIp(String deviceLocalIp) { + if (monitorIps.size() == 1) { + return monitorIps.get(0); + } if (!ObjectUtils.isEmpty(deviceLocalIp)) { return deviceLocalIp; } -- Gitblit v1.8.0