From 700398ba1359e75c766e5116b4b1d0f962b5fdf9 Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期二, 12 一月 2021 10:37:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java | 76 ++++++++++++++++++++++++++++++-------
1 files changed, 61 insertions(+), 15 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
index af7ac2d..befdd95 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
@@ -20,10 +20,11 @@
import javax.validation.constraints.NotNull;
import java.text.ParseException;
import java.util.ArrayList;
+import java.util.UUID;
/**
- * @Description:鎽勫儚澶村懡浠equest鍒涢�犲櫒 TODO 鍐椾綑浠g爜澶寰呬紭鍖�
- * @author: swwheihei
+ * @Description: 骞冲彴鍛戒护request鍒涢�犲櫒 TODO 鍐椾綑浠g爜澶寰呬紭鍖�
+ * @author: panll
* @date: 2020骞�5鏈�6鏃� 涓婂崍9:29:02
*/
@Component
@@ -79,7 +80,7 @@
}
- public Request createRegisterRequest(@NotNull ParentPlatform platform, String fromTag, String viaTag) throws ParseException, InvalidArgumentException, PeerUnavailableException {
+ 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();
//璇锋眰琛�
@@ -112,7 +113,7 @@
MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
//ceq
- CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(1L, Request.REGISTER);
+ CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(CSeq, Request.REGISTER);
request = sipFactory.createMessageFactory().createRequest(requestLine, Request.REGISTER, callIdHeader,
cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
@@ -120,28 +121,73 @@
.createSipURI(platform.getDeviceGBId(), sipAddress));
request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
+ ExpiresHeader expires = sipFactory.createHeaderFactory().createExpiresHeader(Integer.parseInt(platform.getExpires()));
+ 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, fromTag, viaTag);
+ String callId, WWWAuthenticateHeader www ) throws ParseException, PeerUnavailableException, InvalidArgumentException {
+ Request registerRequest = createRegisterRequest(parentPlatform, 2L, fromTag, viaTag);
+
+ String realm = www.getRealm();
+ String nonce = www.getNonce();
+ String scheme = www.getScheme();
+
+ // 鍙傝�� https://blog.csdn.net/y673533511/article/details/88388138
+ // qop 淇濇姢璐ㄩ噺 鍖呭惈auth锛堥粯璁ょ殑锛夊拰auth-int锛堝鍔犱簡鎶ユ枃瀹屾暣鎬ф娴嬶級涓ょ绛栫暐
+ String qop = www.getQop();
CallIdHeader callIdHeader = (CallIdHeader)registerRequest.getHeader(CallIdHeader.NAME);
callIdHeader.setCallId(callId);
- String uri = "sip:" + parentPlatform.getServerGBId() +
- "@" + parentPlatform.getServerIP() +
- ":" + parentPlatform.getServerPort();
+ SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort());
+ String cNonce = null;
+ String nc = "00000001";
+ if (qop != null) {
+ if ("auth".equals(qop)) {
+ // 瀹㈡埛绔殢鏈烘暟锛岃繖鏄竴涓笉閫忔槑鐨勫瓧绗︿覆鍊硷紝鐢卞鎴风鎻愪緵锛屽苟涓斿鎴风鍜屾湇鍔″櫒閮戒細浣跨敤锛屼互閬垮厤鐢ㄦ槑鏂囨枃鏈��
+ // 杩欎娇寰楀弻鏂归兘鍙互鏌ラ獙瀵规柟鐨勮韩浠斤紝骞跺娑堟伅鐨勫畬鏁存�ф彁渚涗竴浜涗繚鎶�
+ cNonce = UUID.randomUUID().toString();
+
+ }else if ("auth-int".equals(qop)){
+ // TODO
+ }
+ }
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 HA2=DigestUtils.md5DigestAsHex((Request.REGISTER + ":" + requestURI.toString()).getBytes());
- String authorizationHeaderContent = scheme + " username=\"" + parentPlatform.getDeviceGBId() + "\", " + "realm=\""
- + realm + "\", uri=\"" + uri + "\", response=\"" + RESPONSE + "\", nonce=\""
- + nonce + "\"";
- AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader(authorizationHeaderContent);
+ StringBuffer reStr = new StringBuffer(200);
+ reStr.append(HA1);
+ reStr.append(":");
+ reStr.append(nonce);
+ reStr.append(":");
+ if (qop != null) {
+ reStr.append(nc);
+ reStr.append(":");
+ reStr.append(cNonce);
+ reStr.append(":");
+ reStr.append(qop);
+ reStr.append(":");
+ }
+ reStr.append(HA2);
+
+ String RESPONSE = DigestUtils.md5DigestAsHex(reStr.toString().getBytes());
+
+ AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader(scheme);
+ authorizationHeader.setUsername(parentPlatform.getDeviceGBId());
+ authorizationHeader.setRealm(realm);
+ authorizationHeader.setNonce(nonce);
+ authorizationHeader.setURI(requestURI);
+ authorizationHeader.setResponse(RESPONSE);
+ authorizationHeader.setAlgorithm("MD5");
+ if (qop != null) {
+ authorizationHeader.setQop(qop);
+ authorizationHeader.setCNonce(cNonce);
+ authorizationHeader.setNonceCount(1);
+ }
registerRequest.addHeader(authorizationHeader);
return registerRequest;
--
Gitblit v1.8.0