From db8971302a848875e50acfb7c2a5403461567efc Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 22 二月 2023 15:53:33 +0800 Subject: [PATCH] 完善支持语音级联 --- src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java index d97450f..45c5a90 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java @@ -1,9 +1,12 @@ package com.genersoft.iot.vmp.gb28181.utils; +import com.genersoft.iot.vmp.gb28181.bean.RemoteAddressInfo; import com.genersoft.iot.vmp.utils.GitUtil; import gov.nist.javax.sip.address.AddressImpl; import gov.nist.javax.sip.address.SipUri; import gov.nist.javax.sip.header.Subject; +import gov.nist.javax.sip.message.SIPRequest; +import org.springframework.util.ObjectUtils; import javax.sip.PeerUnavailableException; import javax.sip.SipFactory; @@ -52,10 +55,15 @@ public static UserAgentHeader createUserAgentHeader(SipFactory sipFactory, GitUtil gitUtil) throws PeerUnavailableException, ParseException { List<String> agentParam = new ArrayList<>(); - agentParam.add("WVP-Pro v"); - if (gitUtil != null && gitUtil.getCommitTime() != null) { - agentParam.add(gitUtil.getBuildVersion() + "."); - agentParam.add(gitUtil.getCommitTime()); + agentParam.add("WVP-Pro "); + if (gitUtil != null ) { + if (!ObjectUtils.isEmpty(gitUtil.getBuildVersion())) { + agentParam.add("v"); + agentParam.add(gitUtil.getBuildVersion() + "."); + } + if (!ObjectUtils.isEmpty(gitUtil.getCommitTime())) { + agentParam.add(gitUtil.getCommitTime()); + } } return sipFactory.createHeaderFactory().createUserAgentHeader(agentParam); } @@ -116,4 +124,48 @@ public static String getNewCallId() { return (int) Math.floor(Math.random() * 10000) + ""; } + + public static int getTypeCodeFromGbCode(String deviceId) { + if (ObjectUtils.isEmpty(deviceId)) { + return 0; + } + return Integer.parseInt(deviceId.substring(10, 13)); + } + + /** + * 鍒ゆ柇鏄惁鏄墠绔鍥磋澶� + * @param deviceId + * @return + */ + public static boolean isFrontEnd(String deviceId) { + int typeCodeFromGbCode = getTypeCodeFromGbCode(deviceId); + return typeCodeFromGbCode > 130 && typeCodeFromGbCode < 199; + } + /** + * 浠庤姹備腑鑾峰彇璁惧ip鍦板潃鍜岀鍙e彿 + * @param request 璇锋眰 + * @param sipUseSourceIpAsRemoteAddress false 浠巚ia涓幏鍙栧湴鍧�锛� true 鐩存帴鑾峰彇杩滅▼鍦板潃 + * @return 鍦板潃淇℃伅 + */ + public static RemoteAddressInfo getRemoteAddressFromRequest(SIPRequest request, boolean sipUseSourceIpAsRemoteAddress) { + + String remoteAddress; + int remotePort; + if (sipUseSourceIpAsRemoteAddress) { + remoteAddress = request.getRemoteAddress().getHostAddress(); + remotePort = request.getRemotePort(); + }else { + // 鍒ゆ柇RPort鏄惁鏀瑰彉锛屾敼鍙樺垯璇存槑璺敱nat淇℃伅鍙樺寲锛屼慨鏀硅澶囦俊鎭� + // 鑾峰彇鍒伴�氫俊鍦板潃绛変俊鎭� + remoteAddress = request.getTopmostViaHeader().getReceived(); + remotePort = request.getTopmostViaHeader().getRPort(); + // 瑙f瀽鏈湴鍦板潃鏇夸唬 + if (ObjectUtils.isEmpty(remoteAddress) || remotePort == -1) { + remoteAddress = request.getTopmostViaHeader().getHost(); + remotePort = request.getTopmostViaHeader().getPort(); + } + } + + return new RemoteAddressInfo(remoteAddress, remotePort); + } } -- Gitblit v1.8.0