From b96d580168ed877fc4cf24f3208066d6fea6e114 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 01 十二月 2022 10:40:49 +0800
Subject: [PATCH] Merge pull request #689 from AlphaWu/Zafu-Dev-1129
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java | 68 ++++++++++++++++++++++-----------
1 files changed, 45 insertions(+), 23 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java
index 72831cf..0aff21d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java
@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.gb28181.transmit;
+import com.genersoft.iot.vmp.gb28181.SipLayer;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
import com.genersoft.iot.vmp.utils.GitUtil;
@@ -7,11 +8,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
import javax.sip.SipException;
-import javax.sip.SipFactory;
import javax.sip.header.CallIdHeader;
import javax.sip.header.UserAgentHeader;
import javax.sip.header.ViaHeader;
@@ -30,15 +30,7 @@
private final Logger logger = LoggerFactory.getLogger(SIPSender.class);
@Autowired
- @Qualifier(value = "tcpSipProvider")
- private SipProviderImpl tcpSipProvider;
-
- @Autowired
- @Qualifier(value = "udpSipProvider")
- private SipProviderImpl udpSipProvider;
-
- @Autowired
- private SipFactory sipFactory;
+ private SipLayer sipLayer;
@Autowired
private GitUtil gitUtil;
@@ -46,25 +38,25 @@
@Autowired
private SipSubscribe sipSubscribe;
- public void transmitRequest(Message message) throws SipException, ParseException {
- transmitRequest(message, null, null);
+ public void transmitRequest(String ip, Message message) throws SipException, ParseException {
+ transmitRequest(ip, message, null, null);
}
- public void transmitRequest(Message message, SipSubscribe.Event errorEvent) throws SipException, ParseException {
- transmitRequest(message, errorEvent, null);
+ public void transmitRequest(String ip, Message message, SipSubscribe.Event errorEvent) throws SipException, ParseException {
+ transmitRequest(ip, message, errorEvent, null);
}
- public void transmitRequest(Message message, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws SipException, ParseException {
+ public void transmitRequest(String ip, Message message, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws SipException, ParseException {
ViaHeader viaHeader = (ViaHeader)message.getHeader(ViaHeader.NAME);
String transport = "UDP";
if (viaHeader == null) {
- logger.warn("[娑堟伅澶寸己澶盷锛� ViaHeader");
+ logger.warn("[娑堟伅澶寸己澶盷锛� ViaHeader锛� 浣跨敤榛樿鐨刄DP鏂瑰紡澶勭悊鏁版嵁");
}else {
transport = viaHeader.getTransport();
}
if (message.getHeader(UserAgentHeader.NAME) == null) {
try {
- message.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
+ message.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
} catch (ParseException e) {
logger.error("娣诲姞UserAgentHeader澶辫触", e);
}
@@ -88,6 +80,11 @@
});
}
if ("TCP".equals(transport)) {
+ SipProviderImpl tcpSipProvider = sipLayer.getTcpSipProvider(ip);
+ if (tcpSipProvider == null) {
+ logger.error("[鍙戦�佷俊鎭け璐 鏈壘鍒皌cp://{}鐨勭洃鍚俊鎭�", ip);
+ return;
+ }
if (message instanceof Request) {
tcpSipProvider.sendRequest((Request)message);
}else if (message instanceof Response) {
@@ -95,16 +92,41 @@
}
} else if ("UDP".equals(transport)) {
+ SipProviderImpl sipProvider = sipLayer.getUdpSipProvider(ip);
+ if (sipProvider == null) {
+ logger.error("[鍙戦�佷俊鎭け璐 鏈壘鍒皍dp://{}鐨勭洃鍚俊鎭�", ip);
+ return;
+ }
if (message instanceof Request) {
- udpSipProvider.sendRequest((Request)message);
+ sipProvider.sendRequest((Request)message);
}else if (message instanceof Response) {
- udpSipProvider.sendResponse((Response)message);
+ sipProvider.sendResponse((Response)message);
}
}
}
- public CallIdHeader getNewCallIdHeader(String transport){
- return transport.equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
- : udpSipProvider.getNewCallId();
+ public CallIdHeader getNewCallIdHeader(String ip, String transport){
+ if (ObjectUtils.isEmpty(transport)) {
+ return sipLayer.getUdpSipProvider().getNewCallId();
+ }
+ SipProviderImpl sipProvider;
+ if (ObjectUtils.isEmpty(ip)) {
+ sipProvider = transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider()
+ : sipLayer.getUdpSipProvider();
+ }else {
+ sipProvider = transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider(ip)
+ : sipLayer.getUdpSipProvider(ip);
+ }
+
+ if (sipProvider == null) {
+ sipProvider = sipLayer.getUdpSipProvider();
+ }
+
+ if (sipProvider != null) {
+ return sipProvider.getNewCallId();
+ }else {
+ logger.warn("[鏂板缓CallIdHeader澶辫触]锛� ip={}, transport={}", ip, transport);
+ return null;
+ }
}
}
--
Gitblit v1.8.0