From 1ab73f69ebdb30cdf8aeb5437c307df34bc0f6a6 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 26 十月 2022 17:15:29 +0800
Subject: [PATCH] 支持多网卡

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java |   47 ++++++++++++++++++++++++++---------------------
 1 files changed, 26 insertions(+), 21 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..a240ce4 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,9 +1,11 @@
 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;
 import gov.nist.javax.sip.SipProviderImpl;
+import gov.nist.javax.sip.message.SIPRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,6 +20,7 @@
 import javax.sip.message.Message;
 import javax.sip.message.Request;
 import javax.sip.message.Response;
+import java.net.InetAddress;
 import java.text.ParseException;
 
 /**
@@ -30,15 +33,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 +41,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 +83,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 +95,21 @@
             }
 
         } 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){
+        return  transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider(ip).getNewCallId()
+                : sipLayer.getUdpSipProvider(ip).getNewCallId();
     }
 }

--
Gitblit v1.8.0