From d0f5d684a93db3a0c9a6f2373657b8f596cc47ca Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期五, 26 二月 2021 11:10:22 +0800
Subject: [PATCH] 同步主线
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 640 +++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 544 insertions(+), 96 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index 26d0f23..6bab809 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -1,21 +1,18 @@
package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl;
import java.text.ParseException;
-import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.sip.*;
import javax.sip.address.SipURI;
import javax.sip.header.CallIdHeader;
-import javax.sip.header.Header;
import javax.sip.header.ViaHeader;
import javax.sip.message.Request;
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.MediaServerConfig;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
@@ -34,6 +31,8 @@
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
+import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
+import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
/**
* @Description:璁惧鑳藉姏鎺ュ彛锛岀敤浜庡畾涔夎澶囩殑鎺у埗銆佹煡璇㈣兘鍔�
@@ -76,6 +75,9 @@
@Value("${media.seniorSdp}")
private boolean seniorSdp;
+
+ @Value("${media.autoApplyPlay}")
+ private boolean autoApplyPlay;
@Autowired
private ZLMHttpHookSubscribe subscribe;
@@ -182,11 +184,11 @@
/**
* 浜戝彴鎸囦护鐮佽绠�
*
- * @param cmdCode 鎸囦护鐮�
- * @param parameter1 鏁版嵁1
- * @param parameter2 鏁版嵁2
- * @param combineCode2 缁勫悎鐮�2
- */
+ * @param cmdCode 鎸囦护鐮�
+ * @param parameter1 鏁版嵁1
+ * @param parameter2 鏁版嵁2
+ * @param combineCode2 缁勫悎鐮�2
+ */
public static String frontEndCmdString(int cmdCode, int parameter1, int parameter2, int combineCode2) {
StringBuilder builder = new StringBuilder("A50F01");
String strTmp;
@@ -208,13 +210,13 @@
/**
* 浜戝彴鎺у埗锛屾敮鎸佹柟鍚戜笌缂╂斁鎺у埗
*
- * @param device 鎺у埗璁惧
- * @param channelId 棰勮閫氶亾
- * @param leftRight 闀滃ご宸︾Щ鍙崇Щ 0:鍋滄 1:宸︾Щ 2:鍙崇Щ
- * @param upDown 闀滃ご涓婄Щ涓嬬Щ 0:鍋滄 1:涓婄Щ 2:涓嬬Щ
- * @param inOut 闀滃ご鏀惧ぇ缂╁皬 0:鍋滄 1:缂╁皬 2:鏀惧ぇ
- * @param moveSpeed 闀滃ご绉诲姩閫熷害
- * @param zoomSpeed 闀滃ご缂╂斁閫熷害
+ * @param device 鎺у埗璁惧
+ * @param channelId 棰勮閫氶亾
+ * @param leftRight 闀滃ご宸︾Щ鍙崇Щ 0:鍋滄 1:宸︾Щ 2:鍙崇Щ
+ * @param upDown 闀滃ご涓婄Щ涓嬬Щ 0:鍋滄 1:涓婄Щ 2:涓嬬Щ
+ * @param inOut 闀滃ご鏀惧ぇ缂╁皬 0:鍋滄 1:缂╁皬 2:鏀惧ぇ
+ * @param moveSpeed 闀滃ご绉诲姩閫熷害
+ * @param zoomSpeed 闀滃ご缂╂斁閫熷害
*/
@Override
public boolean ptzCmd(Device device, String channelId, int leftRight, int upDown, int inOut, int moveSpeed,
@@ -232,7 +234,8 @@
ptzXml.append("</Info>\r\n");
ptzXml.append("</Control>\r\n");
- Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", null);
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtz" + tm, null);
transmitRequest(device, request);
return true;
@@ -268,7 +271,8 @@
ptzXml.append("</Info>\r\n");
ptzXml.append("</Control>\r\n");
- Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", null);
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtz" + tm, null);
transmitRequest(device, request);
return true;
} catch (SipException | ParseException | InvalidArgumentException e) {
@@ -323,36 +327,65 @@
content.append("s=Play\r\n");
content.append("c=IN IP4 "+mediaInfo.getWanIp()+"\r\n");
content.append("t=0 0\r\n");
- if("TCP-PASSIVE".equals(streamMode)) {
- content.append("m=video "+ mediaPort +" TCP/RTP/AVP 126 125 99 34 98 97 96\r\n");
- }else if ("TCP-ACTIVE".equals(streamMode)) {
- content.append("m=video "+ mediaPort +" TCP/RTP/AVP 126 125 99 34 98 97 96\r\n");
- }else if("UDP".equals(streamMode)) {
- content.append("m=video "+ mediaPort +" RTP/AVP 126 125 99 34 98 97 96\r\n");
+
+ if (seniorSdp) {
+ if("TCP-PASSIVE".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
+ }else if ("TCP-ACTIVE".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
+ }else if("UDP".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" RTP/AVP 96 126 125 99 34 98 97\r\n");
+ }
+ content.append("a=recvonly\r\n");
+ content.append("a=rtpmap:96 PS/90000\r\n");
+ content.append("a=fmtp:126 profile-level-id=42e01e\r\n");
+ content.append("a=rtpmap:126 H264/90000\r\n");
+ content.append("a=rtpmap:125 H264S/90000\r\n");
+ content.append("a=fmtp:125 profile-level-id=42e01e\r\n");
+ content.append("a=rtpmap:99 MP4V-ES/90000\r\n");
+ content.append("a=fmtp:99 profile-level-id=3\r\n");
+ content.append("a=rtpmap:98 H264/90000\r\n");
+ content.append("a=rtpmap:97 MPEG4/90000\r\n");
+ if("TCP-PASSIVE".equals(streamMode)){ // tcp琚姩妯″紡
+ content.append("a=setup:passive\r\n");
+ content.append("a=connection:new\r\n");
+ }else if ("TCP-ACTIVE".equals(streamMode)) { // tcp涓诲姩妯″紡
+ content.append("a=setup:active\r\n");
+ content.append("a=connection:new\r\n");
+ }
+ }else {
+ if("TCP-PASSIVE".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 98 97\r\n");
+ }else if ("TCP-ACTIVE".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 98 97\r\n");
+ }else if("UDP".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" RTP/AVP 96 98 97\r\n");
+ }
+ content.append("a=recvonly\r\n");
+ content.append("a=rtpmap:96 PS/90000\r\n");
+ content.append("a=rtpmap:98 H264/90000\r\n");
+ content.append("a=rtpmap:97 MPEG4/90000\r\n");
+ if("TCP-PASSIVE".equals(streamMode)) { // tcp琚姩妯″紡
+ content.append("a=setup:passive\r\n");
+ content.append("a=recvonly\r\n");
+ content.append("a=rtpmap:96 PS/90000\r\n");
+ content.append("a=rtpmap:98 H264/90000\r\n");
+ content.append("a=rtpmap:97 MPEG4/90000\r\n");
+ if ("TCP-PASSIVE".equals(streamMode)) { // tcp琚姩妯″紡
+ content.append("a=setup:passive\r\n");
+ content.append("a=connection:new\r\n");
+ } else if ("TCP-ACTIVE".equals(streamMode)) { // tcp涓诲姩妯″紡
+ } else if ("TCP-ACTIVE".equals(streamMode)) { // tcp涓诲姩妯″紡
+ content.append("a=setup:active\r\n");
+ content.append("a=connection:new\r\n");
+ }
+ }
}
- content.append("a=recvonly\r\n");
- content.append("a=fmtp:126 profile-level-id=42e01e\r\n");
- content.append("a=rtpmap:126 H264/90000\r\n");
- content.append("a=rtpmap:125 H264S/90000\r\n");
- content.append("a=fmtp:125 profile-level-id=42e01e\r\n");
- content.append("a=rtpmap:99 MP4V-ES/90000\r\n");
- content.append("a=fmtp:99 profile-level-id=3\r\n");
- content.append("a=rtpmap:98 H264/90000\r\n");
- content.append("a=rtpmap:97 MPEG4/90000\r\n");
- content.append("a=rtpmap:96 PS/90000\r\n");
- if("TCP-PASSIVE".equals(streamMode)){ // tcp琚姩妯″紡
- content.append("a=setup:passive\r\n");
- content.append("a=connection:new\r\n");
- }else if ("TCP-ACTIVE".equals(streamMode)) { // tcp涓诲姩妯″紡
- content.append("a=setup:active\r\n");
- content.append("a=connection:new\r\n");
- }
+
content.append("y="+ssrc+"\r\n");//ssrc
-// String fromTag = UUID.randomUUID().toString();
-// Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, fromTag, null, ssrc);
-
- Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "live", null, ssrc);
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "FromInvt" + tm, null, ssrc);
ClientTransaction transaction = transmitRequest(device, request, errorEvent);
streamSession.put(streamId, transaction);
@@ -386,7 +419,6 @@
subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, subscribeKey, event);
- //
StringBuffer content = new StringBuffer(200);
content.append("v=0\r\n");
content.append("o="+sipConfig.getSipId()+" 0 0 IN IP4 "+sipConfig.getSipIp()+"\r\n");
@@ -406,13 +438,14 @@
if (seniorSdp) {
if("TCP-PASSIVE".equals(streamMode)) {
- content.append("m=video "+ mediaPort +" TCP/RTP/AVP 126 125 99 34 98 97 96\r\n");
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
}else if ("TCP-ACTIVE".equals(streamMode)) {
- content.append("m=video "+ mediaPort +" TCP/RTP/AVP 126 125 99 34 98 97 96\r\n");
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 126 125 99 34 98 97\r\n");
}else if("UDP".equals(streamMode)) {
- content.append("m=video "+ mediaPort +" RTP/AVP 126 125 99 34 98 97 96\r\n");
+ content.append("m=video "+ mediaPort +" RTP/AVP 96 126 125 99 34 98 97\r\n");
}
content.append("a=recvonly\r\n");
+ content.append("a=rtpmap:96 PS/90000\r\n");
content.append("a=fmtp:126 profile-level-id=42e01e\r\n");
content.append("a=rtpmap:126 H264/90000\r\n");
content.append("a=rtpmap:125 H264S/90000\r\n");
@@ -421,7 +454,6 @@
content.append("a=fmtp:99 profile-level-id=3\r\n");
content.append("a=rtpmap:98 H264/90000\r\n");
content.append("a=rtpmap:97 MPEG4/90000\r\n");
- content.append("a=rtpmap:96 PS/90000\r\n");
if("TCP-PASSIVE".equals(streamMode)){ // tcp琚姩妯″紡
content.append("a=setup:passive\r\n");
content.append("a=connection:new\r\n");
@@ -452,7 +484,8 @@
content.append("y="+ssrc+"\r\n");//ssrc
- Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "playback", null);
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null);
ClientTransaction transaction = transmitRequest(device, request, errorEvent);
streamSession.put(streamId, transaction);
@@ -490,16 +523,16 @@
if (dialog == null) {
return;
}
-
-
-
Request byeRequest = dialog.createRequest(Request.BYE);
SipURI byeURI = (SipURI) byeRequest.getRequestURI();
String vh = transaction.getRequest().getHeader(ViaHeader.NAME).toString();
Pattern p = Pattern.compile("(\\d+\\.\\d+\\.\\d+\\.\\d+)\\:(\\d+)");
Matcher matcher = p.matcher(vh);
if (matcher.find()) {
- byeURI.setHost(matcher.group(1));
+ String ip = matcher.group(1);
+ byeURI.setHost(ip);
+ String port = matcher.group(2);
+ byeURI.setPort(Integer.parseInt(port));
}
ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME);
String protocol = viaHeader.getTransport().toUpperCase();
@@ -543,24 +576,89 @@
/**
* 闊宠棰戝綍鍍忔帶鍒�
*
- * @param device 瑙嗛璁惧
- * @param channelId 棰勮閫氶亾
+ * @param device 瑙嗛璁惧
+ * @param channelId 棰勮閫氶亾
+ * @param recordCmdStr 褰曞儚鍛戒护锛歊ecord / StopRecord
*/
@Override
- public boolean recordCmd(Device device, String channelId) {
- // TODO Auto-generated method stub
- return false;
+ public boolean recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<RecordCmd>" + recordCmdStr + "</RecordCmd>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromRecord" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
+ * 杩滅▼鍚姩鎺у埗鍛戒护
+ *
+ * @param device 瑙嗛璁惧
+ */
+ @Override
+ public boolean teleBootCmd(Device device) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ cmdXml.append("<TeleBoot>Boot</TeleBoot>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromBoot" + tm, null);
+ transmitRequest(device, request);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
* 鎶ヨ甯冮槻/鎾ら槻鍛戒护
*
- * @param device 瑙嗛璁惧
- */
+ * @param device 瑙嗛璁惧
+ * @param guardCmdStr "SetGuard"/"ResetGuard"
+ */
@Override
- public boolean guardCmd(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ cmdXml.append("<GuardCmd>" + guardCmdStr + "</GuardCmd>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromGuard" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -569,9 +667,37 @@
* @param device 瑙嗛璁惧
*/
@Override
- public boolean alarmCmd(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ cmdXml.append("<AlarmCmd>ResetAlarm</AlarmCmd>\r\n");
+ if (!XmlUtil.isEmpty(alarmMethod) || !XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("<Info>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmMethod)) {
+ cmdXml.append("<AlarmMethod>" + alarmMethod + "</AlarmMethod>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("<AlarmType>" + alarmType + "</AlarmType>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmMethod) || !XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("</Info>\r\n");
+ }
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromAlarm" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -581,20 +707,79 @@
* @param channelId 棰勮閫氶亾
*/
@Override
- public boolean iFameCmd(Device device, String channelId) {
- // TODO Auto-generated method stub
- return false;
+ public boolean iFrameCmd(Device device, String channelId) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<IFameCmd>Send</IFameCmd>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromBoot" + tm, null);
+ transmitRequest(device, request);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
* 鐪嬪畧浣嶆帶鍒跺懡浠�
*
- * @param device 瑙嗛璁惧
+ * @param device 瑙嗛璁惧
+ * @param enabled 鐪嬪畧浣嶄娇鑳斤細1 = 寮�鍚紝0 = 鍏抽棴
+ * @param resetTime 鑷姩褰掍綅鏃堕棿闂撮殧锛屽紑鍚湅瀹堜綅鏃朵娇鐢紝鍗曚綅:绉�(s)
+ * @param presetIndex 璋冪敤棰勭疆浣嶇紪鍙凤紝寮�鍚湅瀹堜綅鏃朵娇鐢紝鍙栧�艰寖鍥�0~255
*/
@Override
- public boolean homePositionCmd(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<HomePosition>\r\n");
+ if (NumericUtil.isInteger(enabled) && (!enabled.equals("0"))) {
+ cmdXml.append("<Enabled>1</Enabled>\r\n");
+ if (NumericUtil.isInteger(resetTime)) {
+ cmdXml.append("<ResetTime>" + resetTime + "</ResetTime>\r\n");
+ } else {
+ cmdXml.append("<ResetTime>0</ResetTime>\r\n");
+ }
+ if (NumericUtil.isInteger(presetIndex)) {
+ cmdXml.append("<PresetIndex>" + presetIndex + "</PresetIndex>\r\n");
+ } else {
+ cmdXml.append("<PresetIndex>0</PresetIndex>\r\n");
+ }
+ } else {
+ cmdXml.append("<Enabled>0</Enabled>\r\n");
+ }
+ cmdXml.append("</HomePosition>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromGuard" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -609,14 +794,87 @@
}
/**
+ * 璁惧閰嶇疆鍛戒护锛歜asicParam
+ *
+ * @param device 瑙嗛璁惧
+ * @param channelId 閫氶亾缂栫爜锛堝彲閫夛級
+ * @param name 璁惧/閫氶亾鍚嶇О锛堝彲閫夛級
+ * @param expiration 娉ㄥ唽杩囨湡鏃堕棿锛堝彲閫夛級
+ * @param heartBeatInterval 蹇冭烦闂撮殧鏃堕棿锛堝彲閫夛級
+ * @param heartBeatCount 蹇冭烦瓒呮椂娆℃暟锛堝彲閫夛級
+ */
+ @Override
+ public boolean deviceBasicConfigCmd(Device device, String channelId, String name, String expiration,
+ String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceConfig</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<BasicParam>\r\n");
+ if (!XmlUtil.isEmpty(name)) {
+ cmdXml.append("<Name>" + name + "</Name>\r\n");
+ }
+ if (NumericUtil.isInteger(expiration)) {
+ if (Integer.valueOf(expiration) > 0) {
+ cmdXml.append("<Expiration>" + expiration + "</Expiration>\r\n");
+ }
+ }
+ if (NumericUtil.isInteger(heartBeatInterval)) {
+ if (Integer.valueOf(heartBeatInterval) > 0) {
+ cmdXml.append("<HeartBeatInterval>" + heartBeatInterval + "</HeartBeatInterval>\r\n");
+ }
+ }
+ if (NumericUtil.isInteger(heartBeatCount)) {
+ if (Integer.valueOf(heartBeatCount) > 0) {
+ cmdXml.append("<HeartBeatCount>" + heartBeatCount + "</HeartBeatCount>\r\n");
+ }
+ }
+ cmdXml.append("</BasicParam>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
* 鏌ヨ璁惧鐘舵��
*
* @param device 瑙嗛璁惧
*/
@Override
- public boolean deviceStatusQuery(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean deviceStatusQuery(Device device, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer catalogXml = new StringBuffer(200);
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ catalogXml.append("<Query>\r\n");
+ catalogXml.append("<CmdType>DeviceStatus</CmdType>\r\n");
+ catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ catalogXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, "FromStatus" + tm, null);
+
+ transmitRequest(device, request, errorEvent);
+ return true;
+
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -635,7 +893,8 @@
catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
catalogXml.append("</Query>\r\n");
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDeviceInfoTag", null);
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDev" + tm, null);
transmitRequest(device, request);
@@ -664,7 +923,8 @@
catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
catalogXml.append("</Query>\r\n");
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCatalogTag", null);
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCat" + tm, null);
transmitRequest(device, request, errorEvent);
} catch (SipException | ParseException | InvalidArgumentException e) {
@@ -698,7 +958,8 @@
recordInfoXml.append("<Type>all</Type>\r\n");
recordInfoXml.append("</Query>\r\n");
- Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "FromRecordInfoTag", null);
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "fromRec" + tm, null);
transmitRequest(device, request);
} catch (SipException | ParseException | InvalidArgumentException e) {
@@ -711,23 +972,86 @@
/**
* 鏌ヨ鎶ヨ淇℃伅
*
- * @param device 瑙嗛璁惧
- */
+ * @param device 瑙嗛璁惧
+ * @param startPriority 鎶ヨ璧峰绾у埆锛堝彲閫夛級
+ * @param endPriority 鎶ヨ缁堟绾у埆锛堝彲閫夛級
+ * @param alarmMethods 鎶ヨ鏂瑰紡鏉′欢锛堝彲閫夛級
+ * @param alarmType 鎶ヨ绫诲瀷
+ * @param startTime 鎶ヨ鍙戠敓璧峰鏃堕棿锛堝彲閫夛級
+ * @param endTime 鎶ヨ鍙戠敓缁堟鏃堕棿锛堝彲閫夛級
+ * @return true = 鍛戒护鍙戦�佹垚鍔�
+ */
@Override
- public boolean alarmInfoQuery(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod, String alarmType,
+ String startTime, String endTime, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Query>\r\n");
+ cmdXml.append("<CmdType>Alarm</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ if (!XmlUtil.isEmpty(startPriority)) {
+ cmdXml.append("<StartAlarmPriority>" + startPriority + "</StartAlarmPriority>\r\n");
+ }
+ if (!XmlUtil.isEmpty(endPriority)) {
+ cmdXml.append("<EndAlarmPriority>" + endPriority + "</EndAlarmPriority>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmMethod)) {
+ cmdXml.append("<AlarmMethod>" + alarmMethod + "</AlarmMethod>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("<AlarmType>" + alarmType + "</AlarmType>\r\n");
+ }
+ if (!XmlUtil.isEmpty(startTime)) {
+ cmdXml.append("<StartAlarmTime>" + startTime + "</StartAlarmTime>\r\n");
+ }
+ if (!XmlUtil.isEmpty(endTime)) {
+ cmdXml.append("<EndAlarmTime>" + endTime + "</EndAlarmTime>\r\n");
+ }
+ cmdXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromAlarm" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
* 鏌ヨ璁惧閰嶇疆
*
- * @param device 瑙嗛璁惧
- */
+ * @param device 瑙嗛璁惧
+ * @param channelId 閫氶亾缂栫爜锛堝彲閫夛級
+ * @param configType 閰嶇疆绫诲瀷锛�
+ */
@Override
- public boolean configQuery(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean deviceConfigQuery(Device device, String channelId, String configType, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Query>\r\n");
+ cmdXml.append("<CmdType>ConfigDownload</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<ConfigType>" + configType + "</ConfigType>\r\n");
+ cmdXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -736,9 +1060,28 @@
* @param device 瑙嗛璁惧
*/
@Override
- public boolean presetQuery(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Query>\r\n");
+ cmdXml.append("<CmdType>PresetQuery</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -747,11 +1090,116 @@
* @param device 瑙嗛璁惧
*/
@Override
- public boolean mobilePostitionQuery(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer mobilePostitionXml = new StringBuffer(200);
+ mobilePostitionXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ mobilePostitionXml.append("<Query>\r\n");
+ mobilePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n");
+ mobilePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ mobilePostitionXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ mobilePostitionXml.append("<Interval>60</Interval>\r\n");
+ mobilePostitionXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null);
+
+ transmitRequest(device, request, errorEvent);
+
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
}
+ /**
+ * 璁㈤槄銆佸彇娑堣闃呯Щ鍔ㄤ綅缃�
+ *
+ * @param device 瑙嗛璁惧
+ * @param expires 璁㈤槄瓒呮椂鏃堕棿
+ * @param interval 涓婃姤鏃堕棿闂撮殧
+ * @return true = 鍛戒护鍙戦�佹垚鍔�
+ */
+ public boolean mobilePositionSubscribe(Device device, int expires, int interval) {
+ try {
+ StringBuffer subscribePostitionXml = new StringBuffer(200);
+ subscribePostitionXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ subscribePostitionXml.append("<Query>\r\n");
+ subscribePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n");
+ subscribePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ subscribePostitionXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ if (expires > 0) {
+ subscribePostitionXml.append("<Interval>" + String.valueOf(interval) + "</Interval>\r\n");
+ }
+ subscribePostitionXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null, expires, "presence" ); //Position;id=" + tm.substring(tm.length() - 4));
+ transmitRequest(device, request);
+
+ return true;
+
+ } catch ( NumberFormatException | ParseException | InvalidArgumentException | SipException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
+ * 璁㈤槄銆佸彇娑堣闃呮姤璀︿俊鎭�
+ *
+ * @param device 瑙嗛璁惧
+ * @param expires 璁㈤槄杩囨湡鏃堕棿锛�0 = 鍙栨秷璁㈤槄锛�
+ * @param startPriority 鎶ヨ璧峰绾у埆锛堝彲閫夛級
+ * @param endPriority 鎶ヨ缁堟绾у埆锛堝彲閫夛級
+ * @param alarmMethod 鎶ヨ鏂瑰紡鏉′欢锛堝彲閫夛級
+ * @param alarmType 鎶ヨ绫诲瀷
+ * @param startTime 鎶ヨ鍙戠敓璧峰鏃堕棿锛堝彲閫夛級
+ * @param endTime 鎶ヨ鍙戠敓缁堟鏃堕棿锛堝彲閫夛級
+ * @return true = 鍛戒护鍙戦�佹垚鍔�
+ */
+ public boolean alarmSubscribe(Device device, int expires, String startPriority, String endPriority, String alarmMethod, String alarmType, String startTime, String endTime) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ cmdXml.append("<Query>\r\n");
+ cmdXml.append("<CmdType>Alarm</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ if (!XmlUtil.isEmpty(startPriority)) {
+ cmdXml.append("<StartAlarmPriority>" + startPriority + "</StartAlarmPriority>\r\n");
+ }
+ if (!XmlUtil.isEmpty(endPriority)) {
+ cmdXml.append("<EndAlarmPriority>" + endPriority + "</EndAlarmPriority>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmMethod)) {
+ cmdXml.append("<AlarmMethod>" + alarmMethod + "</AlarmMethod>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("<AlarmType>" + alarmType + "</AlarmType>\r\n");
+ }
+ if (!XmlUtil.isEmpty(startTime)) {
+ cmdXml.append("<StartAlarmTime>" + startTime + "</StartAlarmTime>\r\n");
+ }
+ if (!XmlUtil.isEmpty(endTime)) {
+ cmdXml.append("<EndAlarmTime>" + endTime + "</EndAlarmTime>\r\n");
+ }
+ cmdXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null, expires, "presence" );
+ transmitRequest(device, request);
+
+ return true;
+
+ } catch ( NumberFormatException | ParseException | InvalidArgumentException | SipException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+
private ClientTransaction transmitRequest(Device device, Request request) throws SipException {
return transmitRequest(device, request, null, null);
}
--
Gitblit v1.8.0