From 98d12ecd6bdc49e6bed86eda4f55ab75e940ca36 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 11 三月 2022 09:49:48 +0800
Subject: [PATCH] Merge pull request #388 from AbnerSC/wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java | 36 +++++++++++++++++++++++-------------
1 files changed, 23 insertions(+), 13 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 e16043d..cfc61c4 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
@@ -8,7 +8,9 @@
import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
-import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorAbstract;
+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;
@@ -17,6 +19,7 @@
import gov.nist.javax.sip.header.SIPDateHeader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@@ -33,13 +36,11 @@
import java.util.Calendar;
import java.util.Locale;
-/**
- * @description:鏀跺埌娉ㄥ唽璇锋眰 澶勭悊
- * @author: swwheihei
- * @date: 2020骞�5鏈�3鏃� 涓嬪崍4:47:25
+/**
+ * SIP鍛戒护绫诲瀷锛� REGISTER璇锋眰
*/
@Component
-public class RegisterRequestProcessor extends SIPRequestProcessorAbstract {
+public class RegisterRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
private Logger logger = LoggerFactory.getLogger(RegisterRequestProcessor.class);
@@ -50,6 +51,9 @@
@Autowired
private RegisterLogicHandler handler;
+
+ @Autowired
+ private IRedisCatchStorage redisCatchStorage;
@Autowired
private IVideoManagerStorager storager;
@@ -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);
@@ -149,6 +158,10 @@
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