From 712b25fb6eea8e85fd2c43d2956529312afdd3dc Mon Sep 17 00:00:00 2001
From: lawrencehj <1934378145@qq.com>
Date: 星期日, 14 三月 2021 21:25:52 +0800
Subject: [PATCH] 增加上级远程启动TeleBoot功能的支持
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 143 +++++++++++++++++++++++++++++++++--------------
1 files changed, 101 insertions(+), 42 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index 0bd78bd..16698f9 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -5,6 +5,7 @@
import java.util.*;
import javax.sip.header.FromHeader;
+import javax.sip.header.HeaderAddress;
import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent;
import javax.sip.SipException;
@@ -12,6 +13,7 @@
import javax.sip.message.Response;
import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.VManageBootstrap;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetup;
@@ -114,10 +116,10 @@
logger.info("鎺ユ敹鍒癈atalog娑堟伅");
processMessageCatalogList(evt);
} else if (MESSAGE_DEVICE_INFO.equals(cmd)) {
- logger.info("鎺ユ敹鍒癉eviceInfo娑堟伅");
+ //DeviceInfo娑堟伅澶勭悊
processMessageDeviceInfo(evt);
} else if (MESSAGE_DEVICE_STATUS.equals(cmd)) {
- logger.info("鎺ユ敹鍒癉eviceStatus娑堟伅");
+ // DeviceStatus娑堟伅澶勭悊
processMessageDeviceStatus(evt);
} else if (MESSAGE_DEVICE_CONTROL.equals(cmd)) {
logger.info("鎺ユ敹鍒癉eviceControl娑堟伅");
@@ -211,27 +213,48 @@
private void processMessageDeviceStatus(RequestEvent evt) {
try {
Element rootElement = getRootElement(evt);
- String deviceId = XmlUtil.getText(rootElement, "DeviceID");
- // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦紝 涓嶅瓨鍦ㄥ垯涓嶅洖澶�
- if (storager.exists(deviceId)) {
- // 鍥炲200 OK
- responseAck(evt);
- JSONObject json = new JSONObject();
- XmlUtil.node2Json(rootElement, json);
- if (logger.isDebugEnabled()) {
- logger.debug(json.toJSONString());
- }
- RequestMessage msg = new RequestMessage();
- msg.setDeviceId(deviceId);
- msg.setType(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS);
- msg.setData(json);
- deferredResultHolder.invokeResult(msg);
+ String name = rootElement.getName();
+ Element deviceIdElement = rootElement.element("DeviceID");
+ String deviceId = deviceIdElement.getText();
- if (offLineDetector.isOnline(deviceId)) {
- publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+ if (name.equalsIgnoreCase("Query")) { // 鍖哄垎鏄疪esponse鈥斺�旀煡璇㈠搷搴旓紝杩樻槸Query鈥斺�旀煡璇㈣姹�
+ logger.info("鎺ユ敹鍒癉eviceStatus鏌ヨ娑堟伅");
+ FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
+ String platformId = ((SipUri) fromHeader.getAddress().getURI()).getUser();
+ if (platformId == null) {
+ response404Ack(evt);
+ return;
} else {
+ // 鍥炲200 OK
+ responseAck(evt);
+ String sn = rootElement.element("SN").getText();
+ ParentPlatform parentPlatform = storager.queryParentPlatById(platformId);
+ cmderFroPlatform.deviceStatusResponse(parentPlatform, sn, fromHeader.getTag());
+ }
+ } else {
+ logger.info("鎺ユ敹鍒癉eviceStatus搴旂瓟娑堟伅");
+ // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦紝 涓嶅瓨鍦ㄥ垯涓嶅洖澶�
+ if (storager.exists(deviceId)) {
+ // 鍥炲200 OK
+ responseAck(evt);
+ JSONObject json = new JSONObject();
+ XmlUtil.node2Json(rootElement, json);
+ if (logger.isDebugEnabled()) {
+ logger.debug(json.toJSONString());
+ }
+ RequestMessage msg = new RequestMessage();
+ msg.setDeviceId(deviceId);
+ msg.setType(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS);
+ msg.setData(json);
+ deferredResultHolder.invokeResult(msg);
+
+ if (offLineDetector.isOnline(deviceId)) {
+ publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+ } else {
+ }
}
}
+
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
e.printStackTrace();
}
@@ -263,6 +286,25 @@
deferredResultHolder.invokeResult(msg);
} else {
// 姝ゅ鏄笂绾у彂鍑虹殑DeviceControl鎸囦护
+ if (XmlUtil.getText(rootElement, "TeleBoot").equals("Boot") && false) { // 杩滅▼鍚姩鍔熻兘锛氶渶瑕佸湪閲嶆柊鍚姩绋嬪簭鍚庡厛瀵筍ipStack瑙g粦
+ String platformId = ((SipUri) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
+ logger.info("鎵ц杩滅▼鍚姩鍛戒护");
+ ParentPlatform parentPlatform = storager.queryParentPlatById(platformId);
+ cmderFroPlatform.unregister(parentPlatform, null, null);
+
+ Thread restartThread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(1000);
+ VManageBootstrap.restart();
+ } catch (InterruptedException ignored) {
+ }
+ }
+ });
+ restartThread.setDaemon(false);
+ restartThread.start();
+ }
}
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
e.printStackTrace();
@@ -370,31 +412,48 @@
private void processMessageDeviceInfo(RequestEvent evt) {
try {
Element rootElement = getRootElement(evt);
+ String requestName = rootElement.getName();
Element deviceIdElement = rootElement.element("DeviceID");
String deviceId = deviceIdElement.getTextTrim().toString();
-
- Device device = storager.queryVideoDevice(deviceId);
- if (device == null) {
- return;
- }
- device.setName(XmlUtil.getText(rootElement, "DeviceName"));
- device.setManufacturer(XmlUtil.getText(rootElement, "Manufacturer"));
- device.setModel(XmlUtil.getText(rootElement, "Model"));
- device.setFirmware(XmlUtil.getText(rootElement, "Firmware"));
- if (StringUtils.isEmpty(device.getStreamMode())) {
- device.setStreamMode("UDP");
- }
- storager.updateDevice(device);
-
- RequestMessage msg = new RequestMessage();
- msg.setDeviceId(deviceId);
- msg.setType(DeferredResultHolder.CALLBACK_CMD_DEVICEINFO);
- msg.setData(device);
- deferredResultHolder.invokeResult(msg);
- // 鍥炲200 OK
- responseAck(evt);
- if (offLineDetector.isOnline(deviceId)) {
- publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+ if (requestName.equals("Query")) {
+ logger.info("鎺ユ敹鍒癉eviceInfo鏌ヨ娑堟伅");
+ FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
+ String platformId = ((SipUri) fromHeader.getAddress().getURI()).getUser();
+ if (platformId == null) {
+ response404Ack(evt);
+ return;
+ } else {
+ // 鍥炲200 OK
+ responseAck(evt);
+ String sn = rootElement.element("SN").getText();
+ ParentPlatform parentPlatform = storager.queryParentPlatById(platformId);
+ cmderFroPlatform.deviceInfoResponse(parentPlatform, sn, fromHeader.getTag());
+ }
+ } else {
+ logger.info("鎺ユ敹鍒癉eviceInfo搴旂瓟娑堟伅");
+ Device device = storager.queryVideoDevice(deviceId);
+ if (device == null) {
+ return;
+ }
+ device.setName(XmlUtil.getText(rootElement, "DeviceName"));
+ device.setManufacturer(XmlUtil.getText(rootElement, "Manufacturer"));
+ device.setModel(XmlUtil.getText(rootElement, "Model"));
+ device.setFirmware(XmlUtil.getText(rootElement, "Firmware"));
+ if (StringUtils.isEmpty(device.getStreamMode())) {
+ device.setStreamMode("UDP");
+ }
+ storager.updateDevice(device);
+
+ RequestMessage msg = new RequestMessage();
+ msg.setDeviceId(deviceId);
+ msg.setType(DeferredResultHolder.CALLBACK_CMD_DEVICEINFO);
+ msg.setData(device);
+ deferredResultHolder.invokeResult(msg);
+ // 鍥炲200 OK
+ responseAck(evt);
+ if (offLineDetector.isOnline(deviceId)) {
+ publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+ }
}
} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
e.printStackTrace();
--
Gitblit v1.8.0