From 497e581e5e26840400f5f2cd1cf083c3de5e66c2 Mon Sep 17 00:00:00 2001 From: 648540858 <18010473990@163.com> Date: 星期一, 27 九月 2021 15:36:41 +0800 Subject: [PATCH] 处理报警和位置上报时使用fromHeader获取deviceId, xml的deviceId作为channelId使用。 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 84 ++++++++++++++++++++++++++++++----------- 1 files changed, 61 insertions(+), 23 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 bd7bfd5..f76048c 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,9 +5,11 @@ import java.util.*; import javax.sip.*; +import javax.sip.address.Address; import javax.sip.address.SipURI; import javax.sip.header.FromHeader; +import javax.sip.header.Header; import javax.sip.header.HeaderAddress; import javax.sip.header.ToHeader; import javax.sip.message.Request; @@ -34,6 +36,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.genersoft.iot.vmp.utils.GpsUtil; +import com.genersoft.iot.vmp.utils.SipUtils; import com.genersoft.iot.vmp.utils.SpringBeanFactory; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; @@ -166,17 +169,21 @@ */ private void processMessageMobilePosition(RequestEvent evt) { try { - Element rootElement = getRootElement(evt); + String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); + Device device = storager.queryVideoDevice(deviceId); + if (device == null) { + logger.warn("澶勭悊MobilePosition绉诲姩浣嶇疆娑堟伅鏃舵湭鎵惧埌璁惧淇℃伅"); + return; + } + Element rootElement = getRootElement(evt, device.getCharset()); + MobilePosition mobilePosition = new MobilePosition(); Element deviceIdElement = rootElement.element("DeviceID"); - String deviceId = deviceIdElement.getTextTrim().toString(); - Device device = storager.queryVideoDevice(deviceId); - if (device != null) { - if (!StringUtils.isEmpty(device.getName())) { - mobilePosition.setDeviceName(device.getName()); - } + if (!StringUtils.isEmpty(device.getName())) { + mobilePosition.setDeviceName(device.getName()); } - mobilePosition.setDeviceId(XmlUtil.getText(rootElement, "DeviceID")); + mobilePosition.setDeviceId(deviceId); + mobilePosition.setChannelId(XmlUtil.getText(rootElement, "DeviceID")); mobilePosition.setTime(XmlUtil.getText(rootElement, "Time")); mobilePosition.setLongitude(Double.parseDouble(XmlUtil.getText(rootElement, "Longitude"))); mobilePosition.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude"))); @@ -449,8 +456,11 @@ Element rootElement = getRootElement(evt); String requestName = rootElement.getName(); Element deviceIdElement = rootElement.element("DeviceID"); - String deviceId = deviceIdElement.getTextTrim().toString(); + String deviceId = deviceIdElement.getTextTrim(); Device device = storager.queryVideoDevice(deviceId); + if (device != null ) { + rootElement = getRootElement(evt, device.getCharset()); + } if (requestName.equals("Query")) { logger.info("鎺ユ敹鍒癉eviceInfo鏌ヨ娑堟伅"); FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); @@ -470,7 +480,9 @@ 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")); @@ -550,7 +562,7 @@ deviceChannel.setStatus(gbStream.isStatus()?1:0); // deviceChannel.setParentId(parentPlatform.getDeviceGBId()); deviceChannel.setRegisterWay(1); - deviceChannel.setCivilCode(cmder.getSipConfig().getSipDomain()); + deviceChannel.setCivilCode(cmder.getSipConfig().getDomain()); deviceChannel.setModel("live"); deviceChannel.setOwner("wvp-pro"); // deviceChannel.setAddress("test"); @@ -569,12 +581,14 @@ } else { + Device device = storager.queryVideoDevice(deviceId); + if (device == null) { + return; + } + deviceListElement = getRootElement(evt, device.getCharset()).element("DeviceList"); Iterator<Element> deviceListIterator = deviceListElement.elementIterator(); if (deviceListIterator != null) { - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - return; - } + // 閬嶅巻DeviceList while (deviceListIterator.hasNext()) { Element itemDevice = deviceListIterator.next(); @@ -683,20 +697,26 @@ */ private void processMessageAlarm(RequestEvent evt) { try { - Element rootElement = getRootElement(evt); + String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); + Device device = storager.queryVideoDevice(deviceId); + if (device == null) { + logger.warn("澶勭悊alarm璁惧鎶ヨ淇℃伅鏈壘鍒拌澶囦俊鎭�"); + return; + } + Element rootElement = getRootElement(evt, device.getCharset()); Element deviceIdElement = rootElement.element("DeviceID"); - String deviceId = deviceIdElement.getText().toString(); + String channelId = deviceIdElement.getText().toString(); // 鍥炲200 OK responseAck(evt); - Device device = storager.queryVideoDevice(deviceId); - if (device == null) { - return; + if (device.getCharset() != null) { + rootElement = getRootElement(evt, device.getCharset()); } if (rootElement.getName().equals("Notify")) { // 澶勭悊鎶ヨ閫氱煡 DeviceAlarm deviceAlarm = new DeviceAlarm(); deviceAlarm.setDeviceId(deviceId); + deviceAlarm.setChannelId(channelId); deviceAlarm.setAlarmPriority(XmlUtil.getText(rootElement, "AlarmPriority")); deviceAlarm.setAlarmMethod(XmlUtil.getText(rootElement, "AlarmMethod")); deviceAlarm.setAlarmTime(XmlUtil.getText(rootElement, "AlarmTime")); @@ -781,7 +801,9 @@ Response response = getMessageFactory().createResponse(Response.NOT_FOUND, evt.getRequest()); ServerTransaction serverTransaction = getServerTransaction(evt); serverTransaction.sendResponse(response); - if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); + if (serverTransaction.getDialog() != null) { + serverTransaction.getDialog().delete(); + } } // if (device != null && device.getOnline() == 1) { @@ -816,6 +838,10 @@ Element rootElement = getRootElement(evt); Element deviceIdElement = rootElement.element("DeviceID"); String deviceId = deviceIdElement.getText().toString(); + Device device = storager.queryVideoDevice(deviceId); + if (device != null ) { + rootElement = getRootElement(evt, device.getCharset()); + } recordInfo.setDeviceId(deviceId); recordInfo.setName(XmlUtil.getText(rootElement, "Name")); if (XmlUtil.getText(rootElement, "SumNum")== null || XmlUtil.getText(rootElement, "SumNum") =="") { @@ -991,7 +1017,9 @@ Response response = getMessageFactory().createResponse(Response.OK, evt.getRequest()); ServerTransaction serverTransaction = getServerTransaction(evt); serverTransaction.sendResponse(response); - if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); + if (serverTransaction.getDialog() != null) { + serverTransaction.getDialog().delete(); + } } /*** @@ -1005,13 +1033,23 @@ Response response = getMessageFactory().createResponse(Response.NOT_FOUND, evt.getRequest()); ServerTransaction serverTransaction = getServerTransaction(evt); serverTransaction.sendResponse(response); - if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete(); + if (serverTransaction.getDialog() != null) { + serverTransaction.getDialog().delete(); + } } private Element getRootElement(RequestEvent evt) throws DocumentException { + + return getRootElement(evt, "gb2312"); + } + + private Element getRootElement(RequestEvent evt, String charset) throws DocumentException { + if (charset == null) { + charset = "gb2312"; + } Request request = evt.getRequest(); SAXReader reader = new SAXReader(); - reader.setEncoding("gbk"); + reader.setEncoding(charset); Document xml = reader.read(new ByteArrayInputStream(request.getRawContent())); return xml.getRootElement(); } -- Gitblit v1.8.0