648540858
2022-10-17 f6320c7dd3dfd25e98bb63f41d79a33af5009a93
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
@@ -1,12 +1,13 @@
package com.genersoft.iot.vmp.gb28181.transmit.event.request;
import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
import gov.nist.javax.sip.SipProviderImpl;
import gov.nist.javax.sip.SipStackImpl;
import gov.nist.javax.sip.message.SIPRequest;
import gov.nist.javax.sip.message.SIPResponse;
import gov.nist.javax.sip.stack.SIPServerTransaction;
import gov.nist.javax.sip.stack.SIPServerTransactionImpl;
import org.apache.commons.lang3.ArrayUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
@@ -26,8 +27,6 @@
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;
@@ -50,6 +49,9 @@
   @Qualifier(value="udpSipProvider")
   private SipProviderImpl udpSipProvider;
   @Autowired
   private SipConfig sipConfig;
   /**
    * 根据 RequestEvent 获取 ServerTransaction
    * @param evt
@@ -57,33 +59,36 @@
    */
   public ServerTransaction getServerTransaction(RequestEvent evt) {
      Request request = evt.getRequest();
      ServerTransaction serverTransaction = evt.getServerTransaction();
      SIPServerTransactionImpl serverTransaction = (SIPServerTransactionImpl)evt.getServerTransaction();
      // 判断TCP还是UDP
      boolean isTcp = false;
      ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
      String transport = reqViaHeader.getTransport();
      boolean isTcp = "TCP".equals(transport);
      if (transport.equalsIgnoreCase("TCP")) {
         isTcp = true;
      }
      if (serverTransaction != null && serverTransaction.getOriginalRequest() == null) {
         serverTransaction.setOriginalRequest((SIPRequest) evt.getRequest());
      }
      if (serverTransaction == null) {
         try {
            if (isTcp) {
               SipStackImpl stack = (SipStackImpl)tcpSipProvider.getSipStack();
               serverTransaction = (SIPServerTransaction) stack.findTransaction((SIPRequest)request, true);
               serverTransaction = (SIPServerTransactionImpl) stack.findTransaction((SIPRequest)request, true);
               if (serverTransaction == null) {
                  serverTransaction = tcpSipProvider.getNewServerTransaction(request);
                  serverTransaction = (SIPServerTransactionImpl)tcpSipProvider.getNewServerTransaction(request);
               }
            } else {
               SipStackImpl stack = (SipStackImpl)udpSipProvider.getSipStack();
               serverTransaction = (SIPServerTransaction) stack.findTransaction((SIPRequest)request, true);
               serverTransaction = (SIPServerTransactionImpl) stack.findTransaction((SIPRequest)request, true);
               if (serverTransaction == null) {
                  serverTransaction = udpSipProvider.getNewServerTransaction(request);
                  serverTransaction = (SIPServerTransactionImpl)udpSipProvider.getNewServerTransaction(request);
               }
            }
         } catch (TransactionAlreadyExistsException e) {
            logger.error(e.getMessage());
         } catch (TransactionUnavailableException e) {
            logger.error(e.getMessage());
         }finally {
         }
      }
      return serverTransaction;
@@ -185,7 +190,6 @@
    * 回复带sdp的200
    */
   public SIPResponse responseSdpAck(ServerTransaction serverTransaction, String sdp, ParentPlatform platform) throws SipException, InvalidArgumentException, ParseException {
      ContentTypeHeader contentTypeHeader = SipFactory.getInstance().createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
      // 兼容国标中的使用编码@域名作为RequestURI的情况