From 5c3c3e6a4c144f77eb832fa9f736967d0bffa220 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 21 四月 2023 14:18:52 +0800
Subject: [PATCH] 修复消息发送失败导致后续次通道无法点播的bug

---
 src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java   |    7 ++++++-
 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java |    4 +++-
 src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java       |    4 ++--
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java   |    6 +-----
 4 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java
index efa4d42..75751ad 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java
@@ -76,7 +76,9 @@
         // 浼氳瘽宸茬粨鏉�
         dialogTerminated,
         // 璁惧鏈壘鍒�
-        deviceNotFoundEvent
+        deviceNotFoundEvent,
+        // 璁惧鏈壘鍒�
+        cmdSendFailEvent
     }
 
     public static class EventResult<EventObject>{
@@ -86,6 +88,9 @@
         public String callId;
         public EventObject event;
 
+        public EventResult() {
+        }
+
         public EventResult(EventObject event) {
             this.event = event;
             if (event instanceof ResponseEvent) {
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 89e6e32..e8066b7 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
@@ -46,8 +46,7 @@
         transmitRequest(ip, message, errorEvent, null);
     }
 
-    public void transmitRequest(String ip, Message message, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws SipException, ParseException {
-        try {
+    public void transmitRequest(String ip, Message message, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws SipException {
             ViaHeader viaHeader = (ViaHeader)message.getHeader(ViaHeader.NAME);
             String transport = "UDP";
             if (viaHeader == null) {
@@ -104,9 +103,6 @@
                     sipProvider.sendResponse((Response)message);
                 }
             }
-        } finally {
-//            logger.info("[SEND]:SUCCESS:{}", message);
-        }
     }
 
     public CallIdHeader getNewCallIdHeader(String ip, String transport){
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 f983150..1f4632e 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
@@ -142,8 +142,8 @@
             remotePort = request.getTopmostViaHeader().getRPort();
             // 瑙f瀽鏈湴鍦板潃鏇夸唬
             if (ObjectUtils.isEmpty(remoteAddress) || remotePort == -1) {
-                remoteAddress = request.getTopmostViaHeader().getHost();
-                remotePort = request.getTopmostViaHeader().getPort();
+                remoteAddress = request.getRemoteAddress().getHostAddress();
+                remotePort = request.getRemotePort();
             }
         }
 
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index a18d8ba..aead661 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -398,7 +398,9 @@
             mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
 
             streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
-            SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new CmdSendFailEvent(null));
+            SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult();
+            eventResult.type = SipSubscribe.EventResultType.cmdSendFailEvent;
+            eventResult.statusCode = -1;
             eventResult.msg = "鍛戒护鍙戦�佸け璐�";
             errorEvent.response(eventResult);
         }

--
Gitblit v1.8.0