From ecaf8750dd9c537e581ae05c65be9a26db5e67a7 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 24 十一月 2020 16:41:00 +0800
Subject: [PATCH] 完成向上级联->注册
---
src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java | 21 ++
src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java | 45 +++++
src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java | 6
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java | 3
README.md | 3
src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java | 13 +
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java | 7
web_src/src/components/platformEdit.vue | 42 ++++
src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 72 +++++++++
src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java | 5
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java | 10
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 81 ++++++++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java | 13 +
src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java | 23 ++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java | 83 ++++++++++
16 files changed, 416 insertions(+), 13 deletions(-)
diff --git a/README.md b/README.md
index 583d34e..2cca7a5 100644
--- a/README.md
+++ b/README.md
@@ -38,7 +38,8 @@
# 2.0 鏀寔鐗规��
- [ ] 鍥芥爣閫氶亾鍚戜笂绾ц仈
- [X] WEB娣诲姞涓婄骇骞冲彴
- - [ ] 娉ㄥ唽
+ - [X] 娉ㄥ唽
+ - [ ] 蹇冭烦淇濇椿
- [ ] 閫氶亾閫夋嫨
- [ ] 閫氶亾鎺ㄩ��
- [ ] 鐐规挱
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
index bfdc8f6..9b091e6 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -123,7 +123,7 @@
public void processResponse(ResponseEvent evt) {
Response response = evt.getResponse();
int status = response.getStatusCode();
- if ((status >= 200) && (status < 300)) { // Success!
+ if (((status >= 200) && (status < 300)) || status == 401) { // Success!
ISIPResponseProcessor processor = processorFactory.createResponseProcessor(evt);
try {
processor.process(evt, this, sipConfig);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
index ebf0430..3e0a184 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
@@ -1,5 +1,8 @@
package com.genersoft.iot.vmp.gb28181.event;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent;
+import com.genersoft.iot.vmp.vmanager.platform.PlatformController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
@@ -31,4 +34,14 @@
outEvent.setFrom(from);
applicationEventPublisher.publishEvent(outEvent);
}
+
+ /**
+ * 骞冲彴鏈敞鍐屼簨浠�
+ * @param platformGbId
+ */
+ public void platformNotRegisterEventPublish(String platformGbId){
+ PlatformNotRegisterEvent platformNotRegisterEvent = new PlatformNotRegisterEvent(this);
+ platformNotRegisterEvent.setPlatformGbID(platformGbId);
+ applicationEventPublisher.publishEvent(platformNotRegisterEvent);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java
new file mode 100644
index 0000000..9c238d7
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java
@@ -0,0 +1,21 @@
+package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
+
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import org.springframework.context.ApplicationEvent;
+
+public class PlatformNotRegisterEvent extends ApplicationEvent {
+
+ private String platformGbID;
+
+ public PlatformNotRegisterEvent(Object source) {
+ super(source);
+ }
+
+ public String getPlatformGbID() {
+ return platformGbID;
+ }
+
+ public void setPlatformGbID(String platformGbID) {
+ this.platformGbID = platformGbID;
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java
new file mode 100644
index 0000000..564d382
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java
@@ -0,0 +1,45 @@
+package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
+
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.event.online.OnlineEvent;
+import com.genersoft.iot.vmp.gb28181.event.online.OnlineEventListener;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import com.genersoft.iot.vmp.utils.redis.RedisUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 骞冲彴鏈敞鍐屼簨浠�,鏉ユ簮鏈変簩:
+ * 1銆佸钩鍙版柊娣诲姞
+ * 2銆佸钩鍙板績璺宠秴鏃�
+ * @author: panll
+ * @date: 2020骞�11鏈�24鏃� 10:00
+ */
+@Component
+public class PlatformNotRegisterEventLister implements ApplicationListener<PlatformNotRegisterEvent> {
+
+ private final static Logger logger = LoggerFactory.getLogger(PlatformNotRegisterEventLister.class);
+
+ @Autowired
+ private IVideoManagerStorager storager;
+
+ @Autowired
+ private RedisUtil redis;
+
+ @Override
+ public void onApplicationEvent(PlatformNotRegisterEvent event) {
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("骞冲彴鏈敞鍐屼簨浠惰Е鍙戯紝骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID());
+ }
+ ParentPlatform parentPlatform = storager.queryParentPlatById(event.getPlatformGbID());
+ if (parentPlatform == null) {
+ logger.debug("骞冲彴鏈敞鍐屼簨浠惰Е鍙戯紝浣嗗钩鍙板凡缁忓垹闄�!!! 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID());
+ return;
+ }
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
index 73fb474..3ee95f9 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
@@ -8,6 +8,7 @@
import javax.sip.message.Response;
import com.alibaba.fastjson.JSON;
+import com.genersoft.iot.vmp.gb28181.transmit.response.impl.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,10 +31,6 @@
import com.genersoft.iot.vmp.gb28181.transmit.request.impl.RegisterRequestProcessor;
import com.genersoft.iot.vmp.gb28181.transmit.request.impl.SubscribeRequestProcessor;
import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.response.impl.ByeResponseProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.response.impl.CancelResponseProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.response.impl.InviteResponseProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.response.impl.OtherResponseProcessor;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.utils.SpringBeanFactory;
import com.genersoft.iot.vmp.utils.redis.RedisUtil;
@@ -80,6 +77,9 @@
@Autowired
private CancelResponseProcessor cancelResponseProcessor;
+
+ @Autowired
+ private RegisterResponseProcessor registerResponseProcessor;
@Autowired
private OtherResponseProcessor otherResponseProcessor;
@@ -154,6 +154,8 @@
return byeResponseProcessor;
} else if (Request.CANCEL.equals(method)) {
return cancelResponseProcessor;
+ }else if (Request.REGISTER.equals(method)) {
+ return registerResponseProcessor;
} else {
return otherResponseProcessor;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
index 923f211..32cc06e 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -2,6 +2,7 @@
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.gb28181.bean.Device;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
/**
* @Description:璁惧鑳藉姏鎺ュ彛锛岀敤浜庡畾涔夎澶囩殑鎺у埗銆佹煡璇㈣兘鍔�
@@ -212,4 +213,6 @@
* @param device 瑙嗛璁惧
*/
public boolean mobilePostitionQuery(Device device);
+
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
new file mode 100644
index 0000000..9ec2b49
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
@@ -0,0 +1,13 @@
+package com.genersoft.iot.vmp.gb28181.transmit.cmd;
+
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+
+public interface ISIPCommanderForPlatform {
+
+ /**
+ * 鍚戜笂绾у钩鍙版敞鍐�
+ * @param parentPlatform
+ * @return
+ */
+ boolean register(ParentPlatform parentPlatform, String callId, String realm, String nonce, String scheme);
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
index 2233ee0..fa3465d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
@@ -11,7 +11,9 @@
import javax.sip.address.SipURI;
import javax.sip.header.*;
import javax.sip.message.Request;
+import javax.validation.constraints.NotNull;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@@ -19,6 +21,7 @@
import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.Host;
+import org.springframework.util.DigestUtils;
/**
* @Description:鎽勫儚澶村懡浠equest鍒涢�犲櫒 TODO 鍐椾綑浠g爜澶寰呬紭鍖�
@@ -168,4 +171,73 @@
request.setContent(content, contentTypeHeader);
return request;
}
+
+
+ public Request createRegisterRequest(@NotNull ParentPlatform platform, String fromTag, String viaTag) throws ParseException, InvalidArgumentException, PeerUnavailableException {
+ Request request = null;
+ String sipAddress = sipConfig.getSipIp() + ":" + sipConfig.getSipPort();
+ //璇锋眰琛�
+ SipURI requestLine = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),
+ platform.getServerIP() + ":" + platform.getServerPort());
+ //via
+ ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
+ ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(platform.getServerIP(), platform.getServerPort(), platform.getTransport(), viaTag);
+ viaHeader.setRPort();
+ viaHeaders.add(viaHeader);
+ //from
+ SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),sipAddress);
+ Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
+ //to
+ SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),sipAddress);
+ Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
+
+ //callid
+ CallIdHeader callIdHeader = null;
+ if(platform.getTransport().equals("TCP")) {
+ callIdHeader = tcpSipProvider.getNewCallId();
+ }
+ if(platform.getTransport().equals("UDP")) {
+ callIdHeader = udpSipProvider.getNewCallId();
+ }
+
+ //Forwards
+ MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+
+ //ceq
+ CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(1L, Request.REGISTER);
+ request = sipFactory.createMessageFactory().createRequest(requestLine, Request.REGISTER, callIdHeader,
+ cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
+
+ Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory()
+ .createSipURI(platform.getDeviceGBId(), sipAddress));
+ request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+
+ return request;
+ }
+
+ public Request createRegisterRequest(@NotNull ParentPlatform parentPlatform, String fromTag, String viaTag,
+ String callId, String realm, String nonce, String scheme) throws ParseException, PeerUnavailableException, InvalidArgumentException {
+ Request registerRequest = createRegisterRequest(parentPlatform, fromTag, viaTag);
+
+ CallIdHeader callIdHeader = (CallIdHeader)registerRequest.getHeader(CallIdHeader.NAME);
+ callIdHeader.setCallId(callId);
+
+ String uri = "sip:" + parentPlatform.getServerGBId() +
+ "@" + parentPlatform.getServerIP() +
+ ":" + parentPlatform.getServerPort();
+
+ String HA1 = DigestUtils.md5DigestAsHex((parentPlatform.getDeviceGBId() + ":" + realm + ":" + parentPlatform.getPassword()).getBytes());
+ String HA2=DigestUtils.md5DigestAsHex((Request.REGISTER + ":" + uri).getBytes());
+ String RESPONSE = DigestUtils.md5DigestAsHex((HA1 + ":" + nonce + ":" + HA2).getBytes());
+
+ String authorizationHeaderContent = scheme + " username=\"" + parentPlatform.getDeviceGBId() + "\", " + "realm=\""
+ + realm + "\", uri=\"" + uri + "\", response=\"" + RESPONSE + "\", nonce=\""
+ + nonce + "\"";
+ AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader(authorizationHeaderContent);
+ registerRequest.addHeader(authorizationHeader);
+
+ return registerRequest;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
new file mode 100644
index 0000000..baf6e5a
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -0,0 +1,81 @@
+package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl;
+
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
+import com.genersoft.iot.vmp.media.zlm.ZLMUtils;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
+
+import javax.sip.*;
+import javax.sip.message.Request;
+import java.text.ParseException;
+
+@Component
+public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
+
+ @Autowired
+ private SipConfig sipConfig;
+
+ @Autowired
+ private SIPRequestHeaderProvider headerProvider;
+
+ @Autowired
+ private VideoStreamSessionManager streamSession;
+
+ @Autowired
+ private IVideoManagerStorager storager;
+
+ @Autowired
+ @Qualifier(value="tcpSipProvider")
+ private SipProvider tcpSipProvider;
+
+ @Autowired
+ @Qualifier(value="udpSipProvider")
+ private SipProvider udpSipProvider;
+
+ @Autowired
+ private ZLMUtils zlmUtils;
+
+ @Value("${media.rtp.enable}")
+ private boolean rtpEnable;
+
+ @Override
+ public boolean register(ParentPlatform parentPlatform, @Nullable String callId, @Nullable String realm, @Nullable String nonce, @Nullable String scheme ) {
+ try {
+ Request request = null;
+ if (realm == null || nonce == null) {
+ request = headerProvider.createRegisterRequest(parentPlatform, null, null);
+ }else {
+ request = headerProvider.createRegisterRequest(parentPlatform, null, null, callId, realm, nonce, scheme);
+ }
+
+ transmitRequest(parentPlatform, request);
+ return true;
+ } catch (ParseException e) {
+ e.printStackTrace();
+ } catch (InvalidArgumentException e) {
+ e.printStackTrace();
+ } catch (PeerUnavailableException e) {
+ e.printStackTrace();
+ } catch (SipException e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ private void transmitRequest(ParentPlatform parentPlatform, Request request) throws SipException {
+ if("TCP".equals(parentPlatform.getTransport())) {
+ tcpSipProvider.sendRequest(request);
+ } else if("UDP".equals(parentPlatform.getTransport())) {
+ udpSipProvider.sendRequest(request);
+ }
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java
new file mode 100644
index 0000000..9fb1312
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java
@@ -0,0 +1,83 @@
+package com.genersoft.iot.vmp.gb28181.transmit.response.impl;
+
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.SipLayer;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
+import com.genersoft.iot.vmp.gb28181.transmit.request.impl.RegisterRequestProcessor;
+import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import gov.nist.core.Host;
+import gov.nist.javax.sip.address.AddressImpl;
+import gov.nist.javax.sip.address.SipUri;
+import gov.nist.javax.sip.header.To;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.sip.ResponseEvent;
+import javax.sip.address.Address;
+import javax.sip.address.URI;
+import javax.sip.header.CallIdHeader;
+import javax.sip.header.ToHeader;
+import javax.sip.header.WWWAuthenticateHeader;
+import javax.sip.message.Response;
+
+/**
+ * @Description:Register鍝嶅簲澶勭悊鍣�
+ * @author: swwheihei
+ * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:23
+ */
+@Component
+public class RegisterResponseProcessor implements ISIPResponseProcessor {
+
+ private Logger logger = LoggerFactory.getLogger(RegisterRequestProcessor.class);
+
+ @Autowired
+ private ISIPCommanderForPlatform sipCommanderForPlatform;
+
+ @Autowired
+ private IVideoManagerStorager storager;
+
+ /**
+ * 澶勭悊Register鍝嶅簲
+ *
+ * @param evt
+ * @param layer
+ * @param config
+ */
+ @Override
+ public void process(ResponseEvent evt, SipLayer layer, SipConfig config) {
+ // TODO Auto-generated method stub
+ Response response = evt.getResponse();
+ ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME);
+ SipUri uri = (SipUri)toHeader.getAddress().getURI();
+ String platformGBId = uri.getAuthority().getUser();
+ logger.info(String.format("鏀跺埌 %s 鐨勬敞鍐�%S璇锋眰", platformGBId, response.getStatusCode() ));
+
+ ParentPlatform parentPlatform = storager.queryParentPlatById(platformGBId);
+ if (parentPlatform == null) {
+ logger.warn(String.format("鏀跺埌 %s 鐨勬敞鍐�%S璇锋眰, 浣嗘槸骞冲彴淇℃伅鏈煡璇㈠埌!!!", platformGBId, response.getStatusCode()));
+ return;
+ }
+
+ if (response.getStatusCode() == 401) {
+
+ WWWAuthenticateHeader www = (WWWAuthenticateHeader)response.getHeader(WWWAuthenticateHeader.NAME);
+ String realm = www.getRealm();
+ String nonce = www.getNonce();
+ String scheme = www.getScheme();
+
+ CallIdHeader callIdHeader = (CallIdHeader)response.getHeader(CallIdHeader.NAME);
+ String callId = callIdHeader.getCallId();
+ sipCommanderForPlatform.register(parentPlatform, callId, realm, nonce, scheme);
+ }else if (response.getStatusCode() == 200){
+ // 娉ㄥ唽鎴愬姛
+ logger.info(String.format("%s 娉ㄥ唽鎴愬姛", platformGBId ));
+ parentPlatform.setStatus(true);
+ storager.updateParentPlatform(parentPlatform);
+ }
+ }
+
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
index 8842230..b58caae 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -213,4 +213,11 @@
* @return
*/
public PageResult<ParentPlatform> queryParentPlatformList(int page, int count);
+
+ /**
+ * 鑾峰彇涓婄骇骞冲彴
+ * @param platformGbId
+ * @return
+ */
+ public ParentPlatform queryParentPlatById(String platformGbId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
index 645c803..5e8ba1a 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
@@ -229,4 +229,9 @@
public PageResult<ParentPlatform> queryParentPlatformList(int page, int count) {
return null;
}
+
+ @Override
+ public ParentPlatform queryParentPlatById(String platformGbId) {
+ return null;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
index 0e21167..ad77995 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
@@ -561,6 +561,7 @@
@Override
public boolean updateParentPlatform(ParentPlatform parentPlatform) {
+
// 瀛樺偍device
return redis.set(VideoManagerConstants.PLATFORM_PREFIX + parentPlatform.getDeviceGBId(), parentPlatform);
}
@@ -587,4 +588,9 @@
pageResult.setData(resultData);
return pageResult;
}
+
+ @Override
+ public ParentPlatform queryParentPlatById(String platformGbId) {
+ return (ParentPlatform)redis.get(VideoManagerConstants.PLATFORM_PREFIX + platformGbId);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java
index 27dbdd4..8af7cbf 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java
@@ -3,6 +3,8 @@
import com.genersoft.iot.vmp.common.PageResult;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.vmanager.device.DeviceController;
import org.slf4j.Logger;
@@ -23,6 +25,9 @@
@Autowired
private IVideoManagerStorager storager;
+
+ @Autowired
+ private ISIPCommanderForPlatform commanderForPlatform;
@GetMapping("/platforms/{count}/{page}")
public PageResult<ParentPlatform> platforms(@PathVariable int page, @PathVariable int count){
@@ -53,8 +58,13 @@
){
return new ResponseEntity<>("missing parameters", HttpStatus.BAD_REQUEST);
}
+ // TODO 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦�,涓旀敞鍐屾垚鍔�, 濡傛灉娉ㄥ唽鎴愬姛,闇�瑕佸厛娉ㄩ攢涔嬪墠鍐�,淇敼骞舵敞鍐�
+
boolean updateResult = storager.updateParentPlatform(parentPlatform);
+
if (updateResult) {
+ commanderForPlatform.register(parentPlatform, null, null, null, null);
+
return new ResponseEntity<>("success", HttpStatus.OK);
}else {
return new ResponseEntity<>("fail", HttpStatus.OK);
@@ -79,4 +89,17 @@
return new ResponseEntity<>("fail", HttpStatus.OK);
}
}
+
+ @RequestMapping("/platforms/exit/{deviceGbId}")
+ @ResponseBody
+ public ResponseEntity<String> exitPlatform(@PathVariable String deviceGbId){
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("鏌ヨ鎵�鏈変笂绾ц澶嘇PI璋冪敤");
+ }
+ ParentPlatform parentPlatform = storager.queryParentPlatById(deviceGbId);
+ return new ResponseEntity<>(String.valueOf(parentPlatform != null), HttpStatus.OK);
+ }
+
+
}
diff --git a/web_src/src/components/platformEdit.vue b/web_src/src/components/platformEdit.vue
index faacdde..7dee4ca 100644
--- a/web_src/src/components/platformEdit.vue
+++ b/web_src/src/components/platformEdit.vue
@@ -30,7 +30,7 @@
<el-form-item label="鏈湴绔彛" prop="devicePort">
<el-input v-model="platform.devicePort" :disabled="true"></el-input>
</el-form-item>
-
+
</el-form>
</el-col>
<el-col :span="12">
@@ -61,8 +61,8 @@
</el-form-item>
<el-form-item label="鍏朵粬閫夐」" >
<el-checkbox label="鍚敤" v-model="platform.enable" ></el-checkbox>
- <el-checkbox label="鍏佽浜戝彴鎺у埗" v-model="platform.PTZEnable"></el-checkbox>
- <el-checkbox label="鍚敤RTCP淇濇椿" v-model="platform.rtcp"></el-checkbox>
+ <el-checkbox label="浜戝彴鎺у埗" v-model="platform.PTZEnable"></el-checkbox>
+ <el-checkbox label="RTCP淇濇椿" v-model="platform.rtcp"></el-checkbox>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">{{onSubmit_text}}</el-button>
@@ -81,10 +81,26 @@
name: 'platformEdit',
props: {},
computed: {
-
+
},
created() {},
data() {
+ var deviceGBIdRules = async (rule, value, callback) => {
+ console.log(value)
+ if (value === '') {
+ callback(new Error('璇疯緭鍏ヨ澶囧浗鏍囩紪鍙�'));
+ } else {
+ var exit = await this.deviceGBIdExit(value);
+ console.log(exit)
+ console.log(exit == "true")
+ console.log(exit === "true")
+ if (exit) {
+ callback(new Error('璁惧鍥芥爣缂栧彿宸插瓨鍦�'));
+ }else {
+ callback();
+ }
+ }
+ };
return {
listChangeCallback: null,
showDialog: false,
@@ -145,7 +161,7 @@
{ required: true, message:"璇疯緭鍏IP鏈嶅姟绔彛", trigger: 'blur' }
],
deviceGBId: [
- { required: true, message:"璇疯緭鍏ヨ澶囧浗鏍囩紪鍙�", trigger: 'blur' }
+ {validator: deviceGBIdRules, trigger: 'blur' }
],
username: [
{ required: false, message:"璇疯緭鍏IP璁よ瘉鐢ㄦ埛鍚�", trigger: 'blur' }
@@ -176,7 +192,7 @@
this.platform = platform;
this.onSubmit_text = "淇濆瓨"
}
-
+
},
onSubmit: function () {
console.log('onSubmit');
@@ -206,7 +222,19 @@
this.showDialog = false;
this.$refs.platform1.resetFields();
this.$refs.platform2.resetFields();
-
+ },
+ deviceGBIdExit: async function (deviceGbId) {
+ var result = false;
+ var that = this
+ await that.$axios.post(`/api/platforms/exit/${deviceGbId}`)
+ .then(function (res) {
+ result = res.data;
+ })
+ .catch(function (error) {
+ console.log(error);
+ });
+ return result;
+
}
}
--
Gitblit v1.8.0