From 8a82a71ded7459549e0c3448944fef97239e8fcb Mon Sep 17 00:00:00 2001
From: Lawrence <1934378145@qq.com>
Date: 星期四, 17 十二月 2020 14:49:34 +0800
Subject: [PATCH] 增加本平台配置查询接口,方便上级级联参数填写
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 88 +++++++++++++++++++++++++++++++++++++++----
1 files changed, 79 insertions(+), 9 deletions(-)
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 18a6a66..d4321d9 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
@@ -9,15 +9,11 @@
import javax.sip.SipProvider;
import javax.sip.address.Address;
import javax.sip.address.SipURI;
-import javax.sip.header.CSeqHeader;
-import javax.sip.header.CallIdHeader;
-import javax.sip.header.ContentTypeHeader;
-import javax.sip.header.FromHeader;
-import javax.sip.header.MaxForwardsHeader;
-import javax.sip.header.ToHeader;
-import javax.sip.header.ViaHeader;
+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;
@@ -25,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爜澶寰呬紭鍖�
@@ -83,7 +80,7 @@
return request;
}
- public Request createInviteRequest(Device device, String channelId, String content, String viaTag, String fromTag, String toTag) throws ParseException, InvalidArgumentException, PeerUnavailableException {
+ public Request createInviteRequest(Device device, String channelId, String content, String viaTag, String fromTag, String toTag, String ssrc) throws ParseException, InvalidArgumentException, PeerUnavailableException {
Request request = null;
Host host = device.getHost();
//璇锋眰琛�
@@ -122,7 +119,9 @@
Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(), sipConfig.getSipIp()+":"+sipConfig.getSipPort()));
// Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(), device.getHost().getIp()+":"+device.getHost().getPort()));
request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
-
+ // Subject
+ SubjectHeader subjectHeader = sipFactory.createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getSipId(), 0));
+ request.addHeader(subjectHeader);
ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "SDP");
request.setContent(content, contentTypeHeader);
return request;
@@ -172,4 +171,75 @@
request.setContent(content, contentTypeHeader);
return request;
}
+
+
+ public Request createRegisterRequest(@NotNull ParentPlatform platform, long CSeq, 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(CSeq, 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));
+
+ ExpiresHeader expires = sipFactory.createHeaderFactory().createExpiresHeader(3600);
+ request.addHeader(expires);
+
+ 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, 2L, 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 + "\", nonce=\"" + nonce + "\", uri=\"" + uri + "\", response=\"" + RESPONSE + "\"" + ", algorithm=MD5";
+ AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader(authorizationHeaderContent);
+ registerRequest.addHeader(authorizationHeader);
+
+ return registerRequest;
+ }
}
--
Gitblit v1.8.0