From 66a76eadd5a8444a9f70574d90ae878c89f38a4c Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 11 八月 2023 09:11:50 +0800
Subject: [PATCH] Merge pull request #996 from lunasaw/dev-0810

---
 src/main/java/com/genersoft/iot/vmp/conf/CivilCodeFileConf.java                                       |    5 ++
 src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java                               |    3 +
 src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java                                       |    2 
 src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java                             |    2 
 src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java                          |   19 ++++++++-
 src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java                                      |   25 ++++++++++++
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java                |    2 +
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java   |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java |   15 +++++--
 src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java                                        |    3 +
 src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java                                             |    5 +-
 src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java                             |    2 
 12 files changed, 68 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/conf/CivilCodeFileConf.java b/src/main/java/com/genersoft/iot/vmp/conf/CivilCodeFileConf.java
index 39e0a70..20b6eef 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/CivilCodeFileConf.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/CivilCodeFileConf.java
@@ -12,7 +12,10 @@
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.util.ObjectUtils;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.nio.file.Files;
 import java.util.Map;
 
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
index 873feab..5a451e3 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
@@ -111,7 +111,7 @@
         }
         boolean result = false;
         if (!ObjectUtils.isEmpty(futureMap.get(key)) && !futureMap.get(key).isCancelled() && !futureMap.get(key).isDone()) {
-            result = futureMap.get(key).cancel(true);
+            result = futureMap.get(key).cancel(false);
             futureMap.remove(key);
             runnableMap.remove(key);
         }
