From 1553b39b4547418774ab2bd6da72f75bfd14b972 Mon Sep 17 00:00:00 2001
From: 648540858 <456panlinlin>
Date: 星期二, 29 三月 2022 10:04:28 +0800
Subject: [PATCH] 修复级联的国标通道无经纬度问题

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java |   26 ++++++++++++++++++--------
 1 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
index 3f14e23..cb8b723 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
@@ -10,6 +10,7 @@
 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
 import gov.nist.javax.sip.RequestEventExt;
 import gov.nist.javax.sip.address.AddressImpl;
@@ -52,6 +53,9 @@
 	private RegisterLogicHandler handler;
 
 	@Autowired
+	private IRedisCatchStorage redisCatchStorage;
+
+	@Autowired
 	private IVideoManagerStorager storager;
 
 	@Autowired
@@ -77,7 +81,7 @@
 			String requestAddress = evtExt.getRemoteIpAddress() + ":" + evtExt.getRemotePort();
 			logger.info("[{}] 鏀跺埌娉ㄥ唽璇锋眰锛屽紑濮嬪鐞�", requestAddress);
 			Request request = evt.getRequest();
-
+			ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
 			Response response = null; 
 			boolean passwordCorrect = false;
 			// 娉ㄥ唽鏍囧織  0锛氭湭鎼哄甫鎺堟潈澶存垨鑰呭瘑鐮侀敊璇�  1锛氭敞鍐屾垚鍔�   2锛氭敞閿�鎴愬姛
@@ -86,8 +90,13 @@
 			AddressImpl address = (AddressImpl) fromHeader.getAddress();
 			SipUri uri = (SipUri) address.getURI();
 			String deviceId = uri.getUser();
+			Device deviceInRedis = redisCatchStorage.getDevice(deviceId);
 			Device device = storager.queryVideoDevice(deviceId);
-			AuthorizationHeader authorhead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME); 
+			if (deviceInRedis != null && device == null) {
+				// redis 瀛樺湪鑴忔暟鎹�
+				redisCatchStorage.clearCatchByDeviceId(deviceId);
+			}
+			AuthorizationHeader authorhead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME);
 			// 鏍¢獙瀵嗙爜鏄惁姝g‘
 			if (authorhead != null) {
 				passwordCorrect = new DigestServerAuthenticationHelper().doAuthenticatePlainTextPassword(request,
@@ -119,7 +128,7 @@
 					dateHeader.setDate(wvpSipDate);
 					response.addHeader(dateHeader);
 
-					ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
+
 					if (expiresHeader == null) {
 						response = getMessageFactory().createResponse(Response.BAD_REQUEST, request);
 						ServerTransaction serverTransaction = getServerTransaction(evt);
@@ -146,9 +155,13 @@
 					if (device == null) {
 						device = new Device();
 						device.setStreamMode("UDP");
-						device.setCharset("gb2312");
+						device.setCharset("GB2312");
 						device.setDeviceId(deviceId);
 						device.setFirsRegister(true);
+					}else {
+						if (device.getOnline() == 0) {
+							device.setFirsRegister(true);
+						}
 					}
 					device.setIp(received);
 					device.setPort(rPort);
@@ -178,12 +191,9 @@
 			if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
 			// 娉ㄥ唽鎴愬姛
 			// 淇濆瓨鍒皉edis
-			// 涓嬪彂catelog鏌ヨ鐩綍
 			if (registerFlag == 1 ) {
 				logger.info("[{}] 娉ㄥ唽鎴愬姛! deviceId:" + device.getDeviceId(), requestAddress);
-				publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER);
-				// 閲嶆柊娉ㄥ唽鏇存柊璁惧鍜岄�氶亾锛屼互鍏嶈澶囨浛鎹㈡垨鏇存柊鍚庝俊鎭棤娉曟洿鏂�
-				handler.onRegister(device);
+				publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER, expiresHeader.getExpires());
 			} else if (registerFlag == 2) {
 				logger.info("[{}] 娉ㄩ攢鎴愬姛! deviceId:" + device.getDeviceId(), requestAddress);
 				publisher.outlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_OUTLINE_UNREGISTER);

--
Gitblit v1.8.0