From 0dfce85d2f981c1793472468ace0773af9f30e01 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 15 三月 2022 15:40:15 +0800
Subject: [PATCH] 必须提前在zlm上配置port_range属性,不然自动配置此属性可能不成功
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
index d4de725..34d4536 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
@@ -1,9 +1,11 @@
package com.genersoft.iot.vmp.gb28181.transmit.event.request;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import gov.nist.javax.sip.SipProviderImpl;
import gov.nist.javax.sip.SipStackImpl;
import gov.nist.javax.sip.message.SIPRequest;
import gov.nist.javax.sip.stack.SIPServerTransaction;
+import org.apache.commons.lang3.ArrayUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
@@ -25,7 +27,12 @@
import javax.sip.message.Request;
import javax.sip.message.Response;
import java.io.ByteArrayInputStream;
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
/**
* @description:澶勭悊鎺ユ敹IPCamera鍙戞潵鐨凷IP鍗忚璇锋眰娑堟伅
@@ -154,13 +161,18 @@
* @throws InvalidArgumentException
* @throws ParseException
*/
- public void responseSdpAck(RequestEvent evt, String sdp) throws SipException, InvalidArgumentException, ParseException {
+ public void responseSdpAck(RequestEvent evt, String sdp, ParentPlatform platform) throws SipException, InvalidArgumentException, ParseException {
Response response = getMessageFactory().createResponse(Response.OK, evt.getRequest());
SipFactory sipFactory = SipFactory.getInstance();
ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
response.setContent(sdp, contentTypeHeader);
+ // 鍏煎鍥芥爣涓殑浣跨敤缂栫爜@鍩熷悕浣滀负RequestURI鐨勬儏鍐�
SipURI sipURI = (SipURI)evt.getRequest().getRequestURI();
+ if (sipURI.getPort() == -1) {
+ sipURI = sipFactory.createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerIP()+":"+platform.getServerPort());
+ }
+ logger.debug("responseSdpAck SipURI: {}:{}", sipURI.getHost(), sipURI.getPort());
Address concatAddress = sipFactory.createAddressFactory().createAddress(
sipFactory.createAddressFactory().createSipURI(sipURI.getUser(), sipURI.getHost()+":"+sipURI.getPort()
@@ -177,13 +189,18 @@
* @throws InvalidArgumentException
* @throws ParseException
*/
- public Response responseXmlAck(RequestEvent evt, String xml) throws SipException, InvalidArgumentException, ParseException {
+ public Response responseXmlAck(RequestEvent evt, String xml, ParentPlatform platform) throws SipException, InvalidArgumentException, ParseException {
Response response = getMessageFactory().createResponse(Response.OK, evt.getRequest());
SipFactory sipFactory = SipFactory.getInstance();
- ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "MANSCDP+xml");
+ ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
response.setContent(xml, contentTypeHeader);
+ // 鍏煎鍥芥爣涓殑浣跨敤缂栫爜@鍩熷悕浣滀负RequestURI鐨勬儏鍐�
SipURI sipURI = (SipURI)evt.getRequest().getRequestURI();
+ if (sipURI.getPort() == -1) {
+ sipURI = sipFactory.createAddressFactory().createSipURI(platform.getServerGBId(), platform.getServerIP()+":"+platform.getServerPort());
+ }
+ logger.debug("responseXmlAck SipURI: {}:{}", sipURI.getHost(), sipURI.getPort());
Address concatAddress = sipFactory.createAddressFactory().createAddress(
sipFactory.createAddressFactory().createSipURI(sipURI.getUser(), sipURI.getHost()+":"+sipURI.getPort()
@@ -202,7 +219,32 @@
Request request = evt.getRequest();
SAXReader reader = new SAXReader();
reader.setEncoding(charset);
- Document xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
+ // 瀵规捣搴峰嚭鐜扮殑鏈浆涔夊瓧绗﹀仛澶勭悊銆�
+ String[] destStrArray = new String[]{"<",">","&","'","""};
+ char despChar = '&'; // 鎴栬鍙墿灞曞吋瀹瑰叾浠栧瓧绗�
+ byte destBye = (byte) despChar;
+ List<Byte> result = new ArrayList<>();
+ byte[] rawContent = request.getRawContent();
+ for (int i = 0; i < rawContent.length; i++) {
+ if (rawContent[i] == destBye) {
+ boolean resul = false;
+ for (String destStr : destStrArray) {
+ if (i + destStr.length() <= rawContent.length) {
+ byte[] bytes = Arrays.copyOfRange(rawContent, i, i + destStr.length());
+ resul = resul || (Arrays.equals(bytes,destStr.getBytes()));
+ }
+ }
+ if (resul) {
+ result.add(rawContent[i]);
+ }
+ }else {
+ result.add(rawContent[i]);
+ }
+ }
+ Byte[] bytes = new Byte[0];
+ byte[] bytesResult = ArrayUtils.toPrimitive(result.toArray(bytes));
+
+ Document xml = reader.read(new ByteArrayInputStream(bytesResult));
return xml.getRootElement();
}
--
Gitblit v1.8.0