@@ -143,7 +143,8 @@
     public void execute(){
         if (futureMap.size() > 0) {
             for (String key : futureMap.keySet()) {
-                if (futureMap.get(key).isDone() || futureMap.get(key).isCancelled()) {
+                ScheduledFuture<?> future = futureMap.get(key);
+                if (future.isDone() || future.isCancelled()) {
                     futureMap.remove(key);
                     runnableMap.remove(key);
                 }
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java
index f3fd1d8..a7416a8 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/ProxyServletConfig.java
@@ -18,6 +18,7 @@
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.ConnectException;
 
@@ -62,6 +63,18 @@
                 }
             }
             return queryStr;
+        }
+
+
+        @Override
+        protected HttpResponse doExecute(HttpServletRequest servletRequest, HttpServletResponse servletResponse,
+                                         HttpRequest proxyRequest) throws IOException {
+            HttpResponse response = super.doExecute(servletRequest, servletResponse, proxyRequest);
+            response.removeHeaders("Access-Control-Allow-Origin");
+            response.setHeader("Access-Control-Allow-Credentials","true");
+            response.removeHeaders("Access-Control-Allow-Credentials");
+
+            return response;
         }
 
         /**
@@ -181,6 +194,18 @@
             return queryStr;
         }
 
+
+        @Override
+        protected HttpResponse doExecute(HttpServletRequest servletRequest, HttpServletResponse servletResponse,
+                                         HttpRequest proxyRequest) throws IOException {
+            HttpResponse response = super.doExecute(servletRequest, servletResponse, proxyRequest);
+            String origin = servletRequest.getHeader("origin");
+            response.setHeader("Access-Control-Allow-Origin",origin);
+            response.setHeader("Access-Control-Allow-Credentials","true");
+
+            return response;
+        }
+
         /**
          * 寮傚父澶勭悊
          */
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java b/src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java
index c9c7b68..05faba5 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java
@@ -35,7 +35,7 @@
     /**
      * token杩囨湡鏃堕棿(鍒嗛挓)
      */
-    public static final long expirationTime = 30;
+    public static final long expirationTime = 30 * 24 * 60;
 
     public static String createToken(String username, String password, Integer roleId) {
         try {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
index 0332aab..a4558c7 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
@@ -20,6 +20,8 @@
     void register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException;
 
     void register(ParentPlatform parentPlatform, SipTransactionInfo sipTransactionInfo, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException;
+
+
     void register(ParentPlatform parentPlatform, SipTransactionInfo sipTransactionInfo, WWWAuthenticateHeader www, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean isRegister) throws SipException, InvalidArgumentException, ParseException;
 
     /**
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
index d44ff5a..64a6478 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
@@ -132,7 +132,7 @@
 
 						if (CmdType.CATALOG.equals(cmd)) {
 							logger.info("鎺ユ敹鍒癈atalog閫氱煡");
-//							processNotifyCatalogList(take.getEvt());
+							processNotifyCatalogList(take.getEvt());
 							notifyRequestForCatalogProcessor.process(take.getEvt());
 						} else if (CmdType.ALARM.equals(cmd)) {
 							logger.info("鎺ユ敹鍒癆larm閫氱煡");
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 ceeb3b1..761781c 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
@@ -85,7 +85,11 @@
             Response response = null;
             boolean passwordCorrect = false;
             // 娉ㄥ唽鏍囧織
-            boolean registerFlag;
+            boolean registerFlag = true;
+            if (request.getExpires().getExpires() == 0) {
+                // 娉ㄩ攢鎴愬姛
+                registerFlag = false;
+            }
             FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME);
             AddressImpl address = (AddressImpl) fromHeader.getAddress();
             SipUri uri = (SipUri) address.getURI();
@@ -96,11 +100,12 @@
             RemoteAddressInfo remoteAddressInfo = SipUtils.getRemoteAddressFromRequest(request,
                     userSetting.getSipUseSourceIpAsRemoteAddress());
             String requestAddress = remoteAddressInfo.getIp() + ":" + remoteAddressInfo.getPort();
-                    logger.info("[娉ㄥ唽璇锋眰] 璁惧锛歿}, 寮�濮嬪鐞�: {}", deviceId, requestAddress);
+            String title = registerFlag ? "[娉ㄥ唽璇锋眰]": "[娉ㄩ攢璇锋眰]";
+                    logger.info(title + "璁惧锛歿}, 寮�濮嬪鐞�: {}", deviceId, requestAddress);
             if (device != null &&
                 device.getSipTransactionInfo() != null &&
                 request.getCallIdHeader().getCallId().equals(device.getSipTransactionInfo().getCallId())) {
-                logger.info("[娉ㄥ唽璇锋眰] 璁惧锛歿}, 娉ㄥ唽缁: {}",device.getDeviceId(), device.getDeviceId());
+                logger.info(title + "璁惧锛歿}, 娉ㄥ唽缁: {}",device.getDeviceId(), device.getDeviceId());
                 device.setExpires(request.getExpires().getExpires());
                 device.setIp(remoteAddressInfo.getIp());
                 device.setPort(remoteAddressInfo.getPort());
@@ -120,7 +125,7 @@
             String password = (device != null && !ObjectUtils.isEmpty(device.getPassword()))? device.getPassword() : sipConfig.getPassword();
             AuthorizationHeader authHead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME);
             if (authHead == null && !ObjectUtils.isEmpty(password)) {
-                logger.info("[娉ㄥ唽璇锋眰] 璁惧锛歿}, 鍥炲401: {}",deviceId, requestAddress);
+                logger.info(title + " 璁惧锛歿}, 鍥炲401: {}",deviceId, requestAddress);
                 response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request);
                 new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain());
                 sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
@@ -135,7 +140,7 @@
                 // 娉ㄥ唽澶辫触
                 response = getMessageFactory().createResponse(Response.FORBIDDEN, request);
                 response.setReasonPhrase("wrong password");
-                logger.info("[娉ㄥ唽璇锋眰] 璁惧锛歿}, 瀵嗙爜/SIP鏈嶅姟鍣↖D閿欒, 鍥炲403: {}", deviceId, requestAddress);
+                logger.info(title + " 璁惧锛歿}, 瀵嗙爜/SIP鏈嶅姟鍣↖D閿欒, 鍥炲403: {}", deviceId, requestAddress);
                 sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
                 return;
             }
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
index 17e8e21..b484806 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -108,6 +108,7 @@
             inviteStreamService.clearInviteInfo(device.getDeviceId());
         }
         device.setUpdateTime(now);
+        device.setKeepaliveTime(now);
         if (device.getKeepaliveIntervalTime() == 0) {
             // 榛樿蹇冭烦闂撮殧60
             device.setKeepaliveIntervalTime(60);
@@ -209,7 +210,7 @@
         redisCatchStorage.updateDevice(device);
         deviceMapper.update(device);
         //杩涜閫氶亾绂荤嚎
-//        deviceChannelMapper.offlineByDeviceId(deviceId);
+        deviceChannelMapper.offlineByDeviceId(deviceId);
         // 绂荤嚎閲婃斁鎵�鏈塻src
         List<SsrcTransaction> ssrcTransactions = streamSession.getSsrcTransactionForAll(deviceId, null, null, null);
         if (ssrcTransactions != null && ssrcTransactions.size() > 0) {
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
index b75b477..86ee0f4 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformServiceImpl.java
@@ -234,7 +234,6 @@
                                         // 璁剧疆骞冲彴绂荤嚎锛屽苟閲嶆柊娉ㄥ唽
                                         logger.info("[鍥芥爣绾ц仈] 涓夋蹇冭烦瓒呮椂, 骞冲彴{}({})绂荤嚎", parentPlatform.getName(), parentPlatform.getServerGBId());
                                         offline(parentPlatform, false);
-
                                     }
 
                                 }else {
@@ -249,6 +248,7 @@
                                     platformCatch.setKeepAliveReply(0);
                                     redisCatchStorage.updatePlatformCatchInfo(platformCatch);
                                 }
+                                logger.info("[鍙戦�佸績璺砞 鍥芥爣绾ц仈 鍙戦�佸績璺�, code锛� {}, msg: {}", eventResult.statusCode, eventResult.msg);
                             });
                         } catch (SipException | InvalidArgumentException | ParseException e) {
                             logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 鍙戦�佸績璺�: {}", e.getMessage());
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
index bdc45bf..d48b802 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
@@ -193,7 +193,7 @@
     @Update(value = {"UPDATE wvp_device_channel SET status=false WHERE device_id=#{deviceId} AND channel_id=#{channelId}"})
     void offline(String deviceId,  String channelId);
 
-    @Update(value = {"UPDATE wvp_device_channel SET status=fasle WHERE device_id=#{deviceId}"})
+    @Update(value = {"UPDATE wvp_device_channel SET status=false WHERE device_id=#{deviceId}"})
     void offlineByDeviceId(String deviceId);
 
     @Insert("<script> " +
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
index 8b23f22..0f1509f 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
@@ -16,6 +16,7 @@
 import com.genersoft.iot.vmp.service.bean.MessageForPushChannel;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
+import com.genersoft.iot.vmp.storager.dao.DeviceMapper;
 import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo;
 import com.genersoft.iot.vmp.utils.DateUtil;
 import com.genersoft.iot.vmp.utils.JsonUtil;
@@ -39,6 +40,9 @@
 
     @Autowired
     private DeviceChannelMapper deviceChannelMapper;
+
+    @Autowired
+    private DeviceMapper deviceMapper;
 
     @Autowired
     private UserSetting userSetting;
@@ -375,7 +379,8 @@
         for (Object o : keys) {
             String key = (String) o;
             Device device = JsonUtil.redisJsonToObject(redisTemplate, key, Device.class);
-            if (Objects.nonNull(device)) { // 鍙彇娌℃湁瀛樿繃寰�
+            if (Objects.nonNull(device)) {
+                // 鍙彇娌℃湁瀛樿繃寰�
                 result.add(JsonUtil.redisJsonToObject(redisTemplate, key, Device.class));
             }
         }
@@ -386,14 +391,22 @@
     @Override
     public Device getDevice(String deviceId) {
         String key = VideoManagerConstants.DEVICE_PREFIX + userSetting.getServerId() + "_" + deviceId;
-        return JsonUtil.redisJsonToObject(redisTemplate, key, Device.class);
+        Device device = JsonUtil.redisJsonToObject(redisTemplate, key, Device.class);
+        if (device == null){
+            device = deviceMapper.getDeviceByDeviceId(deviceId);
+            if (device != null) {
+                updateDevice(device);
+            }
+        }
+        return device;
     }
 
     @Override
     public void updateGpsMsgInfo(GPSMsgInfo gpsMsgInfo) {
         String key = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetting.getServerId() + "_" + gpsMsgInfo.getId();
         Duration duration = Duration.ofSeconds(60L);
-        redisTemplate.opsForValue().set(key, gpsMsgInfo, duration); // 榛樿GPS娑堟伅淇濆瓨1鍒嗛挓
+        redisTemplate.opsForValue().set(key, gpsMsgInfo, duration);
+        // 榛樿GPS娑堟伅淇濆瓨1鍒嗛挓
     }
 
     @Override
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
index 31e89f9..48369d4 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
@@ -1,5 +1,6 @@
 package com.genersoft.iot.vmp.utils.redis;
 
+import com.google.common.collect.Lists;
 import org.springframework.data.redis.core.Cursor;
 import org.springframework.data.redis.core.RedisCallback;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -38,7 +39,7 @@
             return keys;
         });
 
-        return new ArrayList<>(resultKeys);
+        return Lists.newArrayList(resultKeys);
     }
 }
 

--
Gitblit v1.8.0