|
|
@@ -13,12 +13,9 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
|
|
import com.genersoft.iot.vmp.service.IMediaServerService;
|
|
|
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
|
|
|
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
|
|
-import com.genersoft.iot.vmp.utils.SerializeUtils;
|
|
|
import gov.nist.javax.sip.SipProviderImpl;
|
|
|
-import gov.nist.javax.sip.SipStackImpl;
|
|
|
import gov.nist.javax.sip.message.MessageFactoryImpl;
|
|
|
import gov.nist.javax.sip.message.SIPRequest;
|
|
|
-import gov.nist.javax.sip.stack.SIPDialog;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -30,13 +27,10 @@ import org.springframework.stereotype.Component;
|
|
|
import org.springframework.util.ObjectUtils;
|
|
|
|
|
|
import javax.sip.*;
|
|
|
-import javax.sip.address.SipURI;
|
|
|
import javax.sip.header.*;
|
|
|
import javax.sip.message.Request;
|
|
|
-import java.lang.reflect.Field;
|
|
|
import java.text.ParseException;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
|
|
|
@Component
|
|
|
@@ -77,19 +71,18 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
private SubscribeHolder subscribeHolder;
|
|
|
|
|
|
@Override
|
|
|
- public boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) {
|
|
|
- return register(parentPlatform, null, null, errorEvent, okEvent, false, true);
|
|
|
+ public void register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException {
|
|
|
+ register(parentPlatform, null, null, errorEvent, okEvent, false, true);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean unregister(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) {
|
|
|
- return register(parentPlatform, null, null, errorEvent, okEvent, false, false);
|
|
|
+ public void unregister(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException {
|
|
|
+ register(parentPlatform, null, null, errorEvent, okEvent, false, false);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean register(ParentPlatform parentPlatform, @Nullable String callId, @Nullable WWWAuthenticateHeader www,
|
|
|
- SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain, boolean isRegister) {
|
|
|
- try {
|
|
|
+ public void register(ParentPlatform parentPlatform, @Nullable String callId, @Nullable WWWAuthenticateHeader www,
|
|
|
+ SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent, boolean registerAgain, boolean isRegister) throws SipException, InvalidArgumentException, ParseException {
|
|
|
Request request;
|
|
|
if (!registerAgain ) {
|
|
|
CallIdHeader callIdHeader = null;
|
|
|
@@ -126,23 +119,10 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
}
|
|
|
|
|
|
transmitRequest(parentPlatform, request, null, okEvent);
|
|
|
- return true;
|
|
|
- } catch (ParseException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (PeerUnavailableException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (SipException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return false;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public String keepalive(ParentPlatform parentPlatform,SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) {
|
|
|
- String callId = null;
|
|
|
- try {
|
|
|
+ public String keepalive(ParentPlatform parentPlatform,SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws SipException, InvalidArgumentException, ParseException {
|
|
|
String characterSet = parentPlatform.getCharacterSet();
|
|
|
StringBuffer keepaliveXml = new StringBuffer(200);
|
|
|
keepaliveXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
@@ -163,11 +143,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
SipUtils.getNewViaTag(),
|
|
|
callIdHeader);
|
|
|
transmitRequest(parentPlatform, request, errorEvent, okEvent);
|
|
|
- callId = callIdHeader.getCallId();
|
|
|
- } catch (ParseException | InvalidArgumentException | SipException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return callId;
|
|
|
+ return callIdHeader.getCallId();
|
|
|
}
|
|
|
|
|
|
private void transmitRequest(ParentPlatform parentPlatform, Request request) throws SipException {
|
|
|
@@ -206,39 +182,32 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public boolean catalogQuery(DeviceChannel channel, ParentPlatform parentPlatform, String sn, String fromTag, int size) {
|
|
|
+ public void catalogQuery(DeviceChannel channel, ParentPlatform parentPlatform, String sn, String fromTag, int size) throws SipException, InvalidArgumentException, ParseException {
|
|
|
|
|
|
if ( parentPlatform ==null) {
|
|
|
- return false;
|
|
|
+ return ;
|
|
|
}
|
|
|
- try {
|
|
|
- List<DeviceChannel> channels = new ArrayList<>();
|
|
|
- if (channel != null) {
|
|
|
- channels.add(channel);
|
|
|
- }
|
|
|
- String catalogXml = getCatalogXml(channels, sn, parentPlatform, size);
|
|
|
+ List<DeviceChannel> channels = new ArrayList<>();
|
|
|
+ if (channel != null) {
|
|
|
+ channels.add(channel);
|
|
|
+ }
|
|
|
+ String catalogXml = getCatalogXml(channels, sn, parentPlatform, size);
|
|
|
|
|
|
- // callid
|
|
|
- CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+ // callid
|
|
|
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
+ : udpSipProvider.getNewCallId();
|
|
|
|
|
|
- Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, catalogXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
- transmitRequest(parentPlatform, request);
|
|
|
+ Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, catalogXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
+ transmitRequest(parentPlatform, request);
|
|
|
|
|
|
- } catch (SipException | ParseException | InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean catalogQuery(List<DeviceChannel> channels, ParentPlatform parentPlatform, String sn, String fromTag) {
|
|
|
+ public void catalogQuery(List<DeviceChannel> channels, ParentPlatform parentPlatform, String sn, String fromTag) throws InvalidArgumentException, ParseException, SipException {
|
|
|
if ( parentPlatform ==null) {
|
|
|
- return false;
|
|
|
+ return ;
|
|
|
}
|
|
|
sendCatalogResponse(channels, parentPlatform, sn, fromTag, 0);
|
|
|
- return true;
|
|
|
}
|
|
|
private String getCatalogXml(List<DeviceChannel> channels, String sn, ParentPlatform parentPlatform, int size) {
|
|
|
String characterSet = parentPlatform.getCharacterSet();
|
|
|
@@ -300,30 +269,30 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
return catalogXml.toString();
|
|
|
}
|
|
|
|
|
|
- private void sendCatalogResponse(List<DeviceChannel> channels, ParentPlatform parentPlatform, String sn, String fromTag, int index) {
|
|
|
+ private void sendCatalogResponse(List<DeviceChannel> channels, ParentPlatform parentPlatform, String sn, String fromTag, int index) throws SipException, InvalidArgumentException, ParseException {
|
|
|
if (index >= channels.size()) {
|
|
|
return;
|
|
|
}
|
|
|
- try {
|
|
|
- List<DeviceChannel> deviceChannels;
|
|
|
- if (index + parentPlatform.getCatalogGroup() < channels.size()) {
|
|
|
- deviceChannels = channels.subList(index, index + parentPlatform.getCatalogGroup());
|
|
|
- }else {
|
|
|
- deviceChannels = channels.subList(index, channels.size());
|
|
|
- }
|
|
|
- String catalogXml = getCatalogXml(deviceChannels, sn, parentPlatform, channels.size());
|
|
|
- // callid
|
|
|
- CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+ List<DeviceChannel> deviceChannels;
|
|
|
+ if (index + parentPlatform.getCatalogGroup() < channels.size()) {
|
|
|
+ deviceChannels = channels.subList(index, index + parentPlatform.getCatalogGroup());
|
|
|
+ }else {
|
|
|
+ deviceChannels = channels.subList(index, channels.size());
|
|
|
+ }
|
|
|
+ String catalogXml = getCatalogXml(deviceChannels, sn, parentPlatform, channels.size());
|
|
|
+ // callid
|
|
|
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
+ : udpSipProvider.getNewCallId();
|
|
|
|
|
|
- Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, catalogXml, fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
- transmitRequest(parentPlatform, request, null, eventResult -> {
|
|
|
- int indexNext = index + parentPlatform.getCatalogGroup();
|
|
|
+ Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, catalogXml, fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
+ transmitRequest(parentPlatform, request, null, eventResult -> {
|
|
|
+ int indexNext = index + parentPlatform.getCatalogGroup();
|
|
|
+ try {
|
|
|
sendCatalogResponse(channels, parentPlatform, sn, fromTag, indexNext);
|
|
|
- });
|
|
|
- } catch (SipException | ParseException | InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
+ } catch (SipException | InvalidArgumentException | ParseException e) {
|
|
|
+ logger.error("[命令发送失败] 国标级联 目录查询回复: {}", e.getMessage());
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -334,36 +303,29 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public boolean deviceInfoResponse(ParentPlatform parentPlatform, String sn, String fromTag) {
|
|
|
+ public void deviceInfoResponse(ParentPlatform parentPlatform, String sn, String fromTag) throws SipException, InvalidArgumentException, ParseException {
|
|
|
if (parentPlatform == null) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- try {
|
|
|
- String characterSet = parentPlatform.getCharacterSet();
|
|
|
- StringBuffer deviceInfoXml = new StringBuffer(600);
|
|
|
- deviceInfoXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
- deviceInfoXml.append("<Response>\r\n");
|
|
|
- deviceInfoXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
|
|
|
- deviceInfoXml.append("<SN>" +sn + "</SN>\r\n");
|
|
|
- deviceInfoXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
|
|
|
- deviceInfoXml.append("<DeviceName>" + parentPlatform.getName() + "</DeviceName>\r\n");
|
|
|
- deviceInfoXml.append("<Manufacturer>wvp</Manufacturer>\r\n");
|
|
|
- deviceInfoXml.append("<Model>wvp-28181-2.0</Model>\r\n");
|
|
|
- deviceInfoXml.append("<Firmware>2.0.202107</Firmware>\r\n");
|
|
|
- deviceInfoXml.append("<Result>OK</Result>\r\n");
|
|
|
- deviceInfoXml.append("</Response>\r\n");
|
|
|
-
|
|
|
- CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
-
|
|
|
- Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceInfoXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
- transmitRequest(parentPlatform, request);
|
|
|
-
|
|
|
- } catch (SipException | ParseException | InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
+ return;
|
|
|
}
|
|
|
- return true;
|
|
|
+ String characterSet = parentPlatform.getCharacterSet();
|
|
|
+ StringBuffer deviceInfoXml = new StringBuffer(600);
|
|
|
+ deviceInfoXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
+ deviceInfoXml.append("<Response>\r\n");
|
|
|
+ deviceInfoXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
|
|
|
+ deviceInfoXml.append("<SN>" +sn + "</SN>\r\n");
|
|
|
+ deviceInfoXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
|
|
|
+ deviceInfoXml.append("<DeviceName>" + parentPlatform.getName() + "</DeviceName>\r\n");
|
|
|
+ deviceInfoXml.append("<Manufacturer>wvp</Manufacturer>\r\n");
|
|
|
+ deviceInfoXml.append("<Model>wvp-28181-2.0</Model>\r\n");
|
|
|
+ deviceInfoXml.append("<Firmware>2.0.202107</Firmware>\r\n");
|
|
|
+ deviceInfoXml.append("<Result>OK</Result>\r\n");
|
|
|
+ deviceInfoXml.append("</Response>\r\n");
|
|
|
+
|
|
|
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
+ : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
+ Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceInfoXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
+ transmitRequest(parentPlatform, request);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -374,129 +336,103 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public boolean deviceStatusResponse(ParentPlatform parentPlatform, String sn, String fromTag) {
|
|
|
+ public void deviceStatusResponse(ParentPlatform parentPlatform, String sn, String fromTag) throws SipException, InvalidArgumentException, ParseException {
|
|
|
if (parentPlatform == null) {
|
|
|
- return false;
|
|
|
+ return ;
|
|
|
}
|
|
|
- try {
|
|
|
- String characterSet = parentPlatform.getCharacterSet();
|
|
|
- StringBuffer deviceStatusXml = new StringBuffer(600);
|
|
|
- deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
- deviceStatusXml.append("<Response>\r\n");
|
|
|
- deviceStatusXml.append("<CmdType>DeviceStatus</CmdType>\r\n");
|
|
|
- deviceStatusXml.append("<SN>" +sn + "</SN>\r\n");
|
|
|
- deviceStatusXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
|
|
|
- deviceStatusXml.append("<Result>OK</Result>\r\n");
|
|
|
- deviceStatusXml.append("<Online>ONLINE</Online>\r\n");
|
|
|
- deviceStatusXml.append("<Status>OK</Status>\r\n");
|
|
|
- deviceStatusXml.append("</Response>\r\n");
|
|
|
-
|
|
|
- CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
-
|
|
|
- Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
- transmitRequest(parentPlatform, request);
|
|
|
+ String characterSet = parentPlatform.getCharacterSet();
|
|
|
+ StringBuffer deviceStatusXml = new StringBuffer(600);
|
|
|
+ deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
+ deviceStatusXml.append("<Response>\r\n");
|
|
|
+ deviceStatusXml.append("<CmdType>DeviceStatus</CmdType>\r\n");
|
|
|
+ deviceStatusXml.append("<SN>" +sn + "</SN>\r\n");
|
|
|
+ deviceStatusXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
|
|
|
+ deviceStatusXml.append("<Result>OK</Result>\r\n");
|
|
|
+ deviceStatusXml.append("<Online>ONLINE</Online>\r\n");
|
|
|
+ deviceStatusXml.append("<Status>OK</Status>\r\n");
|
|
|
+ deviceStatusXml.append("</Response>\r\n");
|
|
|
+
|
|
|
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
+ : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
+ Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
+ transmitRequest(parentPlatform, request);
|
|
|
|
|
|
- } catch (SipException | ParseException | InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean sendNotifyMobilePosition(ParentPlatform parentPlatform, GPSMsgInfo gpsMsgInfo, SubscribeInfo subscribeInfo) {
|
|
|
+ public void sendNotifyMobilePosition(ParentPlatform parentPlatform, GPSMsgInfo gpsMsgInfo, SubscribeInfo subscribeInfo) throws InvalidArgumentException, ParseException, NoSuchFieldException, SipException, IllegalAccessException {
|
|
|
if (parentPlatform == null) {
|
|
|
- return false;
|
|
|
+ return;
|
|
|
}
|
|
|
if (logger.isDebugEnabled()) {
|
|
|
logger.debug("[发送 移动位置订阅] {}/{}->{},{}", parentPlatform.getServerGBId(), gpsMsgInfo.getId(), gpsMsgInfo.getLng(), gpsMsgInfo.getLat());
|
|
|
}
|
|
|
|
|
|
- try {
|
|
|
- String characterSet = parentPlatform.getCharacterSet();
|
|
|
- StringBuffer deviceStatusXml = new StringBuffer(600);
|
|
|
- deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
- deviceStatusXml.append("<Notify>\r\n");
|
|
|
- deviceStatusXml.append("<CmdType>MobilePosition</CmdType>\r\n");
|
|
|
- deviceStatusXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
|
|
|
- deviceStatusXml.append("<DeviceID>" + gpsMsgInfo.getId() + "</DeviceID>\r\n");
|
|
|
- deviceStatusXml.append("<Time>" + gpsMsgInfo.getTime() + "</Time>\r\n");
|
|
|
- deviceStatusXml.append("<Longitude>" + gpsMsgInfo.getLng() + "</Longitude>\r\n");
|
|
|
- deviceStatusXml.append("<Latitude>" + gpsMsgInfo.getLat() + "</Latitude>\r\n");
|
|
|
- deviceStatusXml.append("<Speed>" + gpsMsgInfo.getSpeed() + "</Speed>\r\n");
|
|
|
- deviceStatusXml.append("<Direction>" + gpsMsgInfo.getDirection() + "</Direction>\r\n");
|
|
|
- deviceStatusXml.append("<Altitude>" + gpsMsgInfo.getAltitude() + "</Altitude>\r\n");
|
|
|
- deviceStatusXml.append("</Notify>\r\n");
|
|
|
-
|
|
|
- sendNotify(parentPlatform, deviceStatusXml.toString(), subscribeInfo, eventResult -> {
|
|
|
- logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
|
|
|
- }, null);
|
|
|
-
|
|
|
- } catch (SipException | ParseException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
- } catch (NoSuchFieldException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (IllegalAccessException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return true;
|
|
|
+ String characterSet = parentPlatform.getCharacterSet();
|
|
|
+ StringBuffer deviceStatusXml = new StringBuffer(600);
|
|
|
+ deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
+ deviceStatusXml.append("<Notify>\r\n");
|
|
|
+ deviceStatusXml.append("<CmdType>MobilePosition</CmdType>\r\n");
|
|
|
+ deviceStatusXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
|
|
|
+ deviceStatusXml.append("<DeviceID>" + gpsMsgInfo.getId() + "</DeviceID>\r\n");
|
|
|
+ deviceStatusXml.append("<Time>" + gpsMsgInfo.getTime() + "</Time>\r\n");
|
|
|
+ deviceStatusXml.append("<Longitude>" + gpsMsgInfo.getLng() + "</Longitude>\r\n");
|
|
|
+ deviceStatusXml.append("<Latitude>" + gpsMsgInfo.getLat() + "</Latitude>\r\n");
|
|
|
+ deviceStatusXml.append("<Speed>" + gpsMsgInfo.getSpeed() + "</Speed>\r\n");
|
|
|
+ deviceStatusXml.append("<Direction>" + gpsMsgInfo.getDirection() + "</Direction>\r\n");
|
|
|
+ deviceStatusXml.append("<Altitude>" + gpsMsgInfo.getAltitude() + "</Altitude>\r\n");
|
|
|
+ deviceStatusXml.append("</Notify>\r\n");
|
|
|
+
|
|
|
+ sendNotify(parentPlatform, deviceStatusXml.toString(), subscribeInfo, eventResult -> {
|
|
|
+ logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
|
|
|
+ }, null);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean sendAlarmMessage(ParentPlatform parentPlatform, DeviceAlarm deviceAlarm) {
|
|
|
+ public void sendAlarmMessage(ParentPlatform parentPlatform, DeviceAlarm deviceAlarm) throws SipException, InvalidArgumentException, ParseException {
|
|
|
if (parentPlatform == null) {
|
|
|
- return false;
|
|
|
+ return;
|
|
|
}
|
|
|
logger.info("[发送报警通知] {}/{}->{},{}: {}", parentPlatform.getServerGBId(), deviceAlarm.getChannelId(),
|
|
|
deviceAlarm.getLongitude(), deviceAlarm.getLatitude(), JSONObject.toJSON(deviceAlarm));
|
|
|
- try {
|
|
|
- String characterSet = parentPlatform.getCharacterSet();
|
|
|
- StringBuffer deviceStatusXml = new StringBuffer(600);
|
|
|
- deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
- deviceStatusXml.append("<Notify>\r\n");
|
|
|
- deviceStatusXml.append("<CmdType>Alarm</CmdType>\r\n");
|
|
|
- deviceStatusXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
|
|
|
- deviceStatusXml.append("<DeviceID>" + deviceAlarm.getChannelId() + "</DeviceID>\r\n");
|
|
|
- deviceStatusXml.append("<AlarmPriority>" + deviceAlarm.getAlarmPriority() + "</AlarmPriority>\r\n");
|
|
|
- deviceStatusXml.append("<AlarmMethod>" + deviceAlarm.getAlarmMethod() + "</AlarmMethod>\r\n");
|
|
|
- deviceStatusXml.append("<AlarmTime>" + deviceAlarm.getAlarmTime() + "</AlarmTime>\r\n");
|
|
|
- deviceStatusXml.append("<AlarmDescription>" + deviceAlarm.getAlarmDescription() + "</AlarmDescription>\r\n");
|
|
|
- deviceStatusXml.append("<Longitude>" + deviceAlarm.getLongitude() + "</Longitude>\r\n");
|
|
|
- deviceStatusXml.append("<Latitude>" + deviceAlarm.getLatitude() + "</Latitude>\r\n");
|
|
|
- deviceStatusXml.append("<info>\r\n");
|
|
|
- deviceStatusXml.append("<AlarmType>" + deviceAlarm.getAlarmType() + "</AlarmType>\r\n");
|
|
|
- deviceStatusXml.append("</info>\r\n");
|
|
|
- deviceStatusXml.append("</Notify>\r\n");
|
|
|
-
|
|
|
- CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
-
|
|
|
- Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), SipUtils.getNewFromTag(), SipUtils.getNewViaTag(), callIdHeader);
|
|
|
- transmitRequest(parentPlatform, request);
|
|
|
+ String characterSet = parentPlatform.getCharacterSet();
|
|
|
+ StringBuffer deviceStatusXml = new StringBuffer(600);
|
|
|
+ deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
+ deviceStatusXml.append("<Notify>\r\n");
|
|
|
+ deviceStatusXml.append("<CmdType>Alarm</CmdType>\r\n");
|
|
|
+ deviceStatusXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
|
|
|
+ deviceStatusXml.append("<DeviceID>" + deviceAlarm.getChannelId() + "</DeviceID>\r\n");
|
|
|
+ deviceStatusXml.append("<AlarmPriority>" + deviceAlarm.getAlarmPriority() + "</AlarmPriority>\r\n");
|
|
|
+ deviceStatusXml.append("<AlarmMethod>" + deviceAlarm.getAlarmMethod() + "</AlarmMethod>\r\n");
|
|
|
+ deviceStatusXml.append("<AlarmTime>" + deviceAlarm.getAlarmTime() + "</AlarmTime>\r\n");
|
|
|
+ deviceStatusXml.append("<AlarmDescription>" + deviceAlarm.getAlarmDescription() + "</AlarmDescription>\r\n");
|
|
|
+ deviceStatusXml.append("<Longitude>" + deviceAlarm.getLongitude() + "</Longitude>\r\n");
|
|
|
+ deviceStatusXml.append("<Latitude>" + deviceAlarm.getLatitude() + "</Latitude>\r\n");
|
|
|
+ deviceStatusXml.append("<info>\r\n");
|
|
|
+ deviceStatusXml.append("<AlarmType>" + deviceAlarm.getAlarmType() + "</AlarmType>\r\n");
|
|
|
+ deviceStatusXml.append("</info>\r\n");
|
|
|
+ deviceStatusXml.append("</Notify>\r\n");
|
|
|
+
|
|
|
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
+ : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
+ Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), SipUtils.getNewFromTag(), SipUtils.getNewViaTag(), callIdHeader);
|
|
|
+ transmitRequest(parentPlatform, request);
|
|
|
|
|
|
- } catch (SipException | ParseException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
- } catch (InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean sendNotifyForCatalogAddOrUpdate(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels, SubscribeInfo subscribeInfo, Integer index) {
|
|
|
+ public void sendNotifyForCatalogAddOrUpdate(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels, SubscribeInfo subscribeInfo, Integer index) throws InvalidArgumentException, ParseException, NoSuchFieldException, SipException, IllegalAccessException {
|
|
|
if (parentPlatform == null || deviceChannels == null || deviceChannels.size() == 0 || subscribeInfo == null) {
|
|
|
- return false;
|
|
|
+ return;
|
|
|
}
|
|
|
if (index == null) {
|
|
|
index = 0;
|
|
|
}
|
|
|
if (index >= deviceChannels.size()) {
|
|
|
- return true;
|
|
|
+ return;
|
|
|
}
|
|
|
List<DeviceChannel> channels;
|
|
|
if (index + parentPlatform.getCatalogGroup() < deviceChannels.size()) {
|
|
|
@@ -504,32 +440,25 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
}else {
|
|
|
channels = deviceChannels.subList(index, deviceChannels.size());
|
|
|
}
|
|
|
- try {
|
|
|
- Integer finalIndex = index;
|
|
|
- String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, channels,
|
|
|
- deviceChannels.size(), type, subscribeInfo);
|
|
|
- sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
|
|
|
- logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
|
|
|
- }, (eventResult -> {
|
|
|
+ Integer finalIndex = index;
|
|
|
+ String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, channels,
|
|
|
+ deviceChannels.size(), type, subscribeInfo);
|
|
|
+ sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
|
|
|
+ logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
|
|
|
+ }, (eventResult -> {
|
|
|
+ try {
|
|
|
sendNotifyForCatalogAddOrUpdate(type, parentPlatform, deviceChannels, subscribeInfo,
|
|
|
finalIndex + parentPlatform.getCatalogGroup());
|
|
|
- }));
|
|
|
- } catch (SipException | ParseException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
- } catch (NoSuchFieldException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (IllegalAccessException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return true;
|
|
|
+ } catch (InvalidArgumentException | ParseException | NoSuchFieldException | SipException |
|
|
|
+ IllegalAccessException e) {
|
|
|
+ logger.error("[命令发送失败] 国标级联 NOTIFY通知: {}", e.getMessage());
|
|
|
+ }
|
|
|
+ }));
|
|
|
}
|
|
|
|
|
|
- private ClientTransaction sendNotify(ParentPlatform parentPlatform, String catalogXmlContent,
|
|
|
+ private void sendNotify(ParentPlatform parentPlatform, String catalogXmlContent,
|
|
|
SubscribeInfo subscribeInfo, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent )
|
|
|
- throws NoSuchFieldException, IllegalAccessException, SipException, ParseException, InvalidArgumentException {
|
|
|
+ throws SipException, ParseException, InvalidArgumentException {
|
|
|
MessageFactoryImpl messageFactory = (MessageFactoryImpl) sipFactory.createMessageFactory();
|
|
|
String characterSet = parentPlatform.getCharacterSet();
|
|
|
// 设置编码, 防止中文乱码
|
|
|
@@ -537,50 +466,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
|
|
|
SIPRequest notifyRequest = headerProviderPlatformProvider.createNotifyRequest(parentPlatform, catalogXmlContent, subscribeInfo);
|
|
|
|
|
|
- notifyRequest.getCSeqHeader().setSeqNumber(redisCatchStorage.getCSEQ());
|
|
|
-
|
|
|
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
|
|
|
- notifyRequest.setContent(catalogXmlContent, contentTypeHeader);
|
|
|
-
|
|
|
- SubscriptionStateHeader subscriptionState = sipFactory.createHeaderFactory()
|
|
|
- .createSubscriptionStateHeader(SubscriptionStateHeader.ACTIVE);
|
|
|
- notifyRequest.addHeader(subscriptionState);
|
|
|
-
|
|
|
- EventHeader event = sipFactory.createHeaderFactory().createEventHeader(subscribeInfo.getEventType());
|
|
|
- if (subscribeInfo.getEventId() != null) {
|
|
|
- event.setEventId(subscribeInfo.getEventId());
|
|
|
- }
|
|
|
- notifyRequest.addHeader(event);
|
|
|
- SipURI sipURI = (SipURI) notifyRequest.getRequestURI();
|
|
|
- sipURI.setHost(parentPlatform.getServerIP());
|
|
|
- sipURI.setPort(parentPlatform.getServerPort());
|
|
|
-
|
|
|
-// ClientTransaction transaction = subscribeInfo.getClientTransaction();
|
|
|
-// if (transaction == null || transaction.getState().equals(TransactionState.COMPLETED)) {
|
|
|
-// if ("TCP".equals(parentPlatform.getTransport())) {
|
|
|
-// transaction = tcpSipProvider.getNewClientTransaction(notifyRequest);
|
|
|
-// } else if ("UDP".equals(parentPlatform.getTransport())) {
|
|
|
-// transaction = udpSipProvider.getNewClientTransaction(notifyRequest);
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- ClientTransaction transaction = null;
|
|
|
- if ("TCP".equals(parentPlatform.getTransport())) {
|
|
|
- transaction = tcpSipProvider.getNewClientTransaction(notifyRequest);
|
|
|
- } else if ("UDP".equals(parentPlatform.getTransport())) {
|
|
|
- transaction = udpSipProvider.getNewClientTransaction(notifyRequest);
|
|
|
- }
|
|
|
-
|
|
|
- // 添加错误订阅
|
|
|
- if (errorEvent != null) {
|
|
|
- sipSubscribe.addErrorSubscribe(subscribeInfo.getRequest().getCallIdHeader().getCallId(), errorEvent);
|
|
|
- }
|
|
|
- // 添加订阅
|
|
|
- if (okEvent != null) {
|
|
|
- sipSubscribe.addOkSubscribe(subscribeInfo.getRequest().getCallIdHeader().getCallId(), okEvent);
|
|
|
- }
|
|
|
- transaction.sendRequest();
|
|
|
- return transaction;
|
|
|
+ transmitRequest(parentPlatform, notifyRequest);
|
|
|
}
|
|
|
|
|
|
private String getCatalogXmlContentForCatalogAddOrUpdate(ParentPlatform parentPlatform, List<DeviceChannel> channels, int sumNum, String type, SubscribeInfo subscribeInfo) {
|
|
|
@@ -639,20 +525,21 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean sendNotifyForCatalogOther(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels,
|
|
|
- SubscribeInfo subscribeInfo, Integer index) {
|
|
|
+ public void sendNotifyForCatalogOther(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels,
|
|
|
+ SubscribeInfo subscribeInfo, Integer index) throws InvalidArgumentException, ParseException, NoSuchFieldException, SipException, IllegalAccessException {
|
|
|
if (parentPlatform == null
|
|
|
|| deviceChannels == null
|
|
|
|| deviceChannels.size() == 0
|
|
|
|| subscribeInfo == null) {
|
|
|
- return false;
|
|
|
+ logger.warn("[缺少必要参数]");
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
if (index == null) {
|
|
|
index = 0;
|
|
|
}
|
|
|
if (index >= deviceChannels.size()) {
|
|
|
- return true;
|
|
|
+ return;
|
|
|
}
|
|
|
List<DeviceChannel> channels;
|
|
|
if (index + parentPlatform.getCatalogGroup() < deviceChannels.size()) {
|
|
|
@@ -660,28 +547,19 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
}else {
|
|
|
channels = deviceChannels.subList(index, deviceChannels.size());
|
|
|
}
|
|
|
- try {
|
|
|
- Integer finalIndex = index;
|
|
|
- String catalogXmlContent = getCatalogXmlContentForCatalogOther(parentPlatform, channels, type);
|
|
|
- sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
|
|
|
- logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
|
|
|
- }, (eventResult -> {
|
|
|
+ Integer finalIndex = index;
|
|
|
+ String catalogXmlContent = getCatalogXmlContentForCatalogOther(parentPlatform, channels, type);
|
|
|
+ sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
|
|
|
+ logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
|
|
|
+ }, eventResult -> {
|
|
|
+ try {
|
|
|
sendNotifyForCatalogOther(type, parentPlatform, deviceChannels, subscribeInfo,
|
|
|
finalIndex + parentPlatform.getCatalogGroup());
|
|
|
- }));
|
|
|
- } catch (SipException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (ParseException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (NoSuchFieldException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (IllegalAccessException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
-
|
|
|
- return true;
|
|
|
+ } catch (InvalidArgumentException | ParseException | NoSuchFieldException | SipException |
|
|
|
+ IllegalAccessException e) {
|
|
|
+ logger.error("[命令发送失败] 国标级联 NOTIFY通知: {}", e.getMessage());
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
private String getCatalogXmlContentForCatalogOther(ParentPlatform parentPlatform, List<DeviceChannel> channels, String type) {
|
|
|
@@ -711,113 +589,81 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
return catalogXml.toString();
|
|
|
}
|
|
|
@Override
|
|
|
- public boolean recordInfo(DeviceChannel deviceChannel, ParentPlatform parentPlatform, String fromTag, RecordInfo recordInfo) {
|
|
|
+ public void recordInfo(DeviceChannel deviceChannel, ParentPlatform parentPlatform, String fromTag, RecordInfo recordInfo) throws SipException, InvalidArgumentException, ParseException {
|
|
|
if ( parentPlatform ==null) {
|
|
|
- return false;
|
|
|
+ return ;
|
|
|
}
|
|
|
- try {
|
|
|
- String characterSet = parentPlatform.getCharacterSet();
|
|
|
- StringBuffer recordXml = new StringBuffer(600);
|
|
|
- recordXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
- recordXml.append("<Response>\r\n");
|
|
|
- recordXml.append("<CmdType>RecordInfo</CmdType>\r\n");
|
|
|
- recordXml.append("<SN>" +recordInfo.getSn() + "</SN>\r\n");
|
|
|
- recordXml.append("<DeviceID>" + recordInfo.getDeviceId() + "</DeviceID>\r\n");
|
|
|
- recordXml.append("<SumNum>" + recordInfo.getSumNum() + "</SumNum>\r\n");
|
|
|
- if (recordInfo.getRecordList() == null ) {
|
|
|
- recordXml.append("<RecordList Num=\"0\">\r\n");
|
|
|
- }else {
|
|
|
- recordXml.append("<RecordList Num=\"" + recordInfo.getRecordList().size()+"\">\r\n");
|
|
|
- if (recordInfo.getRecordList().size() > 0) {
|
|
|
- for (RecordItem recordItem : recordInfo.getRecordList()) {
|
|
|
- recordXml.append("<Item>\r\n");
|
|
|
- if (deviceChannel != null) {
|
|
|
- recordXml.append("<DeviceID>" + recordItem.getDeviceId() + "</DeviceID>\r\n");
|
|
|
- recordXml.append("<Name>" + recordItem.getName() + "</Name>\r\n");
|
|
|
- recordXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(recordItem.getStartTime()) + "</StartTime>\r\n");
|
|
|
- recordXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(recordItem.getEndTime()) + "</EndTime>\r\n");
|
|
|
- recordXml.append("<Secrecy>" + recordItem.getSecrecy() + "</Secrecy>\r\n");
|
|
|
- recordXml.append("<Type>" + recordItem.getType() + "</Type>\r\n");
|
|
|
- if (!ObjectUtils.isEmpty(recordItem.getFileSize())) {
|
|
|
- recordXml.append("<FileSize>" + recordItem.getFileSize() + "</FileSize>\r\n");
|
|
|
- }
|
|
|
- if (!ObjectUtils.isEmpty(recordItem.getFilePath())) {
|
|
|
- recordXml.append("<FilePath>" + recordItem.getFilePath() + "</FilePath>\r\n");
|
|
|
- }
|
|
|
+ String characterSet = parentPlatform.getCharacterSet();
|
|
|
+ StringBuffer recordXml = new StringBuffer(600);
|
|
|
+ recordXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
+ recordXml.append("<Response>\r\n");
|
|
|
+ recordXml.append("<CmdType>RecordInfo</CmdType>\r\n");
|
|
|
+ recordXml.append("<SN>" +recordInfo.getSn() + "</SN>\r\n");
|
|
|
+ recordXml.append("<DeviceID>" + recordInfo.getDeviceId() + "</DeviceID>\r\n");
|
|
|
+ recordXml.append("<SumNum>" + recordInfo.getSumNum() + "</SumNum>\r\n");
|
|
|
+ if (recordInfo.getRecordList() == null ) {
|
|
|
+ recordXml.append("<RecordList Num=\"0\">\r\n");
|
|
|
+ }else {
|
|
|
+ recordXml.append("<RecordList Num=\"" + recordInfo.getRecordList().size()+"\">\r\n");
|
|
|
+ if (recordInfo.getRecordList().size() > 0) {
|
|
|
+ for (RecordItem recordItem : recordInfo.getRecordList()) {
|
|
|
+ recordXml.append("<Item>\r\n");
|
|
|
+ if (deviceChannel != null) {
|
|
|
+ recordXml.append("<DeviceID>" + recordItem.getDeviceId() + "</DeviceID>\r\n");
|
|
|
+ recordXml.append("<Name>" + recordItem.getName() + "</Name>\r\n");
|
|
|
+ recordXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(recordItem.getStartTime()) + "</StartTime>\r\n");
|
|
|
+ recordXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(recordItem.getEndTime()) + "</EndTime>\r\n");
|
|
|
+ recordXml.append("<Secrecy>" + recordItem.getSecrecy() + "</Secrecy>\r\n");
|
|
|
+ recordXml.append("<Type>" + recordItem.getType() + "</Type>\r\n");
|
|
|
+ if (!ObjectUtils.isEmpty(recordItem.getFileSize())) {
|
|
|
+ recordXml.append("<FileSize>" + recordItem.getFileSize() + "</FileSize>\r\n");
|
|
|
+ }
|
|
|
+ if (!ObjectUtils.isEmpty(recordItem.getFilePath())) {
|
|
|
+ recordXml.append("<FilePath>" + recordItem.getFilePath() + "</FilePath>\r\n");
|
|
|
}
|
|
|
- recordXml.append("</Item>\r\n");
|
|
|
}
|
|
|
+ recordXml.append("</Item>\r\n");
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- recordXml.append("</RecordList>\r\n");
|
|
|
- recordXml.append("</Response>\r\n");
|
|
|
+ recordXml.append("</RecordList>\r\n");
|
|
|
+ recordXml.append("</Response>\r\n");
|
|
|
|
|
|
- // callid
|
|
|
- CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
- Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, recordXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
- transmitRequest(parentPlatform, request);
|
|
|
+ // callid
|
|
|
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
+ : udpSipProvider.getNewCallId();
|
|
|
+ Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, recordXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
|
|
|
+ transmitRequest(parentPlatform, request);
|
|
|
|
|
|
- } catch (SipException | ParseException | InvalidArgumentException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean sendMediaStatusNotify(ParentPlatform platform, SendRtpItem sendRtpItem) {
|
|
|
- if (sendRtpItem == null) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- if (platform == null) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- try{
|
|
|
-
|
|
|
- String characterSet = platform.getCharacterSet();
|
|
|
- StringBuffer mediaStatusXml = new StringBuffer(200);
|
|
|
- mediaStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
- mediaStatusXml.append("<Notify>\r\n");
|
|
|
- mediaStatusXml.append("<CmdType>MediaStatus</CmdType>\r\n");
|
|
|
- mediaStatusXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
|
|
|
- mediaStatusXml.append("<DeviceID>" + sendRtpItem.getChannelId() + "</DeviceID>\r\n");
|
|
|
- mediaStatusXml.append("<NotifyType>121</NotifyType>\r\n");
|
|
|
- mediaStatusXml.append("</Notify>\r\n");
|
|
|
-
|
|
|
- SIPRequest messageRequest = (SIPRequest)headerProviderPlatformProvider.createMessageRequest(platform, mediaStatusXml.toString(),
|
|
|
- sendRtpItem);
|
|
|
-
|
|
|
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
|
|
|
- messageRequest.setContent(mediaStatusXml.toString(), contentTypeHeader);
|
|
|
- SipURI sipURI = (SipURI) messageRequest.getRequestURI();
|
|
|
- sipURI.setHost(platform.getServerIP());
|
|
|
- sipURI.setPort(platform.getServerPort());
|
|
|
- ClientTransaction clientTransaction;
|
|
|
- if ("TCP".equals(platform.getTransport())) {
|
|
|
- clientTransaction = tcpSipProvider.getNewClientTransaction(messageRequest);
|
|
|
- }else {
|
|
|
- clientTransaction = udpSipProvider.getNewClientTransaction(messageRequest);
|
|
|
- }
|
|
|
- clientTransaction.sendRequest();
|
|
|
- } catch (SipException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
- } catch (ParseException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return false;
|
|
|
- } catch (InvalidArgumentException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
+ public void sendMediaStatusNotify(ParentPlatform platform, SendRtpItem sendRtpItem) throws SipException, InvalidArgumentException, ParseException {
|
|
|
+ if (sendRtpItem == null || platform == null) {
|
|
|
+ return;
|
|
|
}
|
|
|
- return true;
|
|
|
|
|
|
|
|
|
+ String characterSet = platform.getCharacterSet();
|
|
|
+ StringBuffer mediaStatusXml = new StringBuffer(200);
|
|
|
+ mediaStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
|
|
+ mediaStatusXml.append("<Notify>\r\n");
|
|
|
+ mediaStatusXml.append("<CmdType>MediaStatus</CmdType>\r\n");
|
|
|
+ mediaStatusXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
|
|
|
+ mediaStatusXml.append("<DeviceID>" + sendRtpItem.getChannelId() + "</DeviceID>\r\n");
|
|
|
+ mediaStatusXml.append("<NotifyType>121</NotifyType>\r\n");
|
|
|
+ mediaStatusXml.append("</Notify>\r\n");
|
|
|
+
|
|
|
+ SIPRequest messageRequest = (SIPRequest)headerProviderPlatformProvider.createMessageRequest(platform, mediaStatusXml.toString(),
|
|
|
+ sendRtpItem);
|
|
|
+
|
|
|
+ transmitRequest(platform, messageRequest);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void streamByeCmd(ParentPlatform platform, String callId) {
|
|
|
+ public void streamByeCmd(ParentPlatform platform, String callId) throws SipException, InvalidArgumentException, ParseException {
|
|
|
if (platform == null) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -828,7 +674,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void streamByeCmd(ParentPlatform platform, SendRtpItem sendRtpItem) {
|
|
|
+ public void streamByeCmd(ParentPlatform platform, SendRtpItem sendRtpItem) throws SipException, InvalidArgumentException, ParseException {
|
|
|
if (sendRtpItem == null ) {
|
|
|
logger.info("[向上级发送BYE], sendRtpItem 为NULL");
|
|
|
return;
|
|
|
@@ -844,25 +690,10 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
|
|
mediaServerService.releaseSsrc(mediaServerItem.getId(), sendRtpItem.getSsrc());
|
|
|
zlmrtpServerFactory.closeRTPServer(mediaServerItem, sendRtpItem.getStreamId());
|
|
|
}
|
|
|
- try {
|
|
|
-
|
|
|
- SIPRequest byeRequest = headerProviderPlatformProvider.createByeRequest(platform, sendRtpItem);
|
|
|
- if (byeRequest == null) {
|
|
|
- logger.warn("[向上级发送bye]:无法创建 byeRequest");
|
|
|
- }
|
|
|
- ClientTransaction clientTransaction;
|
|
|
- if ("TCP".equals(platform.getTransport())) {
|
|
|
- clientTransaction = tcpSipProvider.getNewClientTransaction(byeRequest);
|
|
|
- } else {
|
|
|
- clientTransaction = udpSipProvider.getNewClientTransaction(byeRequest);
|
|
|
- }
|
|
|
- clientTransaction.sendRequest();
|
|
|
- } catch (SipException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (ParseException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (InvalidArgumentException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
+ SIPRequest byeRequest = headerProviderPlatformProvider.createByeRequest(platform, sendRtpItem);
|
|
|
+ if (byeRequest == null) {
|
|
|
+ logger.warn("[向上级发送bye]:无法创建 byeRequest");
|
|
|
}
|
|
|
+ transmitRequest(platform,byeRequest);
|
|
|
}
|
|
|
}
